Not resuming stack top activity while restarting if it is launched-behind

Adding launched-behind condition check when determining whether to resume
the stack top activity, instead of avoid resuming the launched-behind
activity while restarting it. This should be done earlier because AWT and
AR will be unified into one object, which updates AWT#mLaunchTaskBehind to
false while committing visibility (via ActivityStack#makeVisibleAndRestartIfNeeded()
-> AR#setVisible()), and breaks RecentsAnimationTest#testRestartRecentsActivity().

Bug: 80414790
Test: atest RecentsAnimationTest
Change-Id: Ica95d4202c6b8e6d315432558529b0a8b7549efb
This commit is contained in:
Louis Chang
2019-09-30 21:41:52 +08:00
parent 3afc6731b2
commit b7eb3cfd00

View File

@@ -2106,7 +2106,11 @@ class ActivityStack extends ConfigurationContainer {
boolean aboveTop = top != null;
final boolean stackShouldBeVisible = shouldBeVisible(starting);
boolean behindFullscreenActivity = !stackShouldBeVisible;
final boolean resumeTopActivity = isFocusable() && isInStackLocked(starting) == null;
// We should not resume activities that being launched behind because these
// activities are actually behind other fullscreen activities, but still required
// to be visible (such as performing Recents animation).
final boolean resumeTopActivity = isFocusable() && isInStackLocked(starting) == null
&& top != null && !top.mLaunchTaskBehind;
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final TaskRecord task = mTaskHistory.get(taskNdx);
final ArrayList<ActivityRecord> activities = task.mActivities;
@@ -2332,11 +2336,7 @@ class ActivityStack extends ConfigurationContainer {
r.setVisible(true);
}
if (r != starting) {
// We should not resume activities that being launched behind because these
// activities are actually behind other fullscreen activities, but still required
// to be visible (such as performing Recents animation).
mStackSupervisor.startSpecificActivityLocked(r, andResume && !r.mLaunchTaskBehind,
true /* checkConfig */);
mStackSupervisor.startSpecificActivityLocked(r, andResume, true /* checkConfig */);
return true;
}
}