summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java25
1 files changed, 18 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index ee4dbd4ca451..a42fbfecfeb2 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1335,17 +1335,28 @@ final class ActivityStack {
return topHomeActivity == null || !topHomeActivity.isHomeActivity();
}
- if (focusedStackId == DOCKED_STACK_ID
- && stackIndex == (mStacks.indexOf(focusedStack) - 1)) {
+ final int belowFocusedIndex = mStacks.indexOf(focusedStack) - 1;
+ if (focusedStackId == DOCKED_STACK_ID && stackIndex == belowFocusedIndex) {
// Stacks directly behind the docked stack are always visible.
return true;
}
- if (mStackId == HOME_STACK_ID && focusedStackId == FULLSCREEN_WORKSPACE_STACK_ID) {
- // Home stack is always visible behind the fullscreen stack with a translucent activity.
- // This is done so that the home stack can act as a background to the translucent
- // activity.
- return hasTranslucentActivity(focusedStack);
+ if (focusedStackId == FULLSCREEN_WORKSPACE_STACK_ID
+ && hasTranslucentActivity(focusedStack)) {
+ // Stacks behind the fullscreen stack with a translucent activity are always
+ // visible so they can act as a backdrop to the translucent activity.
+ // For example, dialog activities
+ if (stackIndex == belowFocusedIndex) {
+ return true;
+ }
+ if (belowFocusedIndex >= 0) {
+ final ActivityStack stack = mStacks.get(belowFocusedIndex);
+ if (stack.mStackId == DOCKED_STACK_ID && stackIndex == (belowFocusedIndex - 1)) {
+ // The stack behind the docked stack is also visible so we can have a complete
+ // backdrop to the translucent activity when the docked stack is up.
+ return true;
+ }
+ }
}
if (mStackId >= FIRST_STATIC_STACK_ID && mStackId <= LAST_STATIC_STACK_ID) {