• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.gestures;
18 
19 import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
20 
21 import static com.android.settings.gestures.DoubleTapPowerToOpenCameraPreferenceController.OFF;
22 import static com.android.settings.gestures.DoubleTapPowerToOpenCameraPreferenceController.ON;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.spy;
28 import static org.mockito.Mockito.when;
29 
30 import android.content.Context;
31 import android.content.res.Resources;
32 import android.platform.test.flag.junit.SetFlagsRule;
33 import android.provider.Settings;
34 
35 import androidx.test.ext.junit.runners.AndroidJUnit4;
36 
37 import com.android.internal.R;
38 import com.android.settings.core.BasePreferenceController;
39 import com.android.settings.testutils.shadow.SettingsShadowResources;
40 
41 import org.junit.After;
42 import org.junit.Before;
43 import org.junit.Rule;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
46 import org.robolectric.RuntimeEnvironment;
47 import org.robolectric.annotation.Config;
48 
49 @RunWith(AndroidJUnit4.class)
50 @Config(shadows = SettingsShadowResources.class)
51 public class DoubleTapPowerToOpenCameraPreferenceControllerTest {
52     @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
53     private Context mContext;
54     private Resources mResources;
55     private DoubleTapPowerToOpenCameraPreferenceController mController;
56     private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
57 
58     @Before
setUp()59     public void setUp() {
60         mContext = spy(RuntimeEnvironment.getApplication());
61         mResources = mock(Resources.class);
62         when(mContext.getResources()).thenReturn(mResources);
63         mController =
64                 new DoubleTapPowerToOpenCameraPreferenceController(mContext, KEY_DOUBLE_TAP_POWER);
65     }
66 
67     @After
tearDown()68     public void tearDown() {
69         SettingsShadowResources.reset();
70     }
71 
72     @Test
getAvailabilityStatus_setDoubleTapPowerGestureDisabled_preferenceUnsupported()73     public void getAvailabilityStatus_setDoubleTapPowerGestureDisabled_preferenceUnsupported() {
74         when(mResources.getBoolean(R.bool.config_cameraDoubleTapPowerGestureEnabled))
75                 .thenReturn(false);
76 
77         assertThat(mController.getAvailabilityStatus())
78                 .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
79     }
80 
81     @Test
getAvailabilityStatus_setDoubleTapPowerGestureEnabled_preferenceSupported()82     public void getAvailabilityStatus_setDoubleTapPowerGestureEnabled_preferenceSupported() {
83         when(mResources.getBoolean(R.bool.config_cameraDoubleTapPowerGestureEnabled))
84                 .thenReturn(true);
85 
86         assertThat(mController.getAvailabilityStatus())
87                 .isEqualTo(BasePreferenceController.AVAILABLE);
88     }
89 
90     @Test
isChecked_configIsNotSet_returnsTrue()91     public void isChecked_configIsNotSet_returnsTrue() {
92         // Set the setting to be enabled.
93         Settings.Secure.putInt(
94                 mContext.getContentResolver(), CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON);
95 
96         assertThat(mController.isChecked()).isTrue();
97     }
98 
99     @Test
isChecked_setConfigFalse_returnsFalse()100     public void isChecked_setConfigFalse_returnsFalse() {
101         // Set the setting to be disabled.
102         Settings.Secure.putInt(
103                 mContext.getContentResolver(), CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, OFF);
104 
105         assertThat(mController.isChecked()).isFalse();
106     }
107 
108     @Test
isChecked_setConfigTrue_returnsFalse()109     public void isChecked_setConfigTrue_returnsFalse() {
110         // Set the setting to be disabled.
111         Settings.Secure.putInt(
112                 mContext.getContentResolver(), CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON);
113 
114         assertThat(mController.isChecked()).isTrue();
115     }
116 
117     @Test
setChecked_checkToggle_cameraDoubleTapPowerGestureEnabled()118     public void setChecked_checkToggle_cameraDoubleTapPowerGestureEnabled() {
119         mController.setChecked(true);
120 
121         assertThat(
122                         Settings.Secure.getInt(
123                                 mContext.getContentResolver(),
124                                 CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
125                                 OFF))
126                 .isEqualTo(ON);
127     }
128 
129     @Test
setChecked_uncheckToggle_cameraDoubleTapPowerGestureDisabled()130     public void setChecked_uncheckToggle_cameraDoubleTapPowerGestureDisabled() {
131         mController.setChecked(false);
132 
133         assertThat(
134                         Settings.Secure.getInt(
135                                 mContext.getContentResolver(),
136                                 CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
137                                 ON))
138                 .isEqualTo(OFF);
139     }
140 
141     @Test
isSliceableCorrectKey_returnsTrue()142     public void isSliceableCorrectKey_returnsTrue() {
143         final DoubleTapPowerToOpenCameraPreferenceController controller =
144                 new DoubleTapPowerToOpenCameraPreferenceController(
145                         mContext, "gesture_double_tap_power");
146 
147         assertThat(controller.isSliceable()).isTrue();
148     }
149 
150     @Test
isSliceableIncorrectKey_returnsFalse()151     public void isSliceableIncorrectKey_returnsFalse() {
152         final DoubleTapPowerToOpenCameraPreferenceController controller =
153                 new DoubleTapPowerToOpenCameraPreferenceController(mContext, "bad_key");
154 
155         assertThat(controller.isSliceable()).isFalse();
156     }
157 
158     @Test
isPublicSlice_returnTrue()159     public void isPublicSlice_returnTrue() {
160         assertThat(mController.isPublicSlice()).isTrue();
161     }
162 }
163