Ensure transparent assistant works with PiP

- When an always-on-top stack is visible, then ensure that a stack is
  visible if it is behind a translucent assistant stack (similar to
  b/37294521).

Bug: 63055581
Test: android.server.cts.ActivityManagerPinnedStackTests
Test: android.server.cts.ActivityManagerAssistantStackTests
Test: #testPinnedStackWithAssistant
Change-Id: I4ffec7bbcbd11c496604fcd1da381fd10fb6a892
This commit is contained in:
Winson Chung
2017-07-05 18:02:36 -07:00
parent 5c5f1f6419
commit dd7593ac21

View File

@@ -1690,14 +1690,20 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
}
final int stackBehindTopId = (stackBehindTopIndex >= 0)
? mStacks.get(stackBehindTopIndex).mStackId : INVALID_STACK_ID;
if ((topStackId == DOCKED_STACK_ID || topStackId == PINNED_STACK_ID)
&& (stackIndex == stackBehindTopIndex
|| (stackBehindTopId == DOCKED_STACK_ID
&& stackIndex == stackBehindTopIndex - 1))) {
// Stacks directly behind the docked or pinned stack are always visible.
// Also this stack is visible if behind docked stack and the docked stack is behind the
// top-most pinned stack
return STACK_VISIBLE;
if (topStackId == DOCKED_STACK_ID || StackId.isAlwaysOnTop(topStackId)) {
if (stackIndex == stackBehindTopIndex) {
// Stacks directly behind the docked or pinned stack are always visible.
return STACK_VISIBLE;
} else if (StackId.isAlwaysOnTop(topStackId) && stackIndex == stackBehindTopIndex - 1) {
// Otherwise, this stack can also be visible if it is directly behind a docked stack
// or translucent assistant stack behind an always-on-top top-most stack
if (stackBehindTopId == DOCKED_STACK_ID) {
return STACK_VISIBLE;
} else if (stackBehindTopId == ASSISTANT_STACK_ID) {
return mStacks.get(stackBehindTopIndex).isStackTranslucent(starting, mStackId)
? STACK_VISIBLE : STACK_INVISIBLE;
}
}
}
if (StackId.isBackdropToTranslucentActivity(topStackId)