• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 
18 package com.android.systemui.keyguard.data.quickaffordance
19 
20 import android.content.Context
21 import android.media.AudioManager
22 import androidx.test.ext.junit.runners.AndroidJUnit4
23 import androidx.test.filters.SmallTest
24 import com.android.systemui.RoboPilotTest
25 import com.android.systemui.SysuiTestCase
26 import com.android.systemui.settings.UserFileManager
27 import com.android.systemui.settings.UserTracker
28 import com.android.systemui.util.RingerModeTracker
29 import com.android.systemui.util.mockito.any
30 import com.android.systemui.util.mockito.argumentCaptor
31 import com.android.systemui.util.mockito.whenever
32 import kotlinx.coroutines.ExperimentalCoroutinesApi
33 import kotlinx.coroutines.test.StandardTestDispatcher
34 import kotlinx.coroutines.test.TestDispatcher
35 import kotlinx.coroutines.test.TestScope
36 import kotlinx.coroutines.test.runCurrent
37 import kotlinx.coroutines.test.runTest
38 import org.junit.Assert.assertEquals
39 import org.junit.Before
40 import org.junit.Test
41 import org.junit.runner.RunWith
42 import org.mockito.Mock
43 import org.mockito.Mockito.times
44 import org.mockito.Mockito.verify
45 import org.mockito.MockitoAnnotations
46 
47 @OptIn(ExperimentalCoroutinesApi::class)
48 @SmallTest
49 @RoboPilotTest
50 @RunWith(AndroidJUnit4::class)
51 class MuteQuickAffordanceConfigTest : SysuiTestCase() {
52 
53     private lateinit var underTest: MuteQuickAffordanceConfig
54     @Mock
55     private lateinit var ringerModeTracker: RingerModeTracker
56     @Mock
57     private lateinit var audioManager: AudioManager
58     @Mock
59     private lateinit var userTracker: UserTracker
60     @Mock
61     private lateinit var userFileManager: UserFileManager
62 
63     private lateinit var testDispatcher: TestDispatcher
64     private lateinit var testScope: TestScope
65 
66     @Before
setUpnull67     fun setUp() {
68         MockitoAnnotations.initMocks(this)
69 
70         testDispatcher = StandardTestDispatcher()
71         testScope = TestScope(testDispatcher)
72 
73         whenever(userTracker.userContext).thenReturn(context)
74         whenever(userFileManager.getSharedPreferences(any(), any(), any()))
75                 .thenReturn(context.getSharedPreferences("mutequickaffordancetest", Context.MODE_PRIVATE))
76 
77         underTest = MuteQuickAffordanceConfig(
78                 context,
79                 userTracker,
80                 userFileManager,
81                 ringerModeTracker,
82                 audioManager,
83                 testScope.backgroundScope,
84                 testDispatcher,
85                 testDispatcher,
86         )
87     }
88 
89     @Test
<lambda>null90     fun pickerState_volumeFixed_notAvailable() = testScope.runTest {
91         //given
92         whenever(audioManager.isVolumeFixed).thenReturn(true)
93 
94         //when
95         val result = underTest.getPickerScreenState()
96 
97         //then
98         assertEquals(KeyguardQuickAffordanceConfig.PickerScreenState.UnavailableOnDevice, result)
99     }
100 
101     @Test
<lambda>null102     fun pickerState_volumeNotFixed_available() = testScope.runTest {
103         //given
104         whenever(audioManager.isVolumeFixed).thenReturn(false)
105 
106         //when
107         val result = underTest.getPickerScreenState()
108 
109         //then
110         assertEquals(KeyguardQuickAffordanceConfig.PickerScreenState.Default(), result)
111     }
112 
113     @Test
<lambda>null114     fun triggered_stateWasPreviouslyNORMAL_currentlySILENT_moveToPreviousState() = testScope.runTest {
115         //given
116         val ringerModeCapture = argumentCaptor<Int>()
117         whenever(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_NORMAL)
118         underTest.onTriggered(null)
119         whenever(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_SILENT)
120 
121         //when
122         val result = underTest.onTriggered(null)
123         runCurrent()
124         verify(audioManager, times(2)).ringerModeInternal = ringerModeCapture.capture()
125 
126         //then
127         assertEquals(KeyguardQuickAffordanceConfig.OnTriggeredResult.Handled, result)
128         assertEquals(AudioManager.RINGER_MODE_NORMAL, ringerModeCapture.value)
129     }
130 
131     @Test
<lambda>null132     fun triggered_stateIsNotSILENT_moveToSILENTringer() = testScope.runTest {
133         //given
134         val ringerModeCapture = argumentCaptor<Int>()
135         whenever(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_NORMAL)
136 
137         //when
138         val result = underTest.onTriggered(null)
139         runCurrent()
140         verify(audioManager).ringerModeInternal = ringerModeCapture.capture()
141 
142         //then
143         assertEquals(KeyguardQuickAffordanceConfig.OnTriggeredResult.Handled, result)
144         assertEquals(AudioManager.RINGER_MODE_SILENT, ringerModeCapture.value)
145     }
146 }