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

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

Merge "Remove URI_READ/URI_WRITE permissions when dragging files in archives." into arc-apps

parents 121579a2 c0b6b3f1
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -231,6 +231,7 @@ public interface DragAndDropManager {

            mView = v;
            mInvalidDest = invalidDest;
            boolean containsFilesInArchive = false;

            List<Uri> uris = new ArrayList<>(srcs.size());
            for (DocumentInfo doc : srcs) {
@@ -240,6 +241,7 @@ public interface DragAndDropManager {
                        && !doc.isMoveSupported()) {
                    mMustBeCopied = true;
                }
                containsFilesInArchive |= doc.isInArchive();
            }
            mClipData = (parent == null)
                    ? mClipper.getClipDataForDocuments(uris, FileOperationService.OPERATION_UNKNOWN)
@@ -250,15 +252,17 @@ public interface DragAndDropManager {

            updateShadow(srcs, iconHelper);

            int flag = View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE;
            if (!containsFilesInArchive) {
                flag |= View.DRAG_FLAG_GLOBAL_URI_READ
                        | View.DRAG_FLAG_GLOBAL_URI_WRITE;
            }
            startDragAndDrop(
                    v,
                    mClipData,
                    mShadowBuilder,
                    this, // Used to detect multi-window drag and drop
                    View.DRAG_FLAG_GLOBAL
                            | View.DRAG_FLAG_OPAQUE
                            | View.DRAG_FLAG_GLOBAL_URI_READ
                            | View.DRAG_FLAG_GLOBAL_URI_WRITE);
                    flag);
        }

        private void updateShadow(List<DocumentInfo> srcs, IconHelper iconHelper) {
+16 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ public class DragAndDropManagerTests {

    private TestEventListener<ClipData> mStartDragListener;
    private TestEventListener<Void> mShadowUpdateListener;
    private TestEventListener<Integer> mFlagListener;

    private TestEventListener<Integer> mCallbackListener;
    private FileOperations.Callback mCallback = new FileOperations.Callback() {
@@ -115,6 +116,7 @@ public class DragAndDropManagerTests {
        mStartDragListener = new TestEventListener<>();
        mShadowUpdateListener = new TestEventListener<>();
        mCallbackListener = new TestEventListener<>();
        mFlagListener = new TestEventListener<>();

        mManager = new RuntimeDragAndDropManager(mActivity, mClipper, mShadowBuilder,
                mDefaultIcon) {
@@ -125,6 +127,7 @@ public class DragAndDropManagerTests {
                assertSame(mShadowBuilder, builder);
                assertNotNull(localState);

                mFlagListener.accept(flag);
                mStartDragListener.accept(clipData);
            }

@@ -209,6 +212,19 @@ public class DragAndDropManagerTests {
        assertFalse(mManager.canSpringOpen(TestProvidersAccess.HAMMY, TestEnv.FOLDER_2));
    }

    @Test
    public void testInArchiveUris_HasCorrectFlagPermission() {
        mManager.startDrag(
                mStartDragView,
                Arrays.asList(TestEnv.FILE_IN_ARCHIVE),
                TestProvidersAccess.HOME,
                Arrays.asList(TestEnv.FILE_ARCHIVE.derivedUri, TestEnv.FILE_IN_ARCHIVE.derivedUri),
                mIconHelper,
                TestEnv.FILE_ARCHIVE);

        mFlagListener.assertLastArgument(View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE);
    }

    @Test
    public void testCanSpringOpen_ReturnsFalse_DocIsInvalidDestination() {
        mManager.startDrag(