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

Commit dfa1adb4 authored by Nick Chameyev's avatar Nick Chameyev
Browse files

Fix failing ScreenOnCoordinatorTest test

This change ensures that ScreenOnCoordinatorTest test passes
with ENSURE_WALLPAPER_DRAWN_ON_DISPLAY_SWITCH flag enabled:
- Explicitly specifies flag values for each test
- Updates test logic to reflect the flag value

Flag: EXEMPT test changes only
Bug: 441576586
Test: atest ScreenOnCoordinatorTest
Change-Id: Ia1b1e2b73e3503beb7a28c9c65cba41a1babf1eb
parent ea686dc6
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()
    }