Loading src/com/android/documentsui/DragAndDropManager.java +8 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -240,6 +241,7 @@ public interface DragAndDropManager { && !doc.isMoveSupported()) { mMustBeCopied = true; } containsFilesInArchive |= doc.isInArchive(); } mClipData = (parent == null) ? mClipper.getClipDataForDocuments(uris, FileOperationService.OPERATION_UNKNOWN) Loading @@ -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) { Loading tests/unit/com/android/documentsui/DragAndDropManagerTests.java +16 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -125,6 +127,7 @@ public class DragAndDropManagerTests { assertSame(mShadowBuilder, builder); assertNotNull(localState); mFlagListener.accept(flag); mStartDragListener.accept(clipData); } Loading Loading @@ -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( Loading Loading
src/com/android/documentsui/DragAndDropManager.java +8 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -240,6 +241,7 @@ public interface DragAndDropManager { && !doc.isMoveSupported()) { mMustBeCopied = true; } containsFilesInArchive |= doc.isInArchive(); } mClipData = (parent == null) ? mClipper.getClipDataForDocuments(uris, FileOperationService.OPERATION_UNKNOWN) Loading @@ -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) { Loading
tests/unit/com/android/documentsui/DragAndDropManagerTests.java +16 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -125,6 +127,7 @@ public class DragAndDropManagerTests { assertSame(mShadowBuilder, builder); assertNotNull(localState); mFlagListener.accept(flag); mStartDragListener.accept(clipData); } Loading Loading @@ -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( Loading