diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStack.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 6bed46226b42..80fe30d1f80c 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -4096,9 +4096,13 @@ class ActivityStack extends ConfigurationContainer { final ActivityDisplay display = getDisplay(); final ActivityRecord next = display.topRunningActivity(true /* considerKeyguardState */); final boolean isFloating = r.getConfiguration().windowConfiguration.tasksAreFloating(); - - if (mode == FINISH_AFTER_VISIBLE && (r.visible || r.nowVisible) - && next != null && !next.nowVisible && !isFloating) { + // isNextNotYetVisible is to check if the next activity is invisible, or it has been + // requested to be invisible but its windows haven't reported as invisible. If so, it + // implied that the current finishing activity should be added into stopping list rather + // than destroying it immediately. + final boolean isNextNotYetVisible = next != null && (!next.nowVisible || !next.visible); + if (mode == FINISH_AFTER_VISIBLE && (r.visible || r.nowVisible) && isNextNotYetVisible + && !isFloating) { if (!mStackSupervisor.mStoppingActivities.contains(r)) { addToStopping(r, false /* scheduleIdle */, false /* idleDelayed */, "finishCurrentActivityLocked"); |