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 package com.android.settings.display; 17 18 import android.content.Context 19 import android.content.res.Resources 20 import android.hardware.devicestate.DeviceStateManager 21 import android.platform.test.annotations.DisableFlags 22 import android.platform.test.annotations.EnableFlags 23 import android.platform.test.flag.junit.SetFlagsRule 24 import androidx.test.core.app.ApplicationProvider 25 import androidx.test.ext.junit.runners.AndroidJUnit4 26 import androidx.test.filters.SmallTest 27 import com.android.internal.R 28 import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManagerImpl 29 import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager 30 import com.android.window.flags.Flags 31 import com.google.common.truth.Truth.assertThat 32 import org.junit.After 33 import org.junit.Before 34 import org.junit.Assert.assertNotSame 35 import org.junit.Assert.assertSame 36 import org.junit.Rule 37 import org.junit.Test 38 import org.junit.runner.RunWith 39 import org.mockito.Mock 40 import org.mockito.junit.MockitoJUnit 41 import org.mockito.Mockito.`when` as whenever 42 43 @SmallTest 44 @RunWith(AndroidJUnit4::class) 45 class DeviceStateAutoRotateSettingManagerProviderTest { 46 47 @get:Rule 48 val setFlagsRule: SetFlagsRule = SetFlagsRule() 49 @get:Rule 50 val rule = MockitoJUnit.rule() 51 52 @Mock 53 private lateinit var mockContext: Context 54 @Mock 55 private lateinit var mockDeviceStateManager: DeviceStateManager 56 @Mock 57 private lateinit var mockResources: Resources 58 59 private val context: Context = ApplicationProvider.getApplicationContext() 60 61 @Before setupnull62 fun setup() { 63 whenever(mockContext.contentResolver).thenReturn(context.contentResolver) 64 whenever(mockContext.getSystemService(DeviceStateManager::class.java)).thenReturn( 65 mockDeviceStateManager 66 ) 67 whenever(mockContext.resources).thenReturn(mockResources) 68 whenever(mockResources.getStringArray(R.array.config_perDeviceStateRotationLockDefaults)) 69 .thenReturn(arrayOf()) 70 } 71 72 @After tearDownnull73 fun tearDown() { 74 DeviceStateAutoRotateSettingManagerProvider.resetInstance() 75 } 76 77 @Test 78 @EnableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR) getSingletonInstance_refactorFlagEnabled_returnsRefactoredManagernull79 fun getSingletonInstance_refactorFlagEnabled_returnsRefactoredManager() { 80 val manager = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 81 82 assertThat(manager).isInstanceOf(DeviceStateAutoRotateSettingManagerImpl::class.java) 83 } 84 85 @Test 86 @DisableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR) getSingletonInstance_refactorFlagDisabled_returnsLegacyManagernull87 fun getSingletonInstance_refactorFlagDisabled_returnsLegacyManager() { 88 val manager = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 89 90 assertThat(manager).isInstanceOf(DeviceStateRotationLockSettingsManager::class.java) 91 } 92 93 @Test 94 @EnableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR) getSingletonInstance_resetInstance_returnsNewInstancenull95 fun getSingletonInstance_resetInstance_returnsNewInstance() { 96 val manager1 = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 97 DeviceStateAutoRotateSettingManagerProvider.resetInstance() 98 val manager2 = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 99 100 assertNotSame(manager1, manager2) 101 } 102 103 @Test 104 @EnableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR) getSingletonInstance_getInstanceTwice_returnsSameInstancenull105 fun getSingletonInstance_getInstanceTwice_returnsSameInstance() { 106 val manager1 = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 107 val manager2 = DeviceStateAutoRotateSettingManagerProvider.getSingletonInstance(mockContext) 108 109 assertSame(manager1, manager2) 110 } 111 } 112