• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
20 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
21 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
22 
23 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
24 import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
25 
26 import static com.google.common.truth.Truth.assertThat;
27 
28 import static org.mockito.Mockito.when;
29 
30 import android.content.ContentResolver;
31 import android.content.Context;
32 import android.content.res.Resources;
33 import android.platform.test.annotations.DisableFlags;
34 import android.platform.test.annotations.EnableFlags;
35 import android.platform.test.flag.junit.SetFlagsRule;
36 import android.provider.Flags;
37 import android.provider.Settings;
38 
39 import androidx.preference.ListPreference;
40 import androidx.test.core.app.ApplicationProvider;
41 
42 import org.junit.Before;
43 import org.junit.Rule;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
46 import org.mockito.Spy;
47 import org.mockito.junit.MockitoJUnit;
48 import org.mockito.junit.MockitoRule;
49 import org.robolectric.RobolectricTestRunner;
50 
51 /** Tests for {@link AccessibilityButtonGesturePreferenceController}. */
52 @RunWith(RobolectricTestRunner.class)
53 public class AccessibilityButtonGesturePreferenceControllerTest {
54 
55     @Rule
56     public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
57     @Rule
58     public final MockitoRule mockito = MockitoJUnit.rule();
59 
60     @Spy
61     private final Context mContext = ApplicationProvider.getApplicationContext();
62     @Spy
63     private final Resources mResources = mContext.getResources();
64     private final ContentResolver mContentResolver = mContext.getContentResolver();
65     private final ListPreference mListPreference = new ListPreference(mContext);
66     private AccessibilityButtonGesturePreferenceController mController;
67 
68     @Before
setUp()69     public void setUp() {
70         mController = new AccessibilityButtonGesturePreferenceController(mContext,
71                 "test_key");
72         when(mContext.getResources()).thenReturn(mResources);
73     }
74 
75     @Test
76     @DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
getAvailabilityStatus_navigationGestureEnabled_returnAvailable()77     public void getAvailabilityStatus_navigationGestureEnabled_returnAvailable() {
78         Settings.Secure.putIntForUser(mContext.getContentResolver(),
79                 Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
80 
81         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
82     }
83 
84     @Test
85     @EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
getAvailabilityStatus_navigationGestureEnabled_returnConditionallyUnavailable()86     public void getAvailabilityStatus_navigationGestureEnabled_returnConditionallyUnavailable() {
87         Settings.Secure.putIntForUser(mContext.getContentResolver(),
88                 Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
89 
90         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
91     }
92 
93     @Test
getAvailabilityStatus_navigationGestureDisabled_returnConditionallyUnavailable()94     public void getAvailabilityStatus_navigationGestureDisabled_returnConditionallyUnavailable() {
95         Settings.Secure.putIntForUser(mContext.getContentResolver(),
96                 Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
97 
98         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
99     }
100 
101     @Test
updateState_a11yBtnModeGesture_navigationBarValue()102     public void updateState_a11yBtnModeGesture_navigationBarValue() {
103         Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
104                 ACCESSIBILITY_BUTTON_MODE_GESTURE);
105 
106         mController.updateState(mListPreference);
107 
108         final String gestureValue = String.valueOf(ACCESSIBILITY_BUTTON_MODE_GESTURE);
109         assertThat(mListPreference.getValue()).isEqualTo(gestureValue);
110     }
111 }
112