Ensure consistent stack behind PIP when going to/from fullscreen.

- When a fullscreen activity enters PIP, we were previously always
  bringing the home stack forward due to the return type being set
  to HOME_ACTIVITY_TYPE, causing the home screen to be visible if
  expanding PIP over a fullscreen activity and going back into PIP
  immediately.  This CL instead updates the return-to type to
  reflect the stack that was currently open before the pinned task
  was made fullscreen again to ensure that it is consistent when
  entering PIP again.

Test: android.server.cts.ActivityManagerPinnedStackTests
Test: #testPipUnPipOverHome
Test: #testPipUnPipOverApp

Change-Id: Id5dd7db1f5a8040ff21190cc347eb6aae5893006
This commit is contained in:
Winson Chung
2016-11-10 17:40:34 -08:00
parent fcb261cd07
commit 0c1ca09dbb

View File

@@ -2120,6 +2120,14 @@ public class ActivityStackSupervisor extends ConfigurationContainer
final int size = tasks.size();
if (onTop) {
for (int i = 0; i < size; i++) {
final TaskRecord task = tasks.get(i);
if (fromStackId == PINNED_STACK_ID) {
// Update the return-to to reflect where the pinned stack task was moved
// from so that we retain the stack that was previously visible if the
// pinned stack is recreated. See moveActivityToPinnedStackLocked().
task.setTaskToReturnTo(getFocusedStack().getStackId() == HOME_STACK_ID
? HOME_ACTIVITY_TYPE : APPLICATION_ACTIVITY_TYPE);
}
moveTaskToStackLocked(tasks.get(i).taskId,
FULLSCREEN_WORKSPACE_STACK_ID, onTop, onTop /*forceFocus*/,
"moveTasksToFullscreenStack", ANIMATE, DEFER_RESUME);