Loading services/core/java/com/android/server/am/ActivityStack.java +20 −1 Original line number Diff line number Diff line Loading @@ -989,13 +989,32 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return; } final ActivityDisplay display = getDisplay(); if (inSplitScreenSecondaryWindowingMode()) { // If the stack is in split-screen seconardy mode, we need to make sure we move the // primary split-screen stack forward in the case it is currently behind a fullscreen // stack so both halves of the split-screen appear on-top and the fullscreen stack isn't // cutting between them. // TODO(b/70677280): This is a workaround until we can fix as part of b/70677280. final ActivityStack topFullScreenStack = display.getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN); if (topFullScreenStack != null) { final ActivityStack primarySplitScreenStack = display.getSplitScreenPrimaryStack(); if (display.getIndexOf(topFullScreenStack) > display.getIndexOf(primarySplitScreenStack)) { primarySplitScreenStack.moveToFront(reason + " splitScreenToTop"); } } } if (!isActivityTypeHome() && returnsToHomeStack()) { // Make sure the home stack is behind this stack since that is where we should return to // when this stack is no longer visible. mStackSupervisor.moveHomeStackToFront(reason + " returnToHome"); } getDisplay().positionChildAtTop(this); display.positionChildAtTop(this); mStackSupervisor.setFocusStackUnchecked(reason, this); if (task != null) { insertTaskAtTop(task, null); Loading services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +26 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ import org.junit.Test; * Tests for the {@link ActivityStack} class. * * Build/Install/Run: * atest ActivityStackTests * atest FrameworksServicesTests:com.android.server.am.ActivityStackTests */ @SmallTest @Presubmit Loading Loading @@ -425,6 +425,31 @@ public class ActivityStackTests extends ActivityTestsBase { assertTrue(display.getStackAboveHome() == fullscreenStack2); } @Test public void testSplitScreenMoveToFront() throws Exception { final ActivityDisplay display = mService.mStackSupervisor.getDefaultDisplay(); final TestActivityStack splitScreenPrimary = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final TestActivityStack splitScreenSecondary = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final TestActivityStack assistantStack = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_ASSISTANT, true /* onTop */); splitScreenPrimary.setIsTranslucent(false); splitScreenSecondary.setIsTranslucent(false); assistantStack.setIsTranslucent(false); assertFalse(splitScreenPrimary.shouldBeVisible(null /* starting */)); assertFalse(splitScreenSecondary.shouldBeVisible(null /* starting */)); assertTrue(assistantStack.shouldBeVisible(null /* starting */)); splitScreenSecondary.moveToFront("testSplitScreenMoveToFront"); assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */)); assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */)); assertFalse(assistantStack.shouldBeVisible(null /* starting */)); } private <T extends ActivityStack> T createStackForShouldBeVisibleTest( ActivityDisplay display, int windowingMode, int activityType, boolean onTop) { final T stack = display.createStack(windowingMode, activityType, onTop); Loading Loading
services/core/java/com/android/server/am/ActivityStack.java +20 −1 Original line number Diff line number Diff line Loading @@ -989,13 +989,32 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return; } final ActivityDisplay display = getDisplay(); if (inSplitScreenSecondaryWindowingMode()) { // If the stack is in split-screen seconardy mode, we need to make sure we move the // primary split-screen stack forward in the case it is currently behind a fullscreen // stack so both halves of the split-screen appear on-top and the fullscreen stack isn't // cutting between them. // TODO(b/70677280): This is a workaround until we can fix as part of b/70677280. final ActivityStack topFullScreenStack = display.getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN); if (topFullScreenStack != null) { final ActivityStack primarySplitScreenStack = display.getSplitScreenPrimaryStack(); if (display.getIndexOf(topFullScreenStack) > display.getIndexOf(primarySplitScreenStack)) { primarySplitScreenStack.moveToFront(reason + " splitScreenToTop"); } } } if (!isActivityTypeHome() && returnsToHomeStack()) { // Make sure the home stack is behind this stack since that is where we should return to // when this stack is no longer visible. mStackSupervisor.moveHomeStackToFront(reason + " returnToHome"); } getDisplay().positionChildAtTop(this); display.positionChildAtTop(this); mStackSupervisor.setFocusStackUnchecked(reason, this); if (task != null) { insertTaskAtTop(task, null); Loading
services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +26 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ import org.junit.Test; * Tests for the {@link ActivityStack} class. * * Build/Install/Run: * atest ActivityStackTests * atest FrameworksServicesTests:com.android.server.am.ActivityStackTests */ @SmallTest @Presubmit Loading Loading @@ -425,6 +425,31 @@ public class ActivityStackTests extends ActivityTestsBase { assertTrue(display.getStackAboveHome() == fullscreenStack2); } @Test public void testSplitScreenMoveToFront() throws Exception { final ActivityDisplay display = mService.mStackSupervisor.getDefaultDisplay(); final TestActivityStack splitScreenPrimary = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final TestActivityStack splitScreenSecondary = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final TestActivityStack assistantStack = createStackForShouldBeVisibleTest(display, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_ASSISTANT, true /* onTop */); splitScreenPrimary.setIsTranslucent(false); splitScreenSecondary.setIsTranslucent(false); assistantStack.setIsTranslucent(false); assertFalse(splitScreenPrimary.shouldBeVisible(null /* starting */)); assertFalse(splitScreenSecondary.shouldBeVisible(null /* starting */)); assertTrue(assistantStack.shouldBeVisible(null /* starting */)); splitScreenSecondary.moveToFront("testSplitScreenMoveToFront"); assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */)); assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */)); assertFalse(assistantStack.shouldBeVisible(null /* starting */)); } private <T extends ActivityStack> T createStackForShouldBeVisibleTest( ActivityDisplay display, int windowingMode, int activityType, boolean onTop) { final T stack = display.createStack(windowingMode, activityType, onTop); Loading