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

Commit 94fb6eff authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Only allow trusted overlays to specify FLAG_SLIPPERY" into sc-dev

parents 1e2cf259 0657e199
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -925,6 +940,8 @@ public class DisplayPolicy {
        if (mExtraNavBarAlt == win) {
            mExtraNavBarAltPosition = getAltBarPosition(attrs);
        }

        attrs.flags = sanitizeFlagSlippery(attrs.flags, attrs.privateFlags, win.getName());
    }

    /**
+4 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;