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

Commit 86ae0a16 authored by Ben Lin's avatar Ben Lin Committed by android-build-merger
Browse files

Merge "Passing SelectionDetails to DragAndDropManager." into arc-apps

am: 24192aa2

Change-Id: I8e1be31e00fa17f7acd85dd664cefec2da0c9a64
parents 9a212d79 24192aa2
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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;
@@ -78,6 +79,7 @@ public interface DragAndDropManager {
            List<DocumentInfo> srcs,
            RootInfo root,
            List<Uri> invalidDest,
            SelectionDetails selectionDetails,
            IconHelper iconHelper,
            @Nullable DocumentInfo parent);

@@ -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)
@@ -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;
            }
+2 −0
Original line number Diff line number Diff line
@@ -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();
+1 −0
Original line number Diff line number Diff line
@@ -364,6 +364,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
                        mIconHelper,
                        mModel,
                        mSelectionMgr,
                        mSelectionMetadata,
                        mState,
                        this::getModelId,
                        mRecView::findChildViewUnder,
+8 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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,
@@ -86,6 +89,7 @@ interface DragStartListener {
            mIconHelper = iconHelper;
            mState = state;
            mSelectionMgr = selectionMgr;
            mSelectionDetails = selectionDetails;
            mViewFinder = viewFinder;
            mIdFinder = idFinder;
            mDocsConverter = docsConverter;
@@ -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;
        }
@@ -168,6 +172,7 @@ interface DragStartListener {
            IconHelper iconHelper,
            Model model,
            SelectionManager selectionMgr,
            SelectionDetails selectionDetails,
            State state,
            Function<View, String> idFinder,
            ViewFinder viewFinder,
@@ -177,6 +182,7 @@ interface DragStartListener {
                iconHelper,
                state,
                selectionMgr,
                selectionDetails,
                viewFinder,
                idFinder,
                model::getDocuments,
+8 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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) {
@@ -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