diff options
4 files changed, 27 insertions, 13 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java index 7743ad55debb..76f0b6769855 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java @@ -1280,9 +1280,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen // Check whether the Intent should be embedded in the known Task. final TaskContainer taskContainer = mTaskContainers.valueAt(0); if (taskContainer.isInPictureInPicture() - || taskContainer.getTopNonFinishingActivity() == null) { + || taskContainer.getTopNonFinishingActivity(false /* includeOverlay */) == null) { // We don't embed activity when it is in PIP, or if we can't find any other owner - // activity in the Task. + // activity in non-overlay container in the Task. return null; } @@ -1431,7 +1431,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } else { final TaskContainer taskContainer = getTaskContainer(taskId); activityInTask = taskContainer != null - ? taskContainer.getTopNonFinishingActivity() + ? taskContainer.getTopNonFinishingActivity(true /* includeOverlay */) : null; } if (activityInTask == null) { @@ -1763,10 +1763,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen return; } - if (container.isFinished()) { - return; - } - if (container.isOverlay()) { updateOverlayContainer(wct, container); return; diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java index eeb3ccf0d4cb..028e75fe010f 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java @@ -235,9 +235,13 @@ class TaskContainer { } @Nullable - Activity getTopNonFinishingActivity() { + Activity getTopNonFinishingActivity(boolean includeOverlay) { for (int i = mContainers.size() - 1; i >= 0; i--) { - final Activity activity = mContainers.get(i).getTopNonFinishingActivity(); + final TaskFragmentContainer container = mContainers.get(i); + if (!includeOverlay && container.isOverlay()) { + continue; + } + final Activity activity = container.getTopNonFinishingActivity(); if (activity != null) { return activity; } diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java index e74d5fb4d0be..50cfd941adb3 100644 --- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java +++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java @@ -415,6 +415,17 @@ public class OverlayPresentationTest { } @Test + public void testGetTopNonFinishingActivityWithOverlay() { + createTestOverlayContainer(TASK_ID, "test1"); + final Activity activity = createMockActivity(); + final TaskFragmentContainer container = createMockTaskFragmentContainer(activity); + final TaskContainer task = container.getTaskContainer(); + + assertThat(task.getTopNonFinishingActivity(true /* includeOverlay */)).isEqualTo(mActivity); + assertThat(task.getTopNonFinishingActivity(false /* includeOverlay */)).isEqualTo(activity); + } + + @Test public void testUpdateContainer_dontInvokeUpdateOverlayForNonOverlayContainer() { TaskFragmentContainer taskFragmentContainer = createMockTaskFragmentContainer(mActivity); diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java index e3f51697c284..e56c8ab686e7 100644 --- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java +++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java @@ -151,21 +151,24 @@ public class TaskContainerTest { @Test public void testGetTopNonFinishingActivity() { final TaskContainer taskContainer = createTestTaskContainer(); - assertNull(taskContainer.getTopNonFinishingActivity()); + assertNull(taskContainer.getTopNonFinishingActivity(true /* includeOverlay */)); final TaskFragmentContainer tf0 = mock(TaskFragmentContainer.class); taskContainer.addTaskFragmentContainer(tf0); final Activity activity0 = mock(Activity.class); doReturn(activity0).when(tf0).getTopNonFinishingActivity(); - assertEquals(activity0, taskContainer.getTopNonFinishingActivity()); + assertEquals(activity0, taskContainer.getTopNonFinishingActivity( + true /* includeOverlay */)); final TaskFragmentContainer tf1 = mock(TaskFragmentContainer.class); taskContainer.addTaskFragmentContainer(tf1); - assertEquals(activity0, taskContainer.getTopNonFinishingActivity()); + assertEquals(activity0, taskContainer.getTopNonFinishingActivity( + true /* includeOverlay */)); final Activity activity1 = mock(Activity.class); doReturn(activity1).when(tf1).getTopNonFinishingActivity(); - assertEquals(activity1, taskContainer.getTopNonFinishingActivity()); + assertEquals(activity1, taskContainer.getTopNonFinishingActivity( + true /* includeOverlay */)); } @Test |