Move primary-split-screen stack forward in some cases.
If we are moving a stack in split-screen seconardy mode forward, we need to make sure we move the primary split-screen stack forward in the case it is current behind a fulscreen stack so both halves of the split-screen appear on-top and the fullscreen stack isn't cutting between them. Mostly a workaround until fix can fix b/70677280 where we would have a stack as a parent of another stack. Change-Id: I7d030b80c12771e0370a1fea8e1abf96560a9029 Fixes: 71899050 Bug: 70677280 Test: atest ActivityStackTests#testSplitScreenMoveToFront
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user