Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd7593ac authored by Winson Chung's avatar Winson Chung
Browse files

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
parent 5c5f1f64
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -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))) {
        if (topStackId == DOCKED_STACK_ID || StackId.isAlwaysOnTop(topStackId)) {
            if (stackIndex == stackBehindTopIndex) {
                // 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;
            } 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)