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

Commit 2f5ebc89 authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

Resume next activity if pausing app died am: 9c62ef63

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

Change-Id: Iaacc56f1227007e11bed6c9cfe1662ac5c517110
parents a23c657c 9c62ef63
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2726,13 +2726,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;
@@ -2740,7 +2742,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());
    }
}