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

Commit b23a757a authored by Vladislav Kaznacheev's avatar Vladislav Kaznacheev
Browse files

Bind DropPermissions life cycle to Activity

Move requestDropPermissions from DragEvent to Activity.
Permissions will be granted using UriPermissionOwner
 associated with this activity and revoked when the activity
 is destroyed (if DropPermissions.release is not called before that).

Change-Id: Ic8f8fc3f56f57e83b9bc34ae8c96d82c2c9c4e1d
parent 43551a2a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3504,6 +3504,7 @@ package android.app {
    method public boolean releaseInstance();
    method public final deprecated void removeDialog(int);
    method public void reportFullyDrawn();
    method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
    method public final void requestPermissions(java.lang.String[], int);
    method public boolean requestVisibleBehind(boolean);
    method public final boolean requestWindowFeature(int);
@@ -39604,7 +39605,6 @@ package android.view {
    method public boolean getResult();
    method public float getX();
    method public float getY();
    method public android.view.DropPermissions requestDropPermissions();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_DRAG_ENDED = 4; // 0x4
    field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
+1 −1
Original line number Diff line number Diff line
@@ -3609,6 +3609,7 @@ package android.app {
    method public boolean releaseInstance();
    method public final deprecated void removeDialog(int);
    method public void reportFullyDrawn();
    method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
    method public final void requestPermissions(java.lang.String[], int);
    method public boolean requestVisibleBehind(boolean);
    method public final boolean requestWindowFeature(int);
@@ -41958,7 +41959,6 @@ package android.view {
    method public boolean getResult();
    method public float getX();
    method public float getY();
    method public android.view.DropPermissions requestDropPermissions();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_DRAG_ENDED = 4; // 0x4
    field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
+1 −1
Original line number Diff line number Diff line
@@ -3504,6 +3504,7 @@ package android.app {
    method public boolean releaseInstance();
    method public final deprecated void removeDialog(int);
    method public void reportFullyDrawn();
    method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
    method public final void requestPermissions(java.lang.String[], int);
    method public boolean requestVisibleBehind(boolean);
    method public final boolean requestWindowFeature(int);
@@ -39607,7 +39608,6 @@ package android.view {
    method public boolean getResult();
    method public float getX();
    method public float getY();
    method public android.view.DropPermissions requestDropPermissions();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ACTION_DRAG_ENDED = 4; // 0x4
    field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
+17 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import android.transition.Scene;
import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.util.SuperNotCalledException;
import android.view.DragEvent;
import android.view.DropPermissions;
import android.view.Window.WindowControllerCallback;
import android.widget.Toolbar;

@@ -6336,6 +6338,21 @@ public class Activity extends ContextThemeWrapper
        mActivityTransitionState.startPostponedEnterTransition();
    }

    /**
     * Create {@link DropPermissions} object bound to this activity and controlling the access
     * permissions for content URIs associated with the {@link DragEvent}.
     * @param event Drag event
     * @return The DropPermissions object used to control access to the content URIs. Null if
     * no content URIs are associated with the event or if permissions could not be granted.
     */
    public DropPermissions requestDropPermissions(DragEvent event) {
        DropPermissions dropPermissions = DropPermissions.obtain(event);
        if (dropPermissions != null && dropPermissions.take(getActivityToken())) {
            return dropPermissions;
        }
        return null;
    }

    // ------------------ Internal API ------------------

    final void setParent(Activity parent) {
+22 −0
Original line number Diff line number Diff line
@@ -1845,6 +1845,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            return true;
        }

        case GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            IBinder activityToken = data.readStrongBinder();
            IBinder perm = getUriPermissionOwnerForActivity(activityToken);
            reply.writeNoException();
            reply.writeStrongBinder(perm);
            return true;
        }

        case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            IBinder owner = data.readStrongBinder();
@@ -5121,6 +5130,19 @@ class ActivityManagerProxy implements IActivityManager
        return res;
    }

    public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeStrongBinder(activityToken);
        mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
        reply.readException();
        IBinder res = reply.readStrongBinder();
        data.recycle();
        reply.recycle();
        return res;
    }

    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
            Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
        Parcel data = Parcel.obtain();
Loading