• 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 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