Loading services/core/java/com/android/server/wm/DisplayPolicy.java +17 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; Loading Loading @@ -845,6 +846,20 @@ public class DisplayPolicy { == PackageManager.PERMISSION_GRANTED; } /** * Only trusted overlays are allowed to use FLAG_SLIPPERY. */ static int sanitizeFlagSlippery(int flags, int privateFlags, String name) { if ((flags & FLAG_SLIPPERY) == 0) { return flags; } if ((privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) != 0) { return flags; } Slog.w(TAG, "Removing FLAG_SLIPPERY for non-trusted overlay " + name); return flags & ~FLAG_SLIPPERY; } /** * Sanitize the layout parameters coming from a client. Allows the policy * to do things like ensure that windows of a specific type can't take Loading Loading @@ -925,6 +940,8 @@ public class DisplayPolicy { if (mExtraNavBarAlt == win) { mExtraNavBarAltPosition = getAltBarPosition(attrs); } attrs.flags = sanitizeFlagSlippery(attrs.flags, attrs.privateFlags, win.getName()); } /** Loading services/core/java/com/android/server/wm/WindowManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY; import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL; import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE; import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; Loading Loading @@ -8215,8 +8216,10 @@ public class WindowManagerService extends IWindowManager.Stub h.token = channelToken; h.name = name; flags = DisplayPolicy.sanitizeFlagSlippery(flags, privateFlags, name); final int sanitizedFlags = flags & (LayoutParams.FLAG_NOT_TOUCHABLE | LayoutParams.FLAG_SLIPPERY | LayoutParams.FLAG_NOT_FOCUSABLE); | FLAG_SLIPPERY | LayoutParams.FLAG_NOT_FOCUSABLE); h.layoutParamsFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | sanitizedFlags; h.layoutParamsType = type; h.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; Loading Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +17 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; Loading Loading @@ -845,6 +846,20 @@ public class DisplayPolicy { == PackageManager.PERMISSION_GRANTED; } /** * Only trusted overlays are allowed to use FLAG_SLIPPERY. */ static int sanitizeFlagSlippery(int flags, int privateFlags, String name) { if ((flags & FLAG_SLIPPERY) == 0) { return flags; } if ((privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) != 0) { return flags; } Slog.w(TAG, "Removing FLAG_SLIPPERY for non-trusted overlay " + name); return flags & ~FLAG_SLIPPERY; } /** * Sanitize the layout parameters coming from a client. Allows the policy * to do things like ensure that windows of a specific type can't take Loading Loading @@ -925,6 +940,8 @@ public class DisplayPolicy { if (mExtraNavBarAlt == win) { mExtraNavBarAltPosition = getAltBarPosition(attrs); } attrs.flags = sanitizeFlagSlippery(attrs.flags, attrs.privateFlags, win.getName()); } /** Loading
services/core/java/com/android/server/wm/WindowManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY; import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL; import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE; import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; Loading Loading @@ -8215,8 +8216,10 @@ public class WindowManagerService extends IWindowManager.Stub h.token = channelToken; h.name = name; flags = DisplayPolicy.sanitizeFlagSlippery(flags, privateFlags, name); final int sanitizedFlags = flags & (LayoutParams.FLAG_NOT_TOUCHABLE | LayoutParams.FLAG_SLIPPERY | LayoutParams.FLAG_NOT_FOCUSABLE); | FLAG_SLIPPERY | LayoutParams.FLAG_NOT_FOCUSABLE); h.layoutParamsFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | sanitizedFlags; h.layoutParamsType = type; h.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; Loading