• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.accessibility;
18 
19 import static com.android.settings.accessibility.MagnificationFeedbackPreferenceController.FEEDBACK_KEY;
20 import static com.android.settings.accessibility.MagnificationFeedbackPreferenceController.PREF_KEY;
21 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
22 import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.doAnswer;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
31 
32 import android.content.Context;
33 
34 import androidx.core.util.Consumer;
35 import androidx.preference.Preference;
36 import androidx.preference.PreferenceManager;
37 import androidx.preference.PreferenceScreen;
38 import androidx.test.core.app.ApplicationProvider;
39 
40 import com.android.settings.R;
41 import com.android.settings.dashboard.DashboardFragment;
42 import com.android.settings.overlay.SurveyFeatureProvider;
43 import com.android.settings.testutils.FakeFeatureFactory;
44 
45 import org.junit.Before;
46 import org.junit.Rule;
47 import org.junit.Test;
48 import org.junit.runner.RunWith;
49 import org.mockito.Mock;
50 import org.mockito.junit.MockitoJUnit;
51 import org.mockito.junit.MockitoRule;
52 import org.robolectric.RobolectricTestRunner;
53 
54 /** Tests for {@link MagnificationFeedbackPreferenceController}. */
55 @RunWith(RobolectricTestRunner.class)
56 public class MagnificationFeedbackPreferenceControllerTest {
57 
58     @Rule
59     public MockitoRule mMockitoRule = MockitoJUnit.rule();
60 
61     private final Context mContext = ApplicationProvider.getApplicationContext();
62     @Mock private PreferenceScreen mScreen;
63     @Mock private PreferenceManager mPreferenceManager;
64     @Mock private DashboardFragment mFragment;
65     private SurveyFeatureProvider mSurveyFeatureProvider;
66     private MagnificationFeedbackPreferenceController mController;
67     private Preference mPreference;
68 
69     @Before
setUp()70     public void setUp() {
71         FakeFeatureFactory.setupForTest();
72         mSurveyFeatureProvider =
73                 FakeFeatureFactory.getFeatureFactory().getSurveyFeatureProvider(mContext);
74         mController = new MagnificationFeedbackPreferenceController(mContext, mFragment, PREF_KEY);
75         mPreference = new Preference(mContext);
76         when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
77         when(mPreferenceManager.findPreference(PREF_KEY)).thenReturn(mPreference);
78         when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
79     }
80 
81     @Test
getAvailabilityStatus_shouldAlwaysBeAvailable()82     public void getAvailabilityStatus_shouldAlwaysBeAvailable() {
83         assertThat(mController.getAvailabilityStatus()).isEqualTo(
84                 MagnificationFeedbackPreferenceController.AVAILABLE);
85     }
86 
87     @Test
updateState_surveyAvailable_preferenceEnabledWithSummary()88     public void updateState_surveyAvailable_preferenceEnabledWithSummary() {
89         doAnswer(invocation -> {
90             Consumer<Boolean> consumer = invocation.getArgument(2);
91             consumer.accept(true);
92             return null;
93         }).when(mSurveyFeatureProvider).checkSurveyAvailable(any(), eq(FEEDBACK_KEY), any());
94 
95         mController.updateState(mPreference);
96 
97         assertThat(mPreference.isEnabled()).isTrue();
98         assertThat(mPreference.getSummary()).isEqualTo(
99                 mContext.getString(R.string.accessibility_feedback_summary));
100     }
101 
102     @Test
updateState_surveyUnavailable_preferenceDisabledWithSummary()103     public void updateState_surveyUnavailable_preferenceDisabledWithSummary() {
104         doAnswer(invocation -> {
105             Consumer<Boolean> consumer = invocation.getArgument(2);
106             consumer.accept(false);
107             return null;
108         }).when(mSurveyFeatureProvider).checkSurveyAvailable(any(), eq(FEEDBACK_KEY), any());
109 
110         mController.updateState(mPreference);
111 
112         assertThat(mPreference.isEnabled()).isFalse();
113         assertThat(mPreference.getSummary()).isEqualTo(
114                 mContext.getString(R.string.accessibility_feedback_disabled_summary));
115     }
116 
117     @Test
handlePreferenceTreeClick_shouldStartSurvey()118     public void handlePreferenceTreeClick_shouldStartSurvey() {
119         mController.handlePreferenceTreeClick(mPreference);
120 
121         verify(mSurveyFeatureProvider).sendActivityIfAvailable(FEEDBACK_KEY);
122     }
123 
124     @Test
getAvailableStatus_notInSetupWizard_returnAvailable()125     public void getAvailableStatus_notInSetupWizard_returnAvailable() {
126         mController.setInSetupWizard(false);
127 
128         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
129     }
130 
131     @Test
getAvailableStatus_inSetupWizard_returnConditionallyUnavailable()132     public void getAvailableStatus_inSetupWizard_returnConditionallyUnavailable() {
133         mController.setInSetupWizard(true);
134 
135         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
136     }
137 }
138