Fix issues with assistant stack visibility.

- Ensure that we don't mark the docked or fullscreen stacks as
  invisible when the assistant stack is over them and translucent.

Bug: 35363819
Test: android.server.cts.ActivityManagerAssistantStackTests
Test: #testTranslucentAssistantActivityStackVisibility

Change-Id: I86698beec4963942dd3816e7d3f43c6614d892ac
This commit is contained in:
Winson Chung
2017-02-17 15:12:25 -08:00
parent 4a04f0fb91
commit e74ad8d498

View File

@@ -1526,10 +1526,11 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL
return false;
}
if (!isHomeOrRecentsStack() && r.frontOfTask
&& task.isOverHomeStack() && !StackId.isHomeOrRecentsStack(stackBehindId)) {
if (!isHomeOrRecentsStack() && r.frontOfTask && task.isOverHomeStack()
&& !StackId.isHomeOrRecentsStack(stackBehindId) && !isAssistantStack()) {
// Stack isn't translucent if it's top activity should have the home stack
// behind it and the stack currently behind it isn't the home or recents stack.
// behind it and the stack currently behind it isn't the home or recents stack
// or the assistant stack.
return false;
}
}
@@ -1572,10 +1573,18 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL
}
if (mStackId == DOCKED_STACK_ID) {
// Docked stack is always visible, except in the case where the top running activity
// task in the focus stack doesn't support any form of resizing but we show it for the
// home task even though it's not resizable.
final ActivityRecord r = topStack.topRunningActivityLocked();
// If the assistant stack is focused and translucent, then the docked stack is always
// visible
if (topStack.isAssistantStack()
&& topStack.isStackTranslucent(starting, DOCKED_STACK_ID)) {
return STACK_VISIBLE;
}
// Otherwise, the docked stack is always visible, except in the case where the top
// running activity task in the focus stack doesn't support any form of resizing but we
// show it for the home task even though it's not resizable.
final TaskRecord task = r != null ? r.task : null;
return task == null || task.supportsSplitScreen() || task.isHomeTask() ? STACK_VISIBLE
: STACK_INVISIBLE;