Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a450e642 authored by Nick Chameyev's avatar Nick Chameyev Committed by Android (Google) Code Review
Browse files

Merge "Fix failing ScreenOnCoordinatorTest test" into main

parents 0eef0351 dfa1adb4
Loading
Loading
Loading
Loading
+106 −31
Original line number Diff line number Diff line
@@ -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
@@ -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`
@@ -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>

@@ -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)
@@ -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)
@@ -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)
@@ -119,6 +167,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {

        onUnfoldOverlayReady()
        onFoldAodReady()
        onPendingDisplayChangeReady()
        waitHandlerIdle()


@@ -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()

@@ -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()
@@ -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()
    }