Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfcaaa59 authored by Chilun's avatar Chilun Committed by android-build-merger
Browse files

Merge "Prohibit showing system decorations on untrusted virtual displays" into qt-dev

am: 56c006f5

Change-Id: I13dba660dc3f6c743f12e40a66454db9a8eaf188
parents 1daa3db7 56c006f5
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -4941,11 +4941,19 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
    boolean supportsSystemDecorations() {
    boolean supportsSystemDecorations() {
        return (mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
        return (mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
                || (mDisplay.getFlags() & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0
                || (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.
                // VR virtual display will be used to run and render 2D app within a VR experience.
                && mDisplayId != mWmService.mVr2dDisplayId;
                && 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
     * Re-parent the DisplayContent's top surfaces, {@link #mWindowingLayer} and
     * {@link #mOverlayLayer} to the specified SurfaceControl.
     * {@link #mOverlayLayer} to the specified SurfaceControl.
+2 −13
Original line number Original line Diff line number Diff line
@@ -35,7 +35,6 @@ import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS;
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.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_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.DOCKED_INVALID;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
@@ -164,7 +163,6 @@ import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerManager.ServiceType;
import android.os.PowerManagerInternal;
import android.os.PowerManagerInternal;
import android.os.PowerSaveState;
import android.os.PowerSaveState;
import android.os.Process;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.ServiceManager;
@@ -6925,21 +6923,13 @@ public class WindowManagerService extends IWindowManager.Stub
                        + "not exist: " + displayId);
                        + "not exist: " + displayId);
                return false;
                return false;
            }
            }
            final Display display = displayContent.getDisplay();
            if (displayContent.isUntrustedVirtualDisplay()) {
            if (isUntrustedVirtualDisplay(display)) {
                return false;
                return false;
            }
            }
            return displayContent.supportsSystemDecorations();
            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
    @Override
    public void setShouldShowSystemDecors(int displayId, boolean shouldShow) {
    public void setShouldShowSystemDecors(int displayId, boolean shouldShow) {
        if (!checkCallingPermission(INTERNAL_SYSTEM_WINDOW, "setShouldShowSystemDecors()")) {
        if (!checkCallingPermission(INTERNAL_SYSTEM_WINDOW, "setShouldShowSystemDecors()")) {
@@ -6973,8 +6963,7 @@ public class WindowManagerService extends IWindowManager.Stub
                        + displayId);
                        + displayId);
                return false;
                return false;
            }
            }
            final Display display = displayContent.getDisplay();
            if (displayContent.isUntrustedVirtualDisplay()) {
            if (isUntrustedVirtualDisplay(display)) {
                return false;
                return false;
            }
            }
            return mDisplayWindowSettings.shouldShowImeLocked(displayContent)
            return mDisplayWindowSettings.shouldShowImeLocked(displayContent)