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

Commit 2112da59 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Do not finish activity if with taskOverlay" into tm-dev am: 690aa5d5

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

Change-Id: I94f9b610d7ba7d45382481f6255423cea4fdc3b2
parents f56d60f0 690aa5d5
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -2196,8 +2196,9 @@ class ActivityStarter {
            // removed from calling performClearTaskLocked (For example, if it is being brought out
            // of history or if it is finished immediately), thus disassociating the task. Also note
            // that mReuseTask is reset as a result of {@link Task#performClearTaskLocked}
            // launching another activity.
            targetTask.performClearTaskLocked();
            // launching another activity. Keep the task-overlay activity because the targetTask
            // will be reused to launch new activity.
            targetTask.performClearTaskForReuse(true /* excludingTaskOverlay*/);
            targetTask.setIntent(mStartActivity);
            mAddingToTask = true;
        } else if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
@@ -2207,8 +2208,7 @@ class ActivityStarter {
            // In this situation we want to remove all activities from the task up to the one
            // being started. In most cases this means we are resetting the task to its initial
            // state.
            final ActivityRecord top = targetTask.performClearTaskForReuseLocked(mStartActivity,
                    mLaunchFlags);
            final ActivityRecord top = targetTask.performClearTop(mStartActivity, mLaunchFlags);

            if (top != null) {
                if (top.isRootOfTask()) {
+1 −1
Original line number Diff line number Diff line
@@ -1605,7 +1605,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        task.mTransitionController.requestCloseTransitionIfNeeded(task);
        task.mInRemoveTask = true;
        try {
            task.performClearTask(reason);
            task.removeActivities(reason, false /* excludingTaskOverlay */);
            cleanUpRemovedTaskLocked(task, killProcess, removeFromRecents);
            mService.getLockTaskController().clearLockedTask(task);
            mService.getTaskChangeNotificationController().notifyTaskStackChanged();
+2 −2
Original line number Diff line number Diff line
@@ -542,7 +542,7 @@ public class LockTaskController {
        if (mLockTaskModeTasks.isEmpty()) {
            return;
        }
        task.performClearTaskLocked();
        task.performClearTaskForReuse(false /* excludingTaskOverlay*/);
        mSupervisor.mRootWindowContainer.resumeFocusedTasksTopActivities();
    }

@@ -740,7 +740,7 @@ public class LockTaskController {
            ProtoLog.d(WM_DEBUG_LOCKTASK, "onLockTaskPackagesUpdated: removing %s"
                    + " mLockTaskAuth()=%s", lockedTask, lockedTask.lockTaskAuthToString());
            removeLockedTask(lockedTask);
            lockedTask.performClearTaskLocked();
            lockedTask.performClearTaskForReuse(false /* excludingTaskOverlay*/);
            taskChanged = true;
        }

+13 −11
Original line number Diff line number Diff line
@@ -1584,19 +1584,23 @@ class Task extends TaskFragment {
    }

    /** Completely remove all activities associated with an existing task. */
    void performClearTask(String reason) {
    void removeActivities(String reason, boolean excludingTaskOverlay) {
        clearPinnedTaskIfNeed();
        // Broken down into to cases to avoid object create due to capturing mStack.
        if (getRootTask() == null) {
            forAllActivities((r) -> {
                if (r.finishing) return;
                if (r.finishing || (excludingTaskOverlay && r.isTaskOverlay())) {
                    return;
                }
                // Task was restored from persistent storage.
                r.takeFromHistory();
                removeChild(r, reason);
            });
        } else {
            forAllActivities((r) -> {
                if (r.finishing) return;
                if (r.finishing || (excludingTaskOverlay && r.isTaskOverlay())) {
                    return;
                }
                // Prevent the transition from being executed too early if the top activity is
                // resumed but the mVisibleRequested of any other activity is true, the transition
                // should wait until next activity resumed.
@@ -1613,26 +1617,24 @@ class Task extends TaskFragment {
    /**
     * Completely remove all activities associated with an existing task.
     */
    void performClearTaskLocked() {
    void performClearTaskForReuse(boolean excludingTaskOverlay) {
        mReuseTask = true;
        mTaskSupervisor.beginDeferResume();
        try {
            performClearTask("clear-task-all");
            removeActivities("clear-task-all", excludingTaskOverlay);
        } finally {
            mTaskSupervisor.endDeferResume();
            mReuseTask = false;
        }
    }

    ActivityRecord performClearTaskForReuseLocked(ActivityRecord newR, int launchFlags) {
        mReuseTask = true;
    ActivityRecord performClearTop(ActivityRecord newR, int launchFlags) {
        mTaskSupervisor.beginDeferResume();
        final ActivityRecord result;
        try {
            result = performClearTaskLocked(newR, launchFlags);
            result = clearTopActivities(newR, launchFlags);
        } finally {
            mTaskSupervisor.endDeferResume();
            mReuseTask = false;
        }
        return result;
    }
@@ -1648,7 +1650,7 @@ class Task extends TaskFragment {
     * @return Returns the old activity that should be continued to be used,
     * or {@code null} if none was found.
     */
    private ActivityRecord performClearTaskLocked(ActivityRecord newR, int launchFlags) {
    private ActivityRecord clearTopActivities(ActivityRecord newR, int launchFlags) {
        final ActivityRecord r = findActivityInHistory(newR.mActivityComponent);
        if (r == null) return null;

@@ -1675,7 +1677,7 @@ class Task extends TaskFragment {
        // Stop operation once we reach the boundary activity.
        if (r == boundaryActivity) return true;

        if (!r.finishing) {
        if (!r.finishing && !r.isTaskOverlay()) {
            final ActivityOptions opts = r.getOptions();
            if (opts != null) {
                r.clearOptionsAnimation();
+1 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ public class AppTransitionControllerTest extends WindowTestsBase {
        behind.setState(ActivityRecord.State.STARTED, "test");
        behind.mVisibleRequested = true;

        task.performClearTask("test");
        task.removeActivities("test", false /* excludingTaskOverlay */);
        assertFalse(mDisplayContent.mAppTransition.isReady());
    }

Loading