From ee05681139f2eb5a9994d7294441d694a309407f Mon Sep 17 00:00:00 2001 From: Andrii Kulian Date: Wed, 21 Sep 2016 15:34:45 -0700 Subject: Fix stopping activity when removed from waiting visible During refactoring in ag/613666 waitingVisible flag clearing was mistakenly removed. It was added back in ag/1221328 but only for activities that are finishing. This caused activity not being stopped in some cases when window visibility change was handled before receiving idle callback from client. This is easily reproducible when there is a scene transition animation specified. Bug: 31078584 Change-Id: Ic09c5199ad4fceae0607e4bcce02be5335c8870b --- services/core/java/com/android/server/am/ActivityStackSupervisor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 17670f8c5669..c6ab9186456d 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3139,11 +3139,14 @@ public final class ActivityStackSupervisor implements DisplayListener { final boolean nowVisible = allResumedActivitiesVisible(); for (int activityNdx = mStoppingActivities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord s = mStoppingActivities.get(activityNdx); + // TODO: Remove mWaitingVisibleActivities list and just remove activity from + // mStoppingActivities when something else comes up. boolean waitingVisible = mWaitingVisibleActivities.contains(s); if (DEBUG_STATES) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible + " waitingVisible=" + waitingVisible + " finishing=" + s.finishing); if (waitingVisible && nowVisible) { mWaitingVisibleActivities.remove(s); + waitingVisible = false; if (s.finishing) { // If this activity is finishing, it is sitting on top of // everyone else but we now know it is no longer needed... @@ -3152,7 +3155,6 @@ public final class ActivityStackSupervisor implements DisplayListener { // hidden by the activities in front of it. if (DEBUG_STATES) Slog.v(TAG, "Before stopping, can hide: " + s); mWindowManager.setAppVisibility(s.appToken, false); - waitingVisible = false; } } if ((!waitingVisible || mService.isSleepingOrShuttingDownLocked()) && remove) { -- cgit v1.2.3-59-g8ed1b