From 53cab5ba0bf3524239a67efac31ae1299f83fe49 Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Tue, 8 Aug 2023 18:37:15 -0700 Subject: [PATCH] Don't skip resume on transient-launch activity When transient-launching, we are trying not to affect any other lifecycles by pausing things. This should imply that we shouldn't wait for ongoing pauses since they are independent of the transient-launch. deferPause is used to indicate that the current resume won't pause/wait for the current activity to pause. So, don't wait for ongoing pauses that started beforehand either. Bug: 294152870 Bug: 293379641 Test: have a decoupled slow-pausing app's pause (eg. CCT) be interrupted by recents entry. Change-Id: I4a9b44f1f08bfd2e41eee9352588b84ee8cc8a5d --- .../java/com/android/server/wm/TaskFragment.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 57ce368aae879..f340c266c4fce 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1184,7 +1184,7 @@ class TaskFragment extends WindowContainer { } final boolean resumeTopActivity(ActivityRecord prev, ActivityOptions options, - boolean deferPause) { + boolean skipPause) { ActivityRecord next = topRunningActivity(true /* focusableOnly */); if (next == null || !next.canResumeByCompat()) { return false; @@ -1192,11 +1192,9 @@ class TaskFragment extends WindowContainer { next.delayedResume = false; - // If we are currently pausing an activity, then don't do anything until that is done. - final boolean allPausedComplete = mRootWindowContainer.allPausedActivitiesComplete(); - if (!allPausedComplete) { - ProtoLog.v(WM_DEBUG_STATES, - "resumeTopActivity: Skip resume: some activity pausing."); + if (!skipPause && !mRootWindowContainer.allPausedActivitiesComplete()) { + // If we aren't skipping pause, then we have to wait for currently pausing activities. + ProtoLog.v(WM_DEBUG_STATES, "resumeTopActivity: Skip resume: some activity pausing."); return false; } @@ -1260,7 +1258,7 @@ class TaskFragment extends WindowContainer { lastResumed = lastFocusedRootTask.getTopResumedActivity(); } - boolean pausing = !deferPause && taskDisplayArea.pauseBackTasks(next); + boolean pausing = !skipPause && taskDisplayArea.pauseBackTasks(next); if (mResumedActivity != null) { ProtoLog.d(WM_DEBUG_STATES, "resumeTopActivity: Pausing %s", mResumedActivity); pausing |= startPausing(mTaskSupervisor.mUserLeaving, false /* uiSleeping */,