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

Commit 53038bd2 authored by Chris Li's avatar Chris Li Committed by Automerger Merge Worker
Browse files

Merge "Fix the problem that system apps cannot drag" am: 0d6c423c am: f2633cb7 am: a78c925c

parents 1d028b06 a78c925c
Loading
Loading
Loading
Loading
+2 −9
Original line number Original line Diff line number Diff line
@@ -322,7 +322,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
        final int callingPid = Binder.getCallingPid();
        final int callingPid = Binder.getCallingPid();
        // Validate and resolve ClipDescription data before clearing the calling identity
        // Validate and resolve ClipDescription data before clearing the calling identity
        validateAndResolveDragMimeTypeExtras(data, callingUid, callingPid, mPackageName);
        validateAndResolveDragMimeTypeExtras(data, callingUid, callingPid, mPackageName);
        validateDragFlags(flags, callingUid);
        validateDragFlags(flags);
        final long ident = Binder.clearCallingIdentity();
        final long ident = Binder.clearCallingIdentity();
        try {
        try {
            return mDragDropController.performDrag(mPid, mUid, window, flags, surface, touchSource,
            return mDragDropController.performDrag(mPid, mUid, window, flags, surface, touchSource,
@@ -347,11 +347,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
     * Validates the given drag flags.
     * Validates the given drag flags.
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    void validateDragFlags(int flags, int callingUid) {
    void validateDragFlags(int flags) {
        if (callingUid == Process.SYSTEM_UID) {
            throw new IllegalStateException("Need to validate before calling identify is cleared");
        }

        if ((flags & View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION) != 0) {
        if ((flags & View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION) != 0) {
            if (!mCanStartTasksFromRecents) {
            if (!mCanStartTasksFromRecents) {
                throw new SecurityException("Requires START_TASKS_FROM_RECENTS permission");
                throw new SecurityException("Requires START_TASKS_FROM_RECENTS permission");
@@ -365,9 +361,6 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
    @VisibleForTesting
    @VisibleForTesting
    void validateAndResolveDragMimeTypeExtras(ClipData data, int callingUid, int callingPid,
    void validateAndResolveDragMimeTypeExtras(ClipData data, int callingUid, int callingPid,
            String callingPackage) {
            String callingPackage) {
        if (callingUid == Process.SYSTEM_UID) {
            throw new IllegalStateException("Need to validate before calling identify is cleared");
        }
        final ClipDescription desc = data != null ? data.getDescription() : null;
        final ClipDescription desc = data != null ? data.getDescription() : null;
        if (desc == null) {
        if (desc == null) {
            return;
            return;
+2 −4
Original line number Original line Diff line number Diff line
@@ -467,8 +467,7 @@ public class DragDropControllerTests extends WindowTestsBase {
            public void onAnimatorScaleChanged(float scale) {}
            public void onAnimatorScaleChanged(float scale) {}
        });
        });
        try {
        try {
            session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION,
            session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION);
                    TEST_UID);
            fail("Expected failure without permission");
            fail("Expected failure without permission");
        } catch (SecurityException e) {
        } catch (SecurityException e) {
            // Expected failure
            // Expected failure
@@ -484,8 +483,7 @@ public class DragDropControllerTests extends WindowTestsBase {
            public void onAnimatorScaleChanged(float scale) {}
            public void onAnimatorScaleChanged(float scale) {}
        });
        });
        try {
        try {
            session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION,
            session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION);
                    TEST_UID);
            // Expected pass
            // Expected pass
        } catch (SecurityException e) {
        } catch (SecurityException e) {
            fail("Expected no failure with permission");
            fail("Expected no failure with permission");