From dff902bc7cd073f5db1b3aeb2186528ea1b15021 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 31 Mar 2020 13:32:47 +0800 Subject: [PATCH] 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 --- .../server/wm/ActivityStartController.java | 4 +- .../server/wm/RootWindowContainer.java | 4 +- .../core/java/com/android/server/wm/Task.java | 40 +++++++++---------- .../android/server/wm/TaskDisplayArea.java | 3 +- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java index d777f3fee1a23..4e85837e9616e 100644 --- a/services/core/java/com/android/server/wm/ActivityStartController.java +++ b/services/core/java/com/android/server/wm/ActivityStartController.java @@ -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(); } diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 80b8b58549669..15a09e55bb489 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -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 calculateDefaultMinimalSizeOfResizeableTasks(); final TaskDisplayArea defaultTaskDisplayArea = getDefaultTaskDisplayArea(); - defaultTaskDisplayArea.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, - ON_TOP); + defaultTaskDisplayArea.getOrCreateRootHomeTask(); positionChildAt(POSITION_TOP, defaultTaskDisplayArea.mDisplayContent, false /* includingParents */); } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index d31939dec509f..106f0709e1efc 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -2334,32 +2334,30 @@ class Task extends 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(); } diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index ec3c99bf08089..d28120e01786a 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1415,8 +1415,7 @@ final class TaskDisplayArea extends DisplayArea { 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; }