Fix some places that inadvertently removed split root tasks
LaunchParamsController shouldn't change windowing-mode for non
root tasks. Non-root tasks either inherit their windowing mode
from the root or are being controlled in a transient state.
Also, don't remove stacks that are created-by-organizer, it's
up to the organizer to remove those.
Bug: 168770671
Test: atest AssistantStackTests#testTranslucentAssistantActivityStackVisibility
on device with freeform display
Change-Id: Ibf1e504f04b7aa10dfe2f6976102bcf4836524f1
This commit is contained in:
@@ -144,11 +144,11 @@ class LaunchParamsController {
|
||||
mTmpParams.mPreferredTaskDisplayArea, true /* onTop */);
|
||||
}
|
||||
|
||||
if (mTmpParams.hasWindowingMode()
|
||||
&& mTmpParams.mWindowingMode != task.getRootTask().getWindowingMode()) {
|
||||
if (mTmpParams.hasWindowingMode() && task.isRootTask()
|
||||
&& mTmpParams.mWindowingMode != task.getWindowingMode()) {
|
||||
final int activityType = activity != null
|
||||
? activity.getActivityType() : task.getActivityType();
|
||||
task.getRootTask().setWindowingMode(task.getDisplayArea().validateWindowingMode(
|
||||
task.setWindowingMode(task.getDisplayArea().validateWindowingMode(
|
||||
mTmpParams.mWindowingMode, activity, task, activityType));
|
||||
}
|
||||
|
||||
|
||||
@@ -1305,10 +1305,9 @@ final class TaskDisplayArea extends DisplayArea<Task> {
|
||||
final int windowingMode = windowingModes[j];
|
||||
for (int i = getStackCount() - 1; i >= 0; --i) {
|
||||
final Task stack = getStackAt(i);
|
||||
if (!stack.isActivityTypeStandardOrUndefined()) {
|
||||
continue;
|
||||
}
|
||||
if (stack.getWindowingMode() != windowingMode) {
|
||||
if (stack.mCreatedByOrganizer
|
||||
|| !stack.isActivityTypeStandardOrUndefined()
|
||||
|| stack.getWindowingMode() != windowingMode) {
|
||||
continue;
|
||||
}
|
||||
stacks.add(stack);
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.server.wm;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
|
||||
import static android.view.Display.INVALID_DISPLAY;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
|
||||
@@ -318,6 +319,29 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
|
||||
assertEquals(windowingMode, afterWindowMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that {@link LaunchParamsModifier} doesn't alter non-root tasks' windowingMode.
|
||||
*/
|
||||
@Test
|
||||
public void testLayoutNonRootTaskWindowingModeChange() {
|
||||
final LaunchParams params = new LaunchParams();
|
||||
final int windowingMode = WINDOWING_MODE_FREEFORM;
|
||||
params.mWindowingMode = windowingMode;
|
||||
final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params);
|
||||
final Task task = new TaskBuilder(mAtm.mStackSupervisor).setCreateParentTask(true).build();
|
||||
task.getRootTask().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
|
||||
|
||||
mController.registerModifier(positioner);
|
||||
|
||||
final int beforeWindowMode = task.getWindowingMode();
|
||||
assertNotEquals(windowingMode, beforeWindowMode);
|
||||
|
||||
mController.layoutTask(task, null /* windowLayout */);
|
||||
|
||||
final int afterWindowMode = task.getWindowingMode();
|
||||
assertEquals(afterWindowMode, beforeWindowMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that {@link LaunchParamsModifier} requests specifying bounds during
|
||||
* layout are honored if window is in freeform.
|
||||
|
||||
Reference in New Issue
Block a user