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

Commit 64daa1f4 authored by Andreas Miko's avatar Andreas Miko
Browse files

Fix setSurfaceBehindVisibility(false) being ignored

The check is supposed to ignore visible=true calls when
isKeyguardGoingAway was already triggered by a prior visible=true call.
The false case was incorrectly ignored.

Bug: None
Flag: EXEMPT bug fix
Test: Manual transition check
Change-Id: I7c0e3bbc1e080e61aa07176845fc2704c6497f4e
parent 2ed42dc6
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -29,11 +29,13 @@ import com.android.wm.shell.keyguard.KeyguardTransitions
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -112,4 +114,20 @@ class WindowManagerLockscreenVisibilityManagerTest : SysuiTestCase() {
        verify(activityTaskManagerService).setLockScreenShown(true, false)
        verifyNoMoreInteractions(activityTaskManagerService)
    }

    @Test
    fun setSurfaceBehindVisibility_goesAwayFirst_andIgnoresSecondCall() {
        underTest.setLockscreenShown(true)
        underTest.setSurfaceBehindVisibility(true)
        verify(activityTaskManagerService).keyguardGoingAway(0)

        underTest.setSurfaceBehindVisibility(true)
        verifyNoMoreInteractions(keyguardTransitions)
    }

    @Test
    fun setSurfaceBehindVisibility_falseSetsLockscreenVisibility() {
        underTest.setSurfaceBehindVisibility(false)
        verify(activityTaskManagerService).setLockScreenShown(eq(true), any())
    }
}
+19 −20
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ constructor(
    private val keyguardStateController: KeyguardStateController,
    private val keyguardSurfaceBehindAnimator: KeyguardSurfaceBehindParamsApplier,
    private val keyguardDismissTransitionInteractor: KeyguardDismissTransitionInteractor,
    private val keyguardTransitions: KeyguardTransitions
    private val keyguardTransitions: KeyguardTransitions,
) {

    /**
@@ -108,27 +108,28 @@ constructor(
     * Manager to effect the change.
     */
    fun setSurfaceBehindVisibility(visible: Boolean) {
        if (isKeyguardGoingAway == visible) {
            Log.d(TAG, "WmLockscreenVisibilityManager#setVisibility -> already visible=$visible")
        if (isKeyguardGoingAway && visible) {
            Log.d(TAG, "#setSurfaceBehindVisibility: already visible, ignoring")
            return
        }

        // The surface behind is always visible if the lockscreen is not showing, so we're already
        // visible.
        if (visible && isLockscreenShowing != true) {
            Log.d(TAG, "#setVisibility -> already visible since the lockscreen isn't showing")
            Log.d(TAG, "#setSurfaceBehindVisibility: ignoring since the lockscreen isn't showing")
            return
        }



        if (visible) {
            if (enableNewKeyguardShellTransitions) {
                keyguardTransitions.startKeyguardTransition(false /* keyguardShowing */, false /* aodShowing */)
                keyguardTransitions.startKeyguardTransition(
                    false /* keyguardShowing */,
                    false, /* aodShowing */
                )
                isKeyguardGoingAway = true
                return
            }
            // Make the surface visible behind the keyguard by calling keyguardGoingAway. The
            // Make the surface behind the keyguard visible by calling keyguardGoingAway. The
            // lockscreen is still showing as well, allowing us to animate unlocked.
            Log.d(TAG, "ActivityTaskManagerService#keyguardGoingAway()")
            activityTaskManagerService.keyguardGoingAway(0)
@@ -153,7 +154,7 @@ constructor(
        apps: Array<RemoteAnimationTarget>,
        wallpapers: Array<RemoteAnimationTarget>,
        nonApps: Array<RemoteAnimationTarget>,
        finishedCallback: IRemoteAnimationFinishedCallback
        finishedCallback: IRemoteAnimationFinishedCallback,
    ) {
        // Ensure that we've started a dismiss keyguard transition. WindowManager can start the
        // going away animation on its own, if an activity launches and then requests dismissing the
@@ -203,27 +204,25 @@ constructor(
     */
    private fun setWmLockscreenState(
        lockscreenShowing: Boolean? = this.isLockscreenShowing,
        aodVisible: Boolean = this.isAodVisible
        aodVisible: Boolean = this.isAodVisible,
    ) {
        Log.d(
            TAG,
            "#setWmLockscreenState(" +
                "isLockscreenShowing=$lockscreenShowing, " +
                "aodVisible=$aodVisible)."
        )

        if (lockscreenShowing == null) {
            Log.d(
                TAG,
                "isAodVisible=$aodVisible, but lockscreenShowing=null. Waiting for" +
                    "non-null lockscreenShowing before calling ATMS#setLockScreenShown, which" +
                    "will happen once KeyguardTransitionBootInteractor starts the boot transition."
                    "will happen once KeyguardTransitionBootInteractor starts the boot transition.",
            )
            this.isAodVisible = aodVisible
            return
        }

        if (this.isLockscreenShowing == lockscreenShowing && this.isAodVisible == aodVisible) {
            Log.d(
                TAG,
                "#setWmLockscreenState: lockscreenShowing=$lockscreenShowing and " +
                    "isAodVisible=$aodVisible were both unchanged, not forwarding to ATMS.",
            )
            return
        }

@@ -231,7 +230,7 @@ constructor(
            TAG,
            "ATMS#setLockScreenShown(" +
                "isLockscreenShowing=$lockscreenShowing, " +
                "aodVisible=$aodVisible)."
                "aodVisible=$aodVisible).",
        )
        if (enableNewKeyguardShellTransitions) {
            keyguardTransitions.startKeyguardTransition(lockscreenShowing, aodVisible)
@@ -247,7 +246,7 @@ constructor(
            Log.d(
                TAG,
                "#endKeyguardGoingAwayAnimation() called when isKeyguardGoingAway=false. " +
                    "Short-circuiting."
                    "Short-circuiting.",
            )
            return
        }