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

Commit 8b47e63e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Resume next activity if pausing app died" into rvc-qpr-dev am: 813999ad

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12343623

Change-Id: Ie4ef8043dd947cc9e56fb6b970867089927a7f85
parents 2cf9b73e 813999ad
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2723,13 +2723,15 @@ class ActivityStack extends Task {
    /**
     * Reset local parameters because an app's activity died.
     * @param app The app of the activity that died.
     * @return result from removeHistoryRecordsForAppLocked.
     * @return {@code true} if the process has any visible activity.
     */
    boolean handleAppDied(WindowProcessController app) {
        boolean isPausingDied = false;
        if (mPausingActivity != null && mPausingActivity.app == app) {
            if (DEBUG_PAUSE || DEBUG_CLEANUP) Slog.v(TAG_PAUSE,
                    "App died while pausing: " + mPausingActivity);
            mPausingActivity = null;
            isPausingDied = true;
        }
        if (mLastPausedActivity != null && mLastPausedActivity.app == app) {
            mLastPausedActivity = null;
@@ -2737,7 +2739,8 @@ class ActivityStack extends Task {
        }

        mStackSupervisor.removeHistoryRecords(app);
        return mRemoveHistoryRecordsForApp.process(app);
        final boolean hadVisibleActivities = mRemoveHistoryRecordsForApp.process(app);
        return hadVisibleActivities || isPausingDied;
    }

    boolean dump(FileDescriptor fd, PrintWriter pw, boolean dumpAll, boolean dumpClient,
+22 −0
Original line number Diff line number Diff line
@@ -225,5 +225,27 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase {

        mockSession.finishMocking();
    }

    @Test
    public void testResumeNextActivityOnCrashedAppDied() {
        mSupervisor.beginDeferResume();
        final ActivityRecord homeActivity = new ActivityBuilder(mService)
                .setTask(mRootWindowContainer.getDefaultTaskDisplayArea().getOrCreateRootHomeTask())
                .build();
        final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true).build();
        mSupervisor.endDeferResume();
        // Assume the activity is finishing and hidden because it was crashed.
        activity.finishing = true;
        activity.mVisibleRequested = false;
        activity.setVisible(false);
        activity.getRootTask().mPausingActivity = activity;
        homeActivity.setState(ActivityStack.ActivityState.PAUSED, "test");

        // Even the visibility states are invisible, the next activity should be resumed because
        // the crashed activity was pausing.
        mService.mInternal.handleAppDied(activity.app, false /* restarting */,
                null /* finishInstrumentationCallback */);
        assertEquals(ActivityStack.ActivityState.RESUMED, homeActivity.getState());
    }
}