summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Chang <chenghsiuchang@google.com>2023-04-19 06:37:09 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-04-28 17:42:37 +0000
commit9ee1c6ba6f3c2ba1a226abc622e86662b692b605 (patch)
tree19a314ae6ae3bd17b3347ccd84bca0713913d7aa
parentd3b2aaf23d4ce733ecc16f3168aef91a2324e98c (diff)
downloadbase-9ee1c6ba6f3c2ba1a226abc622e86662b692b605.tar.gz
Prevent force showing system bars for TaskView
Update the condition of force showing system bars to check adjacent tasks instead of checking multi-window windowing mode so it can distinguish from TaskView. Bug: 273495037 Test: atest TaskDisplayAreaTests DisplayPolicyTests InsetsPolicyTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2bd0fe76a6b4ef566386e1949e4db0cf0db16430) Merged-In: I1c51c6f66cd6967651068de1ffc2e6e8566f5a46 Change-Id: I1c51c6f66cd6967651068de1ffc2e6e8566f5a46
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java9
-rw-r--r--services/core/java/com/android/server/wm/Task.java16
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java8
3 files changed, 25 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 988e98f28d10..0da178b2bcd0 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -17,7 +17,6 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
-import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.view.Display.TYPE_INTERNAL;
import static android.view.InsetsState.ITYPE_BOTTOM_MANDATORY_GESTURES;
import static android.view.InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT;
@@ -2382,16 +2381,16 @@ public class DisplayPolicy {
private int updateSystemBarsLw(WindowState win, int disableFlags) {
final TaskDisplayArea defaultTaskDisplayArea = mDisplayContent.getDefaultTaskDisplayArea();
- final boolean multiWindowTaskVisible =
+ final boolean adjacentTasksVisible =
defaultTaskDisplayArea.getRootTask(task -> task.isVisible()
- && task.getTopLeafTask().getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW)
+ && task.getAdjacentTask() != null)
!= null;
final boolean freeformRootTaskVisible =
defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_FREEFORM);
// We need to force showing system bars when the multi-window or freeform root task is
// visible.
- mForceShowSystemBars = multiWindowTaskVisible || freeformRootTaskVisible;
+ mForceShowSystemBars = adjacentTasksVisible || freeformRootTaskVisible;
// We need to force the consumption of the system bars if they are force shown or if they
// are controlled by a remote insets controller.
mForceConsumeSystemBars = mForceShowSystemBars
@@ -2412,7 +2411,7 @@ public class DisplayPolicy {
int appearance = APPEARANCE_OPAQUE_NAVIGATION_BARS | APPEARANCE_OPAQUE_STATUS_BARS;
appearance = configureStatusBarOpacity(appearance);
- appearance = configureNavBarOpacity(appearance, multiWindowTaskVisible,
+ appearance = configureNavBarOpacity(appearance, adjacentTasksVisible,
freeformRootTaskVisible);
final boolean requestHideNavBar = !win.getRequestedVisibility(ITYPE_NAVIGATION_BAR);
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index f5c44d94160b..1ddc3e8c19b3 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -2385,6 +2385,22 @@ class Task extends TaskFragment {
return parentTask == null ? null : parentTask.getCreatedByOrganizerTask();
}
+ /** @return the first adjacent task of this task or its parent. */
+ @Nullable
+ Task getAdjacentTask() {
+ final TaskFragment adjacentTaskFragment = getAdjacentTaskFragment();
+ if (adjacentTaskFragment != null && adjacentTaskFragment.asTask() != null) {
+ return adjacentTaskFragment.asTask();
+ }
+
+ final WindowContainer parent = getParent();
+ if (parent == null || parent.asTask() == null) {
+ return null;
+ }
+
+ return parent.asTask().getAdjacentTask();
+ }
+
// TODO(task-merge): Figure out what's the right thing to do for places that used it.
boolean isRootTask() {
return getRootTask() == this;
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
index d3282b97a6b8..9f376ad6edab 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
@@ -81,12 +81,14 @@ public class InsetsPolicyTest extends WindowTestsBase {
}
@Test
- public void testControlsForDispatch_multiWindowTaskVisible() {
+ public void testControlsForDispatch_adjacentTasksVisible() {
addWindow(TYPE_STATUS_BAR, "statusBar");
addWindow(TYPE_NAVIGATION_BAR, "navBar");
- final WindowState win = createWindow(null, WINDOWING_MODE_MULTI_WINDOW,
- ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app");
+ final Task task1 = createTask(mDisplayContent);
+ final Task task2 = createTask(mDisplayContent);
+ task1.setAdjacentTaskFragment(task2);
+ final WindowState win = createAppWindow(task1, WINDOWING_MODE_MULTI_WINDOW, "app");
final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win);
// The app must not control any system bars.