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

Commit a0175abd authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Defer resuming when creating home stack for starting home

This avoids starting home activity recursively.
Also resume home if the display is empty.

Bug: 144281234
Bug: 144345635
Test: Force-stop home while only home activity exists
Test: atest MultiDisplaySystemDecorationTests#testLaunchSecondaryHomeActivityOnDisplayWithDecorations
Change-Id: I907c3153bddada178fce5d785c3ed7f5624c515c
parent 6f7e2d56
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -182,9 +182,17 @@ public class ActivityStartController {

        final ActivityDisplay display =
                mService.mRootActivityContainer.getActivityDisplay(displayId);
        // The home activity will be started later, defer resuming to avoid unneccerary operations
        // (e.g. start home recursively) when creating home stack.
        mSupervisor.beginDeferResume();
        final ActivityStack homeStack;
        try {
            // Make sure home stack exist on display.
        final ActivityStack homeStack =
                display.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
            homeStack = display.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME,
                    ON_TOP);
        } finally {
            mSupervisor.endDeferResume();
        }

        mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason)
                .setOutActivity(tmpOutRecord)
+3 −0
Original line number Diff line number Diff line
@@ -1156,6 +1156,9 @@ class RootActivityContainer extends ConfigurationContainer
                final ActivityStack focusedStack = display.getFocusedStack();
                if (focusedStack != null) {
                    result |= focusedStack.resumeTopActivityUncheckedLocked(target, targetOptions);
                } else if (targetStack == null && !display.hasChild()) {
                    result |= resumeHomeActivity(null /* prev */, "empty-display",
                            display.mDisplayId);
                }
            }
        }