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

Commit 7d4624d4 authored by Robin Lee's avatar Robin Lee
Browse files

Remove nested ensureActivitiesVisible from keyguardGoingAway

By consolidating all of the calls to keyguardGoingAway for each display
into one inner loop.

Although this makes it harder to have individual going-away states for
each display via keyguardGoingAway calls, this is in line with our plan
to eliminate the going-away state and have transitions generated via
setKeyguardShowing(locked, aod).

Bug: 423613749
Test: atest KeyguardLockedTests
Test: atest DisplayContentTests
Flag: EXEMPT bugfix
Change-Id: I147c039411d92eb72d388da6100c6fe4aea1dd31
parent 6fa85799
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -3758,10 +3758,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                }

                final boolean wasNoResumed = mTopApp == null || !mTopApp.hasResumedActivity();
                for (int i = mRootWindowContainer.getChildCount() - 1; i >= 0; i--) {
                    final DisplayContent dc = mRootWindowContainer.getChildAt(i);
                    mKeyguardController.keyguardGoingAway(dc.mDisplayId, flags);
                }

                mKeyguardController.keyguardGoingAway(flags);

                final boolean foundResumed = wasNoResumed
                        && mTopApp != null && mTopApp.hasResumedActivity();
                if (isPowerModePreApplied && !foundResumed) {
+20 −9
Original line number Diff line number Diff line
@@ -298,21 +298,34 @@ class KeyguardController {
     * @param flags See {@link WindowManagerPolicy#KEYGUARD_GOING_AWAY_FLAG_TO_SHADE}
     *              etc.
     */
    void keyguardGoingAway(int displayId, int flags) {
        final KeyguardDisplayState state = getDisplayState(displayId);
        if (!state.mKeyguardShowing || state.mKeyguardGoingAway) {
    void keyguardGoingAway(int flags) {
        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "keyguardGoingAway");

        boolean goingAwayChanged = false;
        for (int i = mRootWindowContainer.getChildCount() - 1; i >= 0; i--) {
            final DisplayContent dc = mRootWindowContainer.getChildAt(i);
            if (!dc.isRemoving() && !dc.isRemoved()) {
                final var state = getDisplayState(dc.mDisplayId);
                if (state.mKeyguardShowing && !state.mKeyguardGoingAway) {
                    goingAwayChanged = true;
                    state.mKeyguardGoingAway = true;
                    state.writeEventLog("keyguardGoingAway");
                    scheduleGoingAwayTimeout(dc.mDisplayId);
                }
            }
        }
        if (!goingAwayChanged) {
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
            return;
        }
        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "keyguardGoingAway");

        mService.deferWindowLayout();
        state.mKeyguardGoingAway = true;
        final ActionChain chain = mService.mChainTracker.startTransit("kgGoAway");
        try {
            state.writeEventLog("keyguardGoingAway");
            final int transitFlags = convertTransitFlags(flags);
            if (ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) {
                final Transition transition = chain.getTransition();
                if (transition != null && displayId == DEFAULT_DISPLAY) {
                if (transition != null) {
                    transition.addFlag(TRANSIT_FLAG_KEYGUARD_GOING_AWAY);
                }
            } else {
@@ -330,8 +343,6 @@ class KeyguardController {
            mRootWindowContainer.ensureActivitiesVisible();
            mRootWindowContainer.addStartingWindowsForVisibleActivities();
            mWindowManager.executeAppTransition();

            scheduleGoingAwayTimeout(displayId);
        } finally {
            mService.continueWindowLayout();
            mService.mChainTracker.endPartial();
+3 −3
Original line number Diff line number Diff line
@@ -912,7 +912,7 @@ public class DisplayContentTests extends WindowTestsBase {
        assertEquals("Visible keyguard must influence device orientation",
                SCREEN_ORIENTATION_PORTRAIT, mDisplayContent.getOrientation());

        mAtm.mKeyguardController.keyguardGoingAway(appWin.getDisplayId(), 0 /* flags */);
        mAtm.mKeyguardController.keyguardGoingAway(0 /* flags */);
        assertEquals("Keyguard that is going away must not influence device orientation",
                SCREEN_ORIENTATION_LANDSCAPE, mDisplayContent.getOrientation());
    }
@@ -2557,7 +2557,7 @@ public class DisplayContentTests extends WindowTestsBase {
        transitions.flush();

        // Start unlocking from AOD.
        keyguard.keyguardGoingAway(displayId, 0x0 /* flags */);
        keyguard.keyguardGoingAway(0x0 /* flags */);
        assertTrue(keyguardGoingAway.getAsBoolean());
        assertTrue(appVisible.getAsBoolean());

@@ -2620,7 +2620,7 @@ public class DisplayContentTests extends WindowTestsBase {
        transitions.flush();

        // Start unlocking from AOD.
        keyguard.keyguardGoingAway(displayId, 0x0 /* flags */);
        keyguard.keyguardGoingAway(0x0 /* flags */);
        assertTrue(keyguardGoingAway.getAsBoolean());
        assertTrue(appVisible.getAsBoolean());