Compute configuration overrides for tasks created by organizer

The config overrides were only computed for leaf tasks. So, the
config of the organized tasks were inherited from the display,
which was still fullscreen size. This was not right especially
for split-screen organizer tasks because the configuration could
be used by the organizers.

Also remove requesting override windowing mode as fullscreen for
home tasks, the config was updated to fullscreen or
split-screen-secondary while resolving override config instead.

Bug: 152408408
Test: Enter split-screen and show IME
Change-Id: Ie6737cb5e9655c57724fc140c6b6fde3a96be6ab
This commit is contained in:
Louis Chang
2020-03-31 13:32:47 +08:00
parent 0f82965251
commit dff902bc7c
4 changed files with 24 additions and 27 deletions

View File

@@ -19,6 +19,7 @@ package com.android.server.wm;
import static android.app.ActivityManager.START_SUCCESS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.os.FactoryTest.FACTORY_TEST_LOW_LEVEL;
@@ -191,8 +192,9 @@ public class ActivityStartController {
try {
// TODO(multi-display-area): Support starting home in a task display area
// Make sure home stack exist on display.
// TODO(b/153624902): Replace with TaskDisplayArea#getOrCreateRootHomeTask()
homeStack = display.getDefaultTaskDisplayArea().getOrCreateStack(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, ON_TOP);
} finally {
mSupervisor.endDeferResume();
}

View File

@@ -23,7 +23,6 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
@@ -1369,8 +1368,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
calculateDefaultMinimalSizeOfResizeableTasks();
final TaskDisplayArea defaultTaskDisplayArea = getDefaultTaskDisplayArea();
defaultTaskDisplayArea.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME,
ON_TOP);
defaultTaskDisplayArea.getOrCreateRootHomeTask();
positionChildAt(POSITION_TOP, defaultTaskDisplayArea.mDisplayContent,
false /* includingParents */);
}

View File

@@ -2334,32 +2334,30 @@ class Task extends WindowContainer<WindowContainer> {
return Configuration.reduceScreenLayout(sourceScreenLayout, longSize, shortSize);
}
private void resolveOrganizedOverrideConfiguration(Configuration newParentConfig) {
super.resolveOverrideConfiguration(newParentConfig);
if (!isOrganized()) {
return;
}
final Task root = getRootTask();
if (root == this) {
return;
}
// Ensure to have the same windowing mode for the child tasks that controlled by task org.
getResolvedOverrideConfiguration().windowConfiguration
.setWindowingMode(root.getWindowingMode());
}
@Override
void resolveOverrideConfiguration(Configuration newParentConfig) {
if (!isLeafTask() || mCreatedByOrganizer) {
resolveOrganizedOverrideConfiguration(newParentConfig);
return;
}
mTmpBounds.set(getResolvedOverrideConfiguration().windowConfiguration.getBounds());
resolveOrganizedOverrideConfiguration(newParentConfig);
super.resolveOverrideConfiguration(newParentConfig);
// Resolve override windowing mode to fullscreen for home task (even on freeform
// display), or split-screen-secondary if in split-screen mode.
int windowingMode =
getResolvedOverrideConfiguration().windowConfiguration.getWindowingMode();
if (getActivityType() == ACTIVITY_TYPE_HOME && windowingMode == WINDOWING_MODE_UNDEFINED) {
windowingMode = inSplitScreenWindowingMode() ? WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
: WINDOWING_MODE_FULLSCREEN;
getResolvedOverrideConfiguration().windowConfiguration.setWindowingMode(windowingMode);
}
if (!isLeafTask()) {
// Compute configuration overrides for tasks that created by organizer, so that
// organizer can get the correct configuration from those tasks.
if (mCreatedByOrganizer) {
computeConfigResourceOverrides(getResolvedOverrideConfiguration(), newParentConfig);
}
return;
}
if (windowingMode == WINDOWING_MODE_UNDEFINED) {
windowingMode = newParentConfig.windowConfiguration.getWindowingMode();
}

View File

@@ -1415,8 +1415,7 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
ActivityStack homeTask = getRootHomeTask();
if (homeTask == null && mDisplayContent.supportsSystemDecorations()
&& !mDisplayContent.isUntrustedVirtualDisplay()) {
homeTask = createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME,
false /* onTop */);
homeTask = createStack(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, false /* onTop */);
}
return homeTask;
}