summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kazuki Takise <takise@google.com> 2025-02-25 02:40:18 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-25 02:40:18 -0800
commitd118d5bb17cab624df3bdaec46d80a87a8bbb10c (patch)
tree7c1a4d4f49e77b875c1624767854c76febd8ce4a
parente18a7dcfa5d40850882a7f8eedaadfecf1da37f5 (diff)
parent14218125e098c7e7781730a27bbe7266bf342c42 (diff)
Merge "Make presentation immersive" into main
-rw-r--r--core/java/android/app/Presentation.java9
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java10
-rw-r--r--services/core/java/com/android/server/wm/PresentationController.java2
3 files changed, 18 insertions, 3 deletions
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java
index bdab39dcd2ac..f39e2dd8cfa2 100644
--- a/core/java/android/app/Presentation.java
+++ b/core/java/android/app/Presentation.java
@@ -20,6 +20,8 @@ import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
+import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays;
+
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -34,6 +36,8 @@ import android.view.ContextThemeWrapper;
import android.view.Display;
import android.view.Gravity;
import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams.WindowType;
@@ -277,6 +281,11 @@ public class Presentation extends Dialog {
@Override
public void show() {
super.show();
+
+ WindowInsetsController controller = getWindow().getInsetsController();
+ if (controller != null && enablePresentationForConnectedDisplays()) {
+ controller.hide(WindowInsets.Type.systemBars());
+ }
}
/**
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a874ef6039f9..e190a04f1845 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -157,6 +157,7 @@ import static com.android.server.wm.utils.DisplayInfoOverrides.copyDisplayInfoFi
import static com.android.server.wm.utils.RegionUtils.forEachRectReverse;
import static com.android.server.wm.utils.RegionUtils.rectListToRegion;
import static com.android.window.flags.Flags.enablePersistingDensityScaleForConnectedDisplays;
+import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -3835,13 +3836,18 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
/**
* Looking for the focused window on this display if the top focused display hasn't been
- * found yet (topFocusedDisplayId is INVALID_DISPLAY) or per-display focused was allowed.
+ * found yet (topFocusedDisplayId is INVALID_DISPLAY), per-display focused was allowed, or
+ * the display is presenting. The last one is needed to update system bar visibility in response
+ * to presentation visibility because per-display focus is needed to change system bar
+ * visibility, but the display shouldn't get global focus when a presentation gets shown.
*
* @param topFocusedDisplayId Id of the top focused display.
* @return The focused window or null if there isn't any or no need to seek.
*/
WindowState findFocusedWindowIfNeeded(int topFocusedDisplayId) {
- return (hasOwnFocus() || topFocusedDisplayId == INVALID_DISPLAY)
+ return (hasOwnFocus() || topFocusedDisplayId == INVALID_DISPLAY
+ || (enablePresentationForConnectedDisplays()
+ && mWmService.mPresentationController.isPresentationVisible(mDisplayId)))
? findFocusedWindow() : null;
}
diff --git a/services/core/java/com/android/server/wm/PresentationController.java b/services/core/java/com/android/server/wm/PresentationController.java
index 913f0b9a981d..acc658bf635e 100644
--- a/services/core/java/com/android/server/wm/PresentationController.java
+++ b/services/core/java/com/android/server/wm/PresentationController.java
@@ -80,7 +80,7 @@ class PresentationController implements DisplayManager.DisplayListener {
return mPresentations.contains(displayId);
}
- private boolean isPresentationVisible(int displayId) {
+ boolean isPresentationVisible(int displayId) {
final Presentation presentation = mPresentations.get(displayId);
return presentation != null && presentation.mWin.mToken.isVisibleRequested();
}