Merge "Only allow trusted overlays to specify FLAG_SLIPPERY" into sc-dev am: 94fb6eff68
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15748730 Change-Id: I7302147f409fbf99c346848ecf6b6805440cdf98
This commit is contained in:
@@ -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_IN_SCREEN;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
|
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_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_ALWAYS;
|
||||||
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
|
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;
|
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
|
||||||
@@ -847,6 +848,20 @@ public class DisplayPolicy {
|
|||||||
== PackageManager.PERMISSION_GRANTED;
|
== 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
|
* 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
|
* to do things like ensure that windows of a specific type can't take
|
||||||
@@ -927,6 +942,8 @@ public class DisplayPolicy {
|
|||||||
if (mExtraNavBarAlt == win) {
|
if (mExtraNavBarAlt == win) {
|
||||||
mExtraNavBarAltPosition = getAltBarPosition(attrs);
|
mExtraNavBarAltPosition = getAltBarPosition(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attrs.flags = sanitizeFlagSlippery(attrs.flags, attrs.privateFlags, win.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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_SECURE;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
|
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_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.INPUT_FEATURE_NO_INPUT_CHANNEL;
|
||||||
import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
|
import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
|
||||||
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
|
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
|
||||||
@@ -8223,8 +8224,10 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
h.token = channelToken;
|
h.token = channelToken;
|
||||||
h.name = name;
|
h.name = name;
|
||||||
|
|
||||||
|
flags = DisplayPolicy.sanitizeFlagSlippery(flags, privateFlags, name);
|
||||||
|
|
||||||
final int sanitizedFlags = flags & (LayoutParams.FLAG_NOT_TOUCHABLE
|
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.layoutParamsFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | sanitizedFlags;
|
||||||
h.layoutParamsType = type;
|
h.layoutParamsType = type;
|
||||||
h.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
|
h.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
|
||||||
|
|||||||
Reference in New Issue
Block a user