Loading packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +3 −6 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import android.animation.ValueAnimator import android.content.Context import android.content.res.Configuration import android.os.PowerManager import android.os.SystemClock import android.util.IndentingPrintWriter import android.util.MathUtils import android.view.MotionEvent Loading @@ -30,6 +29,7 @@ import com.android.systemui.plugins.ActivityStarter.OnDismissAction import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.notification.collection.NotificationEntry Loading Loading @@ -76,6 +76,7 @@ class LockscreenShadeTransitionController @Inject constructor( dumpManager: DumpManager, qsTransitionControllerFactory: LockscreenShadeQsTransitionController.Factory, private val shadeRepository: ShadeRepository, private val powerInteractor: PowerInteractor, ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting Loading Loading @@ -278,11 +279,7 @@ class LockscreenShadeTransitionController @Inject constructor( // Bind the click listener of the shelf to go to the full shade notificationShelfController.setOnClickListener { if (statusBarStateController.state == StatusBarState.KEYGUARD) { centralSurfaces.wakeUpIfDozing( SystemClock.uptimeMillis(), "SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE, ) powerInteractor.wakeUpIfDozing("SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE) goToLockedShade(it) } } Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt +3 −9 Original line number Diff line number Diff line Loading @@ -20,10 +20,9 @@ import android.os.PowerManager import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.NotificationShelf import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.time.SystemClock import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine Loading @@ -35,8 +34,7 @@ class NotificationShelfInteractor constructor( private val keyguardRepository: KeyguardRepository, private val deviceEntryFaceAuthRepository: DeviceEntryFaceAuthRepository, private val centralSurfaces: CentralSurfaces, private val systemClock: SystemClock, private val powerInteractor: PowerInteractor, private val keyguardTransitionController: LockscreenShadeTransitionController, ) { /** Is the shelf showing on the keyguard? */ Loading @@ -55,11 +53,7 @@ constructor( /** Transition keyguard to the locked shade, triggered by the shelf. */ fun goToLockedShadeFromShelf() { centralSurfaces.wakeUpIfDozing( systemClock.uptimeMillis(), "SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE, ) powerInteractor.wakeUpIfDozing("SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE) keyguardTransitionController.goToLockedShade(null) } } packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt +11 −0 Original line number Diff line number Diff line Loading @@ -8,12 +8,15 @@ import com.android.systemui.ExpandHelper import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.media.controls.ui.MediaHierarchyManager import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -26,6 +29,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.LSShadeTransitionLogger import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.util.mockito.mock import org.junit.After import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull Loading Loading @@ -83,6 +87,12 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { @Mock lateinit var qsTransitionController: LockscreenShadeQsTransitionController @Mock lateinit var activityStarter: ActivityStarter @Mock lateinit var transitionControllerCallback: LockscreenShadeTransitionController.Callback private val powerInteractor = PowerInteractor( FakePowerRepository(), FalsingCollectorFake(), screenOffAnimationController = mock(), statusBarStateController = mock(), ) @JvmField @Rule val mockito = MockitoJUnit.rule() private val configurationController = FakeConfigurationController() Loading Loading @@ -129,6 +139,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { qsTransitionControllerFactory = { qsTransitionController }, activityStarter = activityStarter, shadeRepository = FakeShadeRepository(), powerInteractor = powerInteractor, ) transitionController.addCallback(transitionControllerCallback) whenever(nsslController.view).thenReturn(stackscroller) Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt +26 −10 Original line number Diff line number Diff line Loading @@ -22,21 +22,23 @@ import android.os.PowerManager import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.mockito.any import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyLong import org.mockito.Mockito.isNull import org.mockito.Mockito.verify Loading @@ -46,15 +48,27 @@ class NotificationShelfInteractorTest : SysuiTestCase() { private val keyguardRepository = FakeKeyguardRepository() private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository() private val centralSurfaces: CentralSurfaces = mock() private val systemClock = FakeSystemClock() private val screenOffAnimationController = mock<ScreenOffAnimationController>().also { whenever(it.allowWakeUpIfDozing()).thenReturn(true) } private val statusBarStateController: StatusBarStateController = mock() private val powerRepository = FakePowerRepository() private val powerInteractor = PowerInteractor( powerRepository, FalsingCollectorFake(), screenOffAnimationController, statusBarStateController, ) private val keyguardTransitionController: LockscreenShadeTransitionController = mock() private val underTest = NotificationShelfInteractor( keyguardRepository, deviceEntryFaceAuthRepository, centralSurfaces, systemClock, powerInteractor, keyguardTransitionController, ) Loading Loading @@ -107,10 +121,12 @@ class NotificationShelfInteractorTest : SysuiTestCase() { @Test fun goToLockedShadeFromShelf_wakesUpFromDoze() { whenever(statusBarStateController.isDozing).thenReturn(true) underTest.goToLockedShadeFromShelf() verify(centralSurfaces) .wakeUpIfDozing(anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE)) assertThat(powerRepository.lastWakeReason).isNotNull() assertThat(powerRepository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_GESTURE) } @Test Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt +28 −10 Original line number Diff line number Diff line Loading @@ -24,23 +24,26 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.mockito.any import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.mockito.eq import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.verify Loading @@ -54,14 +57,23 @@ class NotificationShelfViewModelTest : SysuiTestCase() { @Rule @JvmField val mockitoRule: MockitoRule = MockitoJUnit.rule() // mocks @Mock private lateinit var centralSurfaces: CentralSurfaces @Mock private lateinit var keyguardTransitionController: LockscreenShadeTransitionController @Mock private lateinit var screenOffAnimationController: ScreenOffAnimationController @Mock private lateinit var statusBarStateController: StatusBarStateController // fakes private val keyguardRepository = FakeKeyguardRepository() private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository() private val systemClock = FakeSystemClock() private val a11yRepo = FakeAccessibilityRepository() private val powerRepository = FakePowerRepository() private val powerInteractor by lazy { PowerInteractor( powerRepository, FalsingCollectorFake(), screenOffAnimationController, statusBarStateController, ) } // real impls private val a11yInteractor = AccessibilityInteractor(a11yRepo) Loading @@ -70,13 +82,17 @@ class NotificationShelfViewModelTest : SysuiTestCase() { NotificationShelfInteractor( keyguardRepository, deviceEntryFaceAuthRepository, centralSurfaces, systemClock, powerInteractor, keyguardTransitionController, ) } private val underTest by lazy { NotificationShelfViewModel(interactor, activatableViewModel) } @Before fun setUp() { whenever(screenOffAnimationController.allowWakeUpIfDozing()).thenReturn(true) } @Test fun canModifyColorOfNotifications_whenKeyguardNotShowing() = runTest { val canModifyNotifColor by collectLastValue(underTest.canModifyColorOfNotifications) Loading Loading @@ -126,10 +142,12 @@ class NotificationShelfViewModelTest : SysuiTestCase() { @Test fun onClicked_goesToLockedShade() { whenever(statusBarStateController.isDozing).thenReturn(true) underTest.onShelfClicked() verify(centralSurfaces) .wakeUpIfDozing(ArgumentMatchers.anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE)) assertThat(powerRepository.lastWakeReason).isNotNull() assertThat(powerRepository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_GESTURE) verify(keyguardTransitionController).goToLockedShade(Mockito.isNull(), eq(true)) } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +3 −6 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import android.animation.ValueAnimator import android.content.Context import android.content.res.Configuration import android.os.PowerManager import android.os.SystemClock import android.util.IndentingPrintWriter import android.util.MathUtils import android.view.MotionEvent Loading @@ -30,6 +29,7 @@ import com.android.systemui.plugins.ActivityStarter.OnDismissAction import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.notification.collection.NotificationEntry Loading Loading @@ -76,6 +76,7 @@ class LockscreenShadeTransitionController @Inject constructor( dumpManager: DumpManager, qsTransitionControllerFactory: LockscreenShadeQsTransitionController.Factory, private val shadeRepository: ShadeRepository, private val powerInteractor: PowerInteractor, ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting Loading Loading @@ -278,11 +279,7 @@ class LockscreenShadeTransitionController @Inject constructor( // Bind the click listener of the shelf to go to the full shade notificationShelfController.setOnClickListener { if (statusBarStateController.state == StatusBarState.KEYGUARD) { centralSurfaces.wakeUpIfDozing( SystemClock.uptimeMillis(), "SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE, ) powerInteractor.wakeUpIfDozing("SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE) goToLockedShade(it) } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt +3 −9 Original line number Diff line number Diff line Loading @@ -20,10 +20,9 @@ import android.os.PowerManager import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.NotificationShelf import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.time.SystemClock import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine Loading @@ -35,8 +34,7 @@ class NotificationShelfInteractor constructor( private val keyguardRepository: KeyguardRepository, private val deviceEntryFaceAuthRepository: DeviceEntryFaceAuthRepository, private val centralSurfaces: CentralSurfaces, private val systemClock: SystemClock, private val powerInteractor: PowerInteractor, private val keyguardTransitionController: LockscreenShadeTransitionController, ) { /** Is the shelf showing on the keyguard? */ Loading @@ -55,11 +53,7 @@ constructor( /** Transition keyguard to the locked shade, triggered by the shelf. */ fun goToLockedShadeFromShelf() { centralSurfaces.wakeUpIfDozing( systemClock.uptimeMillis(), "SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE, ) powerInteractor.wakeUpIfDozing("SHADE_CLICK", PowerManager.WAKE_REASON_GESTURE) keyguardTransitionController.goToLockedShade(null) } }
packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt +11 −0 Original line number Diff line number Diff line Loading @@ -8,12 +8,15 @@ import com.android.systemui.ExpandHelper import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.media.controls.ui.MediaHierarchyManager import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow Loading @@ -26,6 +29,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.LSShadeTransitionLogger import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.util.mockito.mock import org.junit.After import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull Loading Loading @@ -83,6 +87,12 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { @Mock lateinit var qsTransitionController: LockscreenShadeQsTransitionController @Mock lateinit var activityStarter: ActivityStarter @Mock lateinit var transitionControllerCallback: LockscreenShadeTransitionController.Callback private val powerInteractor = PowerInteractor( FakePowerRepository(), FalsingCollectorFake(), screenOffAnimationController = mock(), statusBarStateController = mock(), ) @JvmField @Rule val mockito = MockitoJUnit.rule() private val configurationController = FakeConfigurationController() Loading Loading @@ -129,6 +139,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { qsTransitionControllerFactory = { qsTransitionController }, activityStarter = activityStarter, shadeRepository = FakeShadeRepository(), powerInteractor = powerInteractor, ) transitionController.addCallback(transitionControllerCallback) whenever(nsslController.view).thenReturn(stackscroller) Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt +26 −10 Original line number Diff line number Diff line Loading @@ -22,21 +22,23 @@ import android.os.PowerManager import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.mockito.any import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyLong import org.mockito.Mockito.isNull import org.mockito.Mockito.verify Loading @@ -46,15 +48,27 @@ class NotificationShelfInteractorTest : SysuiTestCase() { private val keyguardRepository = FakeKeyguardRepository() private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository() private val centralSurfaces: CentralSurfaces = mock() private val systemClock = FakeSystemClock() private val screenOffAnimationController = mock<ScreenOffAnimationController>().also { whenever(it.allowWakeUpIfDozing()).thenReturn(true) } private val statusBarStateController: StatusBarStateController = mock() private val powerRepository = FakePowerRepository() private val powerInteractor = PowerInteractor( powerRepository, FalsingCollectorFake(), screenOffAnimationController, statusBarStateController, ) private val keyguardTransitionController: LockscreenShadeTransitionController = mock() private val underTest = NotificationShelfInteractor( keyguardRepository, deviceEntryFaceAuthRepository, centralSurfaces, systemClock, powerInteractor, keyguardTransitionController, ) Loading Loading @@ -107,10 +121,12 @@ class NotificationShelfInteractorTest : SysuiTestCase() { @Test fun goToLockedShadeFromShelf_wakesUpFromDoze() { whenever(statusBarStateController.isDozing).thenReturn(true) underTest.goToLockedShadeFromShelf() verify(centralSurfaces) .wakeUpIfDozing(anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE)) assertThat(powerRepository.lastWakeReason).isNotNull() assertThat(powerRepository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_GESTURE) } @Test Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt +28 −10 Original line number Diff line number Diff line Loading @@ -24,23 +24,26 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.util.mockito.any import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.mockito.eq import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.verify Loading @@ -54,14 +57,23 @@ class NotificationShelfViewModelTest : SysuiTestCase() { @Rule @JvmField val mockitoRule: MockitoRule = MockitoJUnit.rule() // mocks @Mock private lateinit var centralSurfaces: CentralSurfaces @Mock private lateinit var keyguardTransitionController: LockscreenShadeTransitionController @Mock private lateinit var screenOffAnimationController: ScreenOffAnimationController @Mock private lateinit var statusBarStateController: StatusBarStateController // fakes private val keyguardRepository = FakeKeyguardRepository() private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository() private val systemClock = FakeSystemClock() private val a11yRepo = FakeAccessibilityRepository() private val powerRepository = FakePowerRepository() private val powerInteractor by lazy { PowerInteractor( powerRepository, FalsingCollectorFake(), screenOffAnimationController, statusBarStateController, ) } // real impls private val a11yInteractor = AccessibilityInteractor(a11yRepo) Loading @@ -70,13 +82,17 @@ class NotificationShelfViewModelTest : SysuiTestCase() { NotificationShelfInteractor( keyguardRepository, deviceEntryFaceAuthRepository, centralSurfaces, systemClock, powerInteractor, keyguardTransitionController, ) } private val underTest by lazy { NotificationShelfViewModel(interactor, activatableViewModel) } @Before fun setUp() { whenever(screenOffAnimationController.allowWakeUpIfDozing()).thenReturn(true) } @Test fun canModifyColorOfNotifications_whenKeyguardNotShowing() = runTest { val canModifyNotifColor by collectLastValue(underTest.canModifyColorOfNotifications) Loading Loading @@ -126,10 +142,12 @@ class NotificationShelfViewModelTest : SysuiTestCase() { @Test fun onClicked_goesToLockedShade() { whenever(statusBarStateController.isDozing).thenReturn(true) underTest.onShelfClicked() verify(centralSurfaces) .wakeUpIfDozing(ArgumentMatchers.anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE)) assertThat(powerRepository.lastWakeReason).isNotNull() assertThat(powerRepository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_GESTURE) verify(keyguardTransitionController).goToLockedShade(Mockito.isNull(), eq(true)) } }