Do not force desktop mode on a rear positioned display
Also removes check that would remove system decorations from
any rear positioned display, regardless if desktop mode
is being forced or not.
Fixes: 346103150
Test: Enable "Force desktop mode", then start rear display
presentation. Observe no crash
Change-Id: I0ced425aad2bffd4db1021aa60f4969ad3f2c1bb
diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig
index 87ede4a..0a4762d 100644
--- a/core/java/android/window/flags/windowing_sdk.aconfig
+++ b/core/java/android/window/flags/windowing_sdk.aconfig
@@ -180,3 +180,14 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ namespace: "windowing_sdk"
+ name: "rear_display_disable_force_desktop_system_decorations"
+ description: "Block system decorations from being added to a rear display when desktop mode is forced"
+ bug: "346103150"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a3a6b51..87ee5d8 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -5719,15 +5719,21 @@
* @see Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS
*/
boolean supportsSystemDecorations() {
+ boolean forceDesktopModeOnDisplay = forceDesktopMode();
+
+ if (com.android.window.flags.Flags.rearDisplayDisableForceDesktopSystemDecorations()) {
+ // System decorations should not be forced on a rear display due to security policies.
+ forceDesktopModeOnDisplay =
+ forceDesktopModeOnDisplay && ((mDisplay.getFlags() & Display.FLAG_REAR) == 0);
+ }
+
return (mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
|| (mDisplay.getFlags() & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0
- || forceDesktopMode())
+ || forceDesktopModeOnDisplay)
// VR virtual display will be used to run and render 2D app within a VR experience.
&& mDisplayId != mWmService.mVr2dDisplayId
// Do not show system decorations on untrusted virtual display.
- && isTrusted()
- // No system decoration on rear display.
- && (mDisplay.getFlags() & Display.FLAG_REAR) == 0;
+ && isTrusted();
}
/**