Loading src/com/android/documentsui/DragAndDropManager.java +5 −8 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.view.DragEvent; import android.view.KeyEvent; import android.view.View; import com.android.documentsui.MenuManager.SelectionDetails; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.DocumentStack; import com.android.documentsui.base.RootInfo; Loading Loading @@ -78,6 +79,7 @@ public interface DragAndDropManager { List<DocumentInfo> srcs, RootInfo root, List<Uri> invalidDest, SelectionDetails selectionDetails, IconHelper iconHelper, @Nullable DocumentInfo parent); Loading Loading @@ -226,22 +228,17 @@ public interface DragAndDropManager { List<DocumentInfo> srcs, RootInfo root, List<Uri> invalidDest, SelectionDetails selectionDetails, IconHelper iconHelper, @Nullable DocumentInfo parent) { mView = v; mInvalidDest = invalidDest; boolean containsFilesInArchive = false; mMustBeCopied = !selectionDetails.canDelete(); List<Uri> uris = new ArrayList<>(srcs.size()); for (DocumentInfo doc : srcs) { uris.add(doc.derivedUri); if (!doc.isRemoveSupported() && !doc.isDeleteSupported() && !doc.isMoveSupported()) { mMustBeCopied = true; } containsFilesInArchive |= doc.isInArchive(); } mClipData = (parent == null) ? mClipper.getClipDataForDocuments(uris, FileOperationService.OPERATION_UNKNOWN) Loading @@ -253,7 +250,7 @@ public interface DragAndDropManager { updateShadow(srcs, iconHelper); int flag = View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE; if (!containsFilesInArchive) { if (!selectionDetails.containsFilesInArchive()) { flag |= View.DRAG_FLAG_GLOBAL_URI_READ | View.DRAG_FLAG_GLOBAL_URI_WRITE; } Loading src/com/android/documentsui/MenuManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,8 @@ public abstract class MenuManager { boolean containsPartialFiles(); boolean containsFilesInArchive(); // TODO: Update these to express characteristics instead of answering concrete questions, // since the answer to those questions is (or can be) activity specific. boolean canDelete(); Loading src/com/android/documentsui/dirlist/DirectoryFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On mIconHelper, mModel, mSelectionMgr, mSelectionMetadata, mState, this::getModelId, mRecView::findChildViewUnder, Loading src/com/android/documentsui/dirlist/DragStartListener.java +8 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.util.Log; import android.view.View; import com.android.documentsui.DragAndDropManager; import com.android.documentsui.MenuManager.SelectionDetails; import com.android.documentsui.Model; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Events; Loading Loading @@ -67,6 +68,7 @@ interface DragStartListener { private final IconHelper mIconHelper; private final State mState; private final SelectionManager mSelectionMgr; private final SelectionDetails mSelectionDetails; private final ViewFinder mViewFinder; private final Function<View, String> mIdFinder; private final Function<Selection, List<DocumentInfo>> mDocsConverter; Loading @@ -78,6 +80,7 @@ interface DragStartListener { IconHelper iconHelper, State state, SelectionManager selectionMgr, SelectionDetails selectionDetails, ViewFinder viewFinder, Function<View, String> idFinder, Function<Selection, List<DocumentInfo>> docsConverter, Loading @@ -86,6 +89,7 @@ interface DragStartListener { mIconHelper = iconHelper; mState = state; mSelectionMgr = selectionMgr; mSelectionDetails = selectionDetails; mViewFinder = viewFinder; mIdFinder = idFinder; mDocsConverter = docsConverter; Loading Loading @@ -134,8 +138,8 @@ interface DragStartListener { invalidDest.add(parent.derivedUri); } mDragAndDropManager.startDrag( view, srcs, mState.stack.getRoot(), invalidDest, mIconHelper, parent); mDragAndDropManager.startDrag(view, srcs, mState.stack.getRoot(), invalidDest, mSelectionDetails, mIconHelper, parent); return true; } Loading Loading @@ -168,6 +172,7 @@ interface DragStartListener { IconHelper iconHelper, Model model, SelectionManager selectionMgr, SelectionDetails selectionDetails, State state, Function<View, String> idFinder, ViewFinder viewFinder, Loading @@ -177,6 +182,7 @@ interface DragStartListener { iconHelper, state, selectionMgr, selectionDetails, viewFinder, idFinder, model::getDocuments, Loading src/com/android/documentsui/selection/SelectionMetadata.java +8 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ public class SelectionMetadata implements MenuManager.SelectionDetails, SelectionManager.ItemCallback { private static final String TAG = "SelectionMetadata"; private final static int FLAG_CAN_DELETE = Document.FLAG_SUPPORTS_REMOVE | Document.FLAG_SUPPORTS_DELETE; private final Function<String, Cursor> mDocFinder; Loading Loading @@ -83,7 +85,7 @@ public class SelectionMetadata if ((docFlags & Document.FLAG_DIR_SUPPORTS_CREATE) != 0) { mWritableDirectoryCount += delta; } if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) { if ((docFlags & FLAG_CAN_DELETE) == 0) { mNoDeleteCount += delta; } if ((docFlags & Document.FLAG_SUPPORTS_RENAME) == 0) { Loading Loading @@ -132,6 +134,11 @@ public class SelectionMetadata return mPartialCount > 0; } @Override public boolean containsFilesInArchive() { return mInArchiveCount > 0; } @Override public boolean canDelete() { return size() > 0 && mNoDeleteCount == 0; Loading Loading
src/com/android/documentsui/DragAndDropManager.java +5 −8 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.view.DragEvent; import android.view.KeyEvent; import android.view.View; import com.android.documentsui.MenuManager.SelectionDetails; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.DocumentStack; import com.android.documentsui.base.RootInfo; Loading Loading @@ -78,6 +79,7 @@ public interface DragAndDropManager { List<DocumentInfo> srcs, RootInfo root, List<Uri> invalidDest, SelectionDetails selectionDetails, IconHelper iconHelper, @Nullable DocumentInfo parent); Loading Loading @@ -226,22 +228,17 @@ public interface DragAndDropManager { List<DocumentInfo> srcs, RootInfo root, List<Uri> invalidDest, SelectionDetails selectionDetails, IconHelper iconHelper, @Nullable DocumentInfo parent) { mView = v; mInvalidDest = invalidDest; boolean containsFilesInArchive = false; mMustBeCopied = !selectionDetails.canDelete(); List<Uri> uris = new ArrayList<>(srcs.size()); for (DocumentInfo doc : srcs) { uris.add(doc.derivedUri); if (!doc.isRemoveSupported() && !doc.isDeleteSupported() && !doc.isMoveSupported()) { mMustBeCopied = true; } containsFilesInArchive |= doc.isInArchive(); } mClipData = (parent == null) ? mClipper.getClipDataForDocuments(uris, FileOperationService.OPERATION_UNKNOWN) Loading @@ -253,7 +250,7 @@ public interface DragAndDropManager { updateShadow(srcs, iconHelper); int flag = View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE; if (!containsFilesInArchive) { if (!selectionDetails.containsFilesInArchive()) { flag |= View.DRAG_FLAG_GLOBAL_URI_READ | View.DRAG_FLAG_GLOBAL_URI_WRITE; } Loading
src/com/android/documentsui/MenuManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,8 @@ public abstract class MenuManager { boolean containsPartialFiles(); boolean containsFilesInArchive(); // TODO: Update these to express characteristics instead of answering concrete questions, // since the answer to those questions is (or can be) activity specific. boolean canDelete(); Loading
src/com/android/documentsui/dirlist/DirectoryFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On mIconHelper, mModel, mSelectionMgr, mSelectionMetadata, mState, this::getModelId, mRecView::findChildViewUnder, Loading
src/com/android/documentsui/dirlist/DragStartListener.java +8 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.util.Log; import android.view.View; import com.android.documentsui.DragAndDropManager; import com.android.documentsui.MenuManager.SelectionDetails; import com.android.documentsui.Model; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Events; Loading Loading @@ -67,6 +68,7 @@ interface DragStartListener { private final IconHelper mIconHelper; private final State mState; private final SelectionManager mSelectionMgr; private final SelectionDetails mSelectionDetails; private final ViewFinder mViewFinder; private final Function<View, String> mIdFinder; private final Function<Selection, List<DocumentInfo>> mDocsConverter; Loading @@ -78,6 +80,7 @@ interface DragStartListener { IconHelper iconHelper, State state, SelectionManager selectionMgr, SelectionDetails selectionDetails, ViewFinder viewFinder, Function<View, String> idFinder, Function<Selection, List<DocumentInfo>> docsConverter, Loading @@ -86,6 +89,7 @@ interface DragStartListener { mIconHelper = iconHelper; mState = state; mSelectionMgr = selectionMgr; mSelectionDetails = selectionDetails; mViewFinder = viewFinder; mIdFinder = idFinder; mDocsConverter = docsConverter; Loading Loading @@ -134,8 +138,8 @@ interface DragStartListener { invalidDest.add(parent.derivedUri); } mDragAndDropManager.startDrag( view, srcs, mState.stack.getRoot(), invalidDest, mIconHelper, parent); mDragAndDropManager.startDrag(view, srcs, mState.stack.getRoot(), invalidDest, mSelectionDetails, mIconHelper, parent); return true; } Loading Loading @@ -168,6 +172,7 @@ interface DragStartListener { IconHelper iconHelper, Model model, SelectionManager selectionMgr, SelectionDetails selectionDetails, State state, Function<View, String> idFinder, ViewFinder viewFinder, Loading @@ -177,6 +182,7 @@ interface DragStartListener { iconHelper, state, selectionMgr, selectionDetails, viewFinder, idFinder, model::getDocuments, Loading
src/com/android/documentsui/selection/SelectionMetadata.java +8 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ public class SelectionMetadata implements MenuManager.SelectionDetails, SelectionManager.ItemCallback { private static final String TAG = "SelectionMetadata"; private final static int FLAG_CAN_DELETE = Document.FLAG_SUPPORTS_REMOVE | Document.FLAG_SUPPORTS_DELETE; private final Function<String, Cursor> mDocFinder; Loading Loading @@ -83,7 +85,7 @@ public class SelectionMetadata if ((docFlags & Document.FLAG_DIR_SUPPORTS_CREATE) != 0) { mWritableDirectoryCount += delta; } if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) { if ((docFlags & FLAG_CAN_DELETE) == 0) { mNoDeleteCount += delta; } if ((docFlags & Document.FLAG_SUPPORTS_RENAME) == 0) { Loading Loading @@ -132,6 +134,11 @@ public class SelectionMetadata return mPartialCount > 0; } @Override public boolean containsFilesInArchive() { return mInArchiveCount > 0; } @Override public boolean canDelete() { return size() > 0 && mNoDeleteCount == 0; Loading