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