From b16cf34d79707f717564afb6bd4edcc3d8b118ad Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Thu, 12 Nov 2015 17:22:40 -0800 Subject: [PATCH] Consider stack invisible if it got no running apps. When we close an freeform app by X button while an app is docked on the other side, ActivityStack.ensureActivitiesVisibleLocked() failed to make home stack visible, because it's under the freeform stack which only contains one finishing activity. We usually will not do another round of ensureActivitiesVisibleLocked when the activity is destroyed. Need to make sure visibility is adjusted to the stack below when we start finishing the last app in a stack. bug: 25668050 Change-Id: Id2a23cb9480221a4e55ba3be9eab51f6efd8a700 --- .../core/java/com/android/server/am/ActivityStack.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index ba6e9b1c1a4dc..64699c9d2e9f7 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1338,7 +1338,12 @@ final class ActivityStack { return topHomeActivity == null || !topHomeActivity.isHomeActivity(); } - final int belowFocusedIndex = mStacks.indexOf(focusedStack) - 1; + // Find the first stack below focused stack that actually got something visible. + int belowFocusedIndex = mStacks.indexOf(focusedStack) - 1; + while (belowFocusedIndex >= 0 && + mStacks.get(belowFocusedIndex).topRunningActivityLocked() == null) { + belowFocusedIndex--; + } if ((focusedStackId == DOCKED_STACK_ID || focusedStackId == PINNED_STACK_ID) && stackIndex == belowFocusedIndex) { // Stacks directly behind the docked or pinned stack are always visible.