diff options
3 files changed, 36 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java index ad46770432a1..bd3913063a3f 100644 --- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java +++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java @@ -559,7 +559,7 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { return false; } - final int sourceWindowingMode = source.getWindowingMode(); + final int sourceWindowingMode = source.getTask().getWindowingMode(); if (sourceWindowingMode != WINDOWING_MODE_FULLSCREEN && sourceWindowingMode != WINDOWING_MODE_FREEFORM) { return false; diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index 1ba8f7db531e..9c754b969604 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -1679,9 +1679,10 @@ public class ActivityStarterTests extends WindowTestsBase { @Test public void testResultCanceledWhenNotAllowedStartingActivity() { + final Task task = new TaskBuilder(mSupervisor).build(); final ActivityStarter starter = prepareStarter(0, false); final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build(); - final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).build(); + final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).setTask(task).build(); targetRecord.resultTo = sourceRecord; // Abort the activity start and ensure the sourceRecord gets the result (RESULT_CANCELED). diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java index 739737eb318d..07cfbf094e5d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java @@ -678,6 +678,39 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase { WINDOWING_MODE_FULLSCREEN); } + @Test + public void testInheritsSourceTaskWindowingModeWhenActivityIsInDifferentWindowingMode() { + final TestDisplayContent fullscreenDisplay = createNewDisplayContent( + WINDOWING_MODE_FULLSCREEN); + final ActivityRecord source = createSourceActivity(fullscreenDisplay); + source.setWindowingMode(WINDOWING_MODE_PINNED); + source.getTask().setWindowingMode(WINDOWING_MODE_FREEFORM); + + assertEquals(RESULT_CONTINUE, + new CalculateRequestBuilder().setSource(source).calculate()); + + assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode, + WINDOWING_MODE_FULLSCREEN); + } + + @Test + public void testDoesNotInheritsSourceTaskWindowingModeWhenActivityIsInFreeformWindowingMode() { + // The activity could end up in different windowing mode state after calling finish() + // while the task would still hold the WINDOWING_MODE_PINNED state, or in other words + // be still in the Picture in Picture mode. + final TestDisplayContent fullscreenDisplay = createNewDisplayContent( + WINDOWING_MODE_FULLSCREEN); + final ActivityRecord source = createSourceActivity(fullscreenDisplay); + source.setWindowingMode(WINDOWING_MODE_FREEFORM); + source.getTask().setWindowingMode(WINDOWING_MODE_PINNED); + + assertEquals(RESULT_CONTINUE, + new CalculateRequestBuilder().setSource(source).calculate()); + + assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode, + WINDOWING_MODE_FULLSCREEN); + } + @Test public void testKeepsPictureInPictureLaunchModeInOptions() { |