diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStack.java | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStackSupervisor.java | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 05e1893bf4f3..dae145de18d2 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1654,6 +1654,16 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai void addToStopping(ActivityRecord r, boolean scheduleIdle, boolean idleDelayed) { if (!mStackSupervisor.mStoppingActivities.contains(r)) { mStackSupervisor.mStoppingActivities.add(r); + + // Some activity is waiting for another activity to become visible before it's being + // stopped, which means that we also want to wait with stopping this one to avoid + // flickers. + if (!mStackSupervisor.mActivitiesWaitingForVisibleActivity.isEmpty() + && !mStackSupervisor.mActivitiesWaitingForVisibleActivity.contains(r)) { + if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "adding to waiting visible activity=" + r + + " existing=" + mStackSupervisor.mActivitiesWaitingForVisibleActivity); + mStackSupervisor.mActivitiesWaitingForVisibleActivity.add(r); + } } // If we already have a few activities waiting to stop, then give up diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index f49943e2f0c8..1cb6be6136b1 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3899,6 +3899,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D stops = new ArrayList<>(); } stops.add(s); + + // Make sure to remove it in all cases in case we entered this block with + // shouldSleepOrShutDown + mActivitiesWaitingForVisibleActivity.remove(s); mStoppingActivities.remove(activityNdx); } } |