Loading packages/SystemUI/multivalentTests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt +106 −31 Original line number Diff line number Diff line Loading @@ -17,12 +17,13 @@ package com.android.keyguard.mediator import android.os.Looper import android.platform.test.flag.junit.SetFlagsRule import android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.policy.IKeyguardService.SCREEN_TURNING_ON_REASON_UNKNOWN import com.android.systemui.Flags import com.android.window.flags.Flags as WindowFlags import com.android.systemui.SysuiTestCase import com.android.systemui.shade.display.PendingDisplayChangeController import com.android.systemui.unfold.FoldAodAnimationController Loading @@ -32,12 +33,12 @@ import com.android.systemui.util.mockito.capture import com.android.systemui.utils.os.FakeHandler import com.android.systemui.utils.os.FakeHandler.Mode.QUEUEING import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.anyInt import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.Mockito.`when` Loading @@ -50,16 +51,22 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { @Mock private lateinit var runnable: Runnable @Mock private lateinit var unfoldComponent: SysUIUnfoldComponent @Mock private lateinit var foldAodAnimationController: FoldAodAnimationController @Mock private lateinit var fullscreenLightRevealAnimation: FullscreenLightRevealAnimation @Mock private lateinit var fullScreenLightRevealAnimations: Set<FullscreenLightRevealAnimation> @Mock private lateinit var pendingDisplayChangeController: PendingDisplayChangeController @Captor private lateinit var readyCaptor: ArgumentCaptor<Runnable> Loading @@ -67,9 +74,6 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { private lateinit var screenOnCoordinator: ScreenOnCoordinator @get:Rule val setFlagsRule = SetFlagsRule(DEVICE_DEFAULT) @Before fun setUp() { MockitoAnnotations.initMocks(this) Loading @@ -79,25 +83,64 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { `when`(unfoldComponent.getFoldAodAnimationController()) .thenReturn(foldAodAnimationController) screenOnCoordinator = ScreenOnCoordinator( Optional.of(unfoldComponent), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.of(unfoldComponent)) } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testUnfoldTransitionEnabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testPendingDisplayChangeNotReady_onScreenTurningOn_doesNotCallDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() waitHandlerIdle() // We didn't call onPendingDisplayChangeReady(), so the ready runnable should not be called // as not all tasks are ready verify(runnable, never()).run() } @DisableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @EnableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testEnsureWallpaperDrawnFlagDisabled_pendingDisplayChangeNotReady_onScreenTurningOn_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() // we don't call onPendingDisplayChangeReady() but as the flag is disabled, the // ready runnable should be called anyway waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testTasksReady_onScreenTurningOnAndTurnedOnEventsCalledTogether_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) Loading @@ -105,12 +148,17 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testTasksReady_onScreenTurnedOnAndTurnedOffBeforeCompletion_doesNotCallDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) Loading @@ -119,6 +167,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() Loading @@ -126,46 +175,60 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { verify(runnable, never()).run() } @EnableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @DisableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() { setFlagsRule.disableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when only keyguard drawn verify(runnable).run() } @EnableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @DisableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_usesMainHandler() { setFlagsRule.disableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // Never called as the main handler didn't schedule it yet. verify(runnable, never()).run() } @EnableFlags( Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK, WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH ) @Test fun unfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_bgCallback_callsDrawnCallback() { setFlagsRule.enableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // No need to wait for the handler to be idle, as it shouldn't be used // waitHandlerIdle() // Should be called when only keyguard drawn verify(runnable).run() } @EnableFlags( Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK, WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH ) @Test fun unfoldTransitionDisabledDrawnTasksNotReady_onScreenTurningOn_bgCallback_doesNotCallDrawnCallback() { // Recreate with empty unfoldComponent screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // No need to wait for the handler to be idle, as it shouldn't be used // waitHandlerIdle() Loading @@ -173,6 +236,13 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { verify(runnable).run() } private fun createScreenOnCoordinator(unfoldComponent: Optional<SysUIUnfoldComponent>): ScreenOnCoordinator = ScreenOnCoordinator( unfoldComponent, testHandler, pendingDisplayChangeController, ) private fun onUnfoldOverlayReady() { verify(fullscreenLightRevealAnimation).onScreenTurningOn(capture(readyCaptor)) readyCaptor.value.run() Loading @@ -183,6 +253,11 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { readyCaptor.value.run() } private fun onPendingDisplayChangeReady() { verify(pendingDisplayChangeController).onScreenTurningOn(anyInt(), capture(readyCaptor)) readyCaptor.value.run() } private fun waitHandlerIdle() { testHandler.dispatchQueuedMessages() } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt +106 −31 Original line number Diff line number Diff line Loading @@ -17,12 +17,13 @@ package com.android.keyguard.mediator import android.os.Looper import android.platform.test.flag.junit.SetFlagsRule import android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.policy.IKeyguardService.SCREEN_TURNING_ON_REASON_UNKNOWN import com.android.systemui.Flags import com.android.window.flags.Flags as WindowFlags import com.android.systemui.SysuiTestCase import com.android.systemui.shade.display.PendingDisplayChangeController import com.android.systemui.unfold.FoldAodAnimationController Loading @@ -32,12 +33,12 @@ import com.android.systemui.util.mockito.capture import com.android.systemui.utils.os.FakeHandler import com.android.systemui.utils.os.FakeHandler.Mode.QUEUEING import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.anyInt import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.Mockito.`when` Loading @@ -50,16 +51,22 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { @Mock private lateinit var runnable: Runnable @Mock private lateinit var unfoldComponent: SysUIUnfoldComponent @Mock private lateinit var foldAodAnimationController: FoldAodAnimationController @Mock private lateinit var fullscreenLightRevealAnimation: FullscreenLightRevealAnimation @Mock private lateinit var fullScreenLightRevealAnimations: Set<FullscreenLightRevealAnimation> @Mock private lateinit var pendingDisplayChangeController: PendingDisplayChangeController @Captor private lateinit var readyCaptor: ArgumentCaptor<Runnable> Loading @@ -67,9 +74,6 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { private lateinit var screenOnCoordinator: ScreenOnCoordinator @get:Rule val setFlagsRule = SetFlagsRule(DEVICE_DEFAULT) @Before fun setUp() { MockitoAnnotations.initMocks(this) Loading @@ -79,25 +83,64 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { `when`(unfoldComponent.getFoldAodAnimationController()) .thenReturn(foldAodAnimationController) screenOnCoordinator = ScreenOnCoordinator( Optional.of(unfoldComponent), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.of(unfoldComponent)) } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testUnfoldTransitionEnabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testPendingDisplayChangeNotReady_onScreenTurningOn_doesNotCallDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() waitHandlerIdle() // We didn't call onPendingDisplayChangeReady(), so the ready runnable should not be called // as not all tasks are ready verify(runnable, never()).run() } @DisableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @EnableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testEnsureWallpaperDrawnFlagDisabled_pendingDisplayChangeNotReady_onScreenTurningOn_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onUnfoldOverlayReady() onFoldAodReady() // we don't call onPendingDisplayChangeReady() but as the flag is disabled, the // ready runnable should be called anyway waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testTasksReady_onScreenTurningOnAndTurnedOnEventsCalledTogether_callsDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) Loading @@ -105,12 +148,17 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when both unfold overlay and keyguard drawn ready verify(runnable).run() } @EnableFlags( WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH, Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK ) @Test fun testTasksReady_onScreenTurnedOnAndTurnedOffBeforeCompletion_doesNotCallDrawnCallback() { screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) Loading @@ -119,6 +167,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { onUnfoldOverlayReady() onFoldAodReady() onPendingDisplayChangeReady() waitHandlerIdle() Loading @@ -126,46 +175,60 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { verify(runnable, never()).run() } @EnableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @DisableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() { setFlagsRule.disableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() waitHandlerIdle() // Should be called when only keyguard drawn verify(runnable).run() } @EnableFlags(WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH) @DisableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) @Test fun testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_usesMainHandler() { setFlagsRule.disableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, ) screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // Never called as the main handler didn't schedule it yet. verify(runnable, never()).run() } @EnableFlags( Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK, WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH ) @Test fun unfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_bgCallback_callsDrawnCallback() { setFlagsRule.enableFlags(Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK) // Recreate with empty unfoldComponent screenOnCoordinator = ScreenOnCoordinator( Optional.empty(), testHandler, pendingDisplayChangeController, screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // No need to wait for the handler to be idle, as it shouldn't be used // waitHandlerIdle() // Should be called when only keyguard drawn verify(runnable).run() } @EnableFlags( Flags.FLAG_ENABLE_BACKGROUND_KEYGUARD_ONDRAWN_CALLBACK, WindowFlags.FLAG_ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH ) @Test fun unfoldTransitionDisabledDrawnTasksNotReady_onScreenTurningOn_bgCallback_doesNotCallDrawnCallback() { // Recreate with empty unfoldComponent screenOnCoordinator = createScreenOnCoordinator(unfoldComponent = Optional.empty()) screenOnCoordinator.onScreenTurningOn(reason = SCREEN_TURNING_ON_REASON_UNKNOWN, runnable) onPendingDisplayChangeReady() // No need to wait for the handler to be idle, as it shouldn't be used // waitHandlerIdle() Loading @@ -173,6 +236,13 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { verify(runnable).run() } private fun createScreenOnCoordinator(unfoldComponent: Optional<SysUIUnfoldComponent>): ScreenOnCoordinator = ScreenOnCoordinator( unfoldComponent, testHandler, pendingDisplayChangeController, ) private fun onUnfoldOverlayReady() { verify(fullscreenLightRevealAnimation).onScreenTurningOn(capture(readyCaptor)) readyCaptor.value.run() Loading @@ -183,6 +253,11 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { readyCaptor.value.run() } private fun onPendingDisplayChangeReady() { verify(pendingDisplayChangeController).onScreenTurningOn(anyInt(), capture(readyCaptor)) readyCaptor.value.run() } private fun waitHandlerIdle() { testHandler.dispatchQueuedMessages() } Loading