Pausing the resumed activity when making it invisible

A resumed activity was added to stopping activity lists while
making it invisible without having state changes. So, the
activity won't be resumed if it becomes visible again because
the activity is already in the resumed state.

mSetToSleep was used in 9b8ece2, which wasn't a reliable way to
determine if the activity is resuming because it gets updates until
set to sleep. Now we use Task#mInResumeTopActivity instead.

Bug: 160435184
Test: atest ActivityRecordTests
Change-Id: I3509ba75e3f2d87c863d52c0fb07d69cbfe41764
This commit is contained in:
Louis Chang
2020-10-05 11:51:52 +08:00
parent 4a11c4408f
commit 9cbadee741

View File

@@ -4761,14 +4761,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
supportsEnterPipOnTaskSwitch = false;
break;
case RESUMED:
// If the app is capable of entering PIP, we should try pausing it now
// so it can PIP correctly.
if (deferHidingClient) {
getRootTask().startPausingLocked(
mStackSupervisor.mUserLeaving /* userLeaving */,
false /* uiSleeping */, null /* resuming */, "makeInvisible");
// Do nothing if currently in the process of resuming the activity. Otherwise,
// starting to pause it since it is not visible.
if (task.mInResumeTopActivity
&& task.topRunningActivity(true /* focusableOnly */) == this) {
break;
}
getRootTask().startPausingLocked(mStackSupervisor.mUserLeaving,
false /* uiSleeping */, null /* resuming */, "makeInvisible");
// fall through
case INITIALIZING:
case PAUSING:
case PAUSED: