Merge "Prohibit showing system decorations on untrusted virtual displays" into qt-dev
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 652f7ee..7a26f7c 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -4941,12 +4941,20 @@
     boolean supportsSystemDecorations() {
         return (mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
                 || (mDisplay.getFlags() & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0
-                || mWmService.mForceDesktopModeOnExternalDisplays)
+                || (mWmService.mForceDesktopModeOnExternalDisplays && !isUntrustedVirtualDisplay()))
                 // VR virtual display will be used to run and render 2D app within a VR experience.
                 && mDisplayId != mWmService.mVr2dDisplayId;
     }
 
     /**
+     * @return {@code true} if the display is non-system created virtual display.
+     */
+    boolean isUntrustedVirtualDisplay() {
+        return mDisplay.getType() == Display.TYPE_VIRTUAL
+                && mDisplay.getOwnerUid() != Process.SYSTEM_UID;
+    }
+
+    /**
      * Re-parent the DisplayContent's top surfaces, {@link #mWindowingLayer} and
      * {@link #mOverlayLayer} to the specified SurfaceControl.
      *
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 7ac887e..eac7716 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -35,7 +35,6 @@
 import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
-import static android.view.Display.TYPE_VIRTUAL;
 import static android.view.WindowManager.DOCKED_INVALID;
 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
@@ -164,7 +163,6 @@
 import android.os.PowerManager.ServiceType;
 import android.os.PowerManagerInternal;
 import android.os.PowerSaveState;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
@@ -6925,21 +6923,13 @@
                         + "not exist: " + displayId);
                 return false;
             }
-            final Display display = displayContent.getDisplay();
-            if (isUntrustedVirtualDisplay(display)) {
+            if (displayContent.isUntrustedVirtualDisplay()) {
                 return false;
             }
             return displayContent.supportsSystemDecorations();
         }
     }
 
-    /**
-     * @return {@code true} if the display is non-system created virtual display.
-     */
-    private static boolean isUntrustedVirtualDisplay(Display display) {
-        return display.getType() == TYPE_VIRTUAL && display.getOwnerUid() != Process.SYSTEM_UID;
-    }
-
     @Override
     public void setShouldShowSystemDecors(int displayId, boolean shouldShow) {
         if (!checkCallingPermission(INTERNAL_SYSTEM_WINDOW, "setShouldShowSystemDecors()")) {
@@ -6973,8 +6963,7 @@
                         + displayId);
                 return false;
             }
-            final Display display = displayContent.getDisplay();
-            if (isUntrustedVirtualDisplay(display)) {
+            if (displayContent.isUntrustedVirtualDisplay()) {
                 return false;
             }
             return mDisplayWindowSettings.shouldShowImeLocked(displayContent)