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

Commit 174fc2e9 authored by Ben Lin's avatar Ben Lin
Browse files

Check for droppability when dropping onto Roots.

Bug: 35673039
Change-Id: Icdeeb775504c6a1dc66d7d8a5c52310b0fbe8cc0
parent 97e21013
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;

import android.app.Activity;
import android.content.ClipData;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
@@ -29,6 +28,7 @@ import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.view.DragEvent;

import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.LoadDocStackTask.LoadDocStackCallback;
@@ -40,10 +40,9 @@ import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.DocumentsAdapter;
import com.android.documentsui.dirlist.FocusHandler;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.files.LauncherActivity;
@@ -58,7 +57,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Consumer;

import javax.annotation.Nullable;

@@ -181,7 +179,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
    }

    @Override
    public boolean dropOn(ClipData data, RootInfo root) {
    public boolean dropOn(DragEvent event, RootInfo root) {
        throw new UnsupportedOperationException("Can't open an app.");
    }

+3 −2
Original line number Diff line number Diff line
@@ -16,10 +16,11 @@

package com.android.documentsui;

import android.content.ClipData;
import android.content.ContentProvider;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.view.DragEvent;

import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.DocumentInfo;
@@ -37,7 +38,7 @@ public interface ActionHandler {
    /**
     * Drops documents on a root.
     */
    boolean dropOn(ClipData data, RootInfo root);
    boolean dropOn(DragEvent event, RootInfo root);

    /**
     * Attempts to eject the identified root. Returns a boolean answer to listener.
+13 −8
Original line number Diff line number Diff line
@@ -20,21 +20,20 @@ import static com.android.documentsui.base.Shared.DEBUG;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
import android.provider.DocumentsContract.Document;
import android.util.Log;
import android.view.DragEvent;

import com.android.documentsui.AbstractActionHandler;
import com.android.documentsui.ActionModeAddons;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.DocumentsAccess;
import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.DragAndDropHelper;
import com.android.documentsui.Injector;
import com.android.documentsui.Metrics;
import com.android.documentsui.R;
@@ -52,14 +51,12 @@ import com.android.documentsui.clipping.DocumentClipper;
import com.android.documentsui.clipping.UrisSupplier;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.FocusHandler;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.files.ActionHandler.Addons;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.roots.GetRootDocumentTask;
import com.android.documentsui.roots.RootsAccess;
import com.android.documentsui.selection.Selection;
import com.android.documentsui.selection.SelectionManager;
import com.android.documentsui.services.FileOperation;
import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.services.FileOperations;
@@ -108,17 +105,25 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
    }

    @Override
    public boolean dropOn(ClipData data, RootInfo root) {
    public boolean dropOn(DragEvent event, RootInfo root) {
        new GetRootDocumentTask(
                root,
                mActivity,
                mActivity::isDestroyed,
                (DocumentInfo doc) -> mClipper.copyFromClipData(
                        root, doc, data, mDialogs::showFileOperationStatus)
                (DocumentInfo rootDoc) -> dropOnCallback(event, rootDoc, root)
        ).executeOnExecutor(mExecutors.lookup(root.authority));
        return true;
    }

    private void dropOnCallback(DragEvent event, DocumentInfo rootDoc, RootInfo root) {
        if (!DragAndDropHelper.canCopyTo(event.getLocalState(), rootDoc)) {
            return;
        }

        mClipper.copyFromClipData(
                root, rootDoc, event.getClipData(), mDialogs::showFileOperationStatus);
    }

    @Override
    public void openSelectedInNewWindow() {
        Selection selection = getStableSelection();
+2 −4
Original line number Diff line number Diff line
@@ -17,8 +17,7 @@
package com.android.documentsui.sidebar;

import android.annotation.LayoutRes;
import android.content.ClipData;
import android.content.Context;
import android.view.DragEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -27,7 +26,6 @@ import android.view.ViewGroup;

import com.android.documentsui.MenuManager;
import com.android.documentsui.R;
import com.android.documentsui.base.CheckedTask.Check;

/**
 * Describes a root navigation point of documents. Each one of them is presented as an item in the
@@ -60,7 +58,7 @@ abstract class Item {

    abstract void open();

    boolean dropOn(ClipData data) {
    boolean dropOn(DragEvent event) {
        return false;
    }

+3 −3
Original line number Diff line number Diff line
@@ -17,11 +17,11 @@
package com.android.documentsui.sidebar;

import android.annotation.Nullable;
import android.content.ClipData;
import android.content.Context;
import android.provider.DocumentsProvider;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.DragEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
@@ -106,8 +106,8 @@ class RootItem extends Item {
    }

    @Override
    boolean dropOn(ClipData data) {
        return mActionHandler.dropOn(data, root);
    boolean dropOn(DragEvent event) {
        return mActionHandler.dropOn(event, root);
    }

    @Override
Loading