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

Commit 9d27f61b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add ALLOW_SLIPPERY_TOUCHES permission" into sc-dev am: 5179b1de

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16445550

Change-Id: I59032561dbbbc32fafaf5280b623604850f49700
parents de9f912d 5179b1de
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5659,6 +5659,10 @@
    <!-- Allows input events to be monitored. Very dangerous!  @hide -->
    <permission android:name="android.permission.MONITOR_INPUT"
                android:protectionLevel="signature|recents" />
    <!-- Allows the use of FLAG_SLIPPERY, which permits touch events to slip from the current
         window to the window where the touch currently is on top of.  @hide -->
    <permission android:name="android.permission.ALLOW_SLIPPERY_TOUCHES"
                android:protectionLevel="signature|recents" />
    <!--  Allows the caller to change the associations between input devices and displays.
        Very dangerous! @hide -->
    <permission android:name="android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY"
+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@
    <uses-permission android:name="android.permission.SET_ORIENTATION" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.MONITOR_INPUT" />
    <uses-permission android:name="android.permission.ALLOW_SLIPPERY_TOUCHES" />
    <uses-permission android:name="android.permission.INPUT_CONSUMER" />

    <!-- DreamManager -->
+0 −17
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ 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;
@@ -846,20 +845,6 @@ 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
@@ -940,8 +925,6 @@ public class DisplayPolicy {
        if (mExtraNavBarAlt == win) {
            mExtraNavBarAltPosition = getAltBarPosition(attrs);
        }

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

    /**
+20 −1
Original line number Diff line number Diff line
@@ -1678,6 +1678,7 @@ public class WindowManagerService extends IWindowManager.Stub

            final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy();
            displayPolicy.adjustWindowParamsLw(win, win.mAttrs);
            attrs.flags = sanitizeFlagSlippery(attrs.flags, win.getName(), callingUid, callingPid);
            win.updateRequestedVisibility(requestedVisibility);

            res = displayPolicy.validateAddingWindowLw(attrs, callingPid, callingUid);
@@ -2240,6 +2241,7 @@ public class WindowManagerService extends IWindowManager.Stub
            if (attrs != null) {
                displayPolicy.adjustWindowParamsLw(win, attrs);
                win.mToken.adjustWindowParams(win, attrs);
                attrs.flags = sanitizeFlagSlippery(attrs.flags, win.getName(), uid, pid);
                int disableFlags =
                        (attrs.systemUiVisibility | attrs.subtreeSystemUiVisibility) & DISABLE_MASK;
                if (disableFlags != 0 && !hasStatusBarPermission(pid, uid)) {
@@ -8178,6 +8180,23 @@ public class WindowManagerService extends IWindowManager.Stub
        mAtmService.setFocusedTask(task.mTaskId);
    }

    /**
     * You need ALLOW_SLIPPERY_TOUCHES permission to be able to set FLAG_SLIPPERY.
     */
    private int sanitizeFlagSlippery(int flags, String windowName, int callingUid, int callingPid) {
        if ((flags & FLAG_SLIPPERY) == 0) {
            return flags;
        }
        final int permissionResult = mContext.checkPermission(
                    android.Manifest.permission.ALLOW_SLIPPERY_TOUCHES, callingPid, callingUid);
        if (permissionResult != PackageManager.PERMISSION_GRANTED) {
            Slog.w(TAG, "Removing FLAG_SLIPPERY from '" + windowName
                    + "' because it doesn't have ALLOW_SLIPPERY_TOUCHES permission");
            return flags & ~FLAG_SLIPPERY;
        }
        return flags;
    }

    /**
     * Assigns an InputChannel to a SurfaceControl and configures it to receive
     * touch input according to it's on-screen geometry.
@@ -8216,7 +8235,7 @@ public class WindowManagerService extends IWindowManager.Stub
        h.token = channelToken;
        h.name = name;

        flags = DisplayPolicy.sanitizeFlagSlippery(flags, privateFlags, name);
        flags = sanitizeFlagSlippery(flags, name, callingUid, callingPid);

        final int sanitizedFlags = flags & (LayoutParams.FLAG_NOT_TOUCHABLE
                | FLAG_SLIPPERY | LayoutParams.FLAG_NOT_FOCUSABLE);