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

Commit 689b1f9a authored by Garfield Tan's avatar Garfield Tan Committed by android-build-merger
Browse files

Add unit tests for picker.ActionHandler.

am: 894d4876

Change-Id: I6cc7b572c6a6fb0510ff088f540cd09e9f155af2
parents db269695 894d4876
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ public interface DocumentsAccess {

    List<DocumentInfo> getDocuments(String authority, List<String> docIds) throws RemoteException;

    @Nullable Uri createDocument(DocumentInfo parentDoc, String mimeType, String displayName);

    public static DocumentsAccess create(Context context) {
        return new RuntimeDocumentAccess(context);
    }
@@ -125,5 +127,18 @@ public interface DocumentsAccess {
                return DocumentsContract.findDocumentPath(client, docUri);
            }
        }

        @Override
        public Uri createDocument(DocumentInfo parentDoc, String mimeType, String displayName) {
            final ContentResolver resolver = mContext.getContentResolver();
            try (ContentProviderClient client = DocumentsApplication.acquireUnstableProviderOrThrow(
                        resolver, parentDoc.derivedUri.getAuthority())) {
                return DocumentsContract.createDocument(
                        client, parentDoc.derivedUri, mimeType, displayName);
            } catch (Exception e) {
                Log.w(TAG, "Failed to create document", e);
                return null;
            }
        }
    }
}
+21 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import java.net.ProtocolException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

import javax.annotation.Nullable;

@@ -243,6 +244,26 @@ public class DocumentStack implements Durable, Parcelable {
        return null;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (!(o instanceof DocumentStack)) {
            return false;
        }

        DocumentStack other = (DocumentStack) o;
        return Objects.equals(mRoot, other.mRoot)
                && mList.equals(other.mList);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mRoot, mList);
    }

    @Override
    public void read(DataInputStream in) throws IOException {
        final int version = in.readInt();
+14 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.documentsui.picker;
import static com.android.documentsui.base.Shared.DEBUG;
import static com.android.documentsui.base.State.ACTION_CREATE;
import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
import static com.android.documentsui.base.State.ACTION_OPEN;
import static com.android.documentsui.base.State.ACTION_OPEN_TREE;
import static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;

@@ -155,8 +156,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
                .execute();
    }

    @VisibleForTesting
    void onLastAccessedStackLoaded(@Nullable DocumentStack stack) {
    private void onLastAccessedStackLoaded(@Nullable DocumentStack stack) {
        if (stack == null) {
            loadDefaultLocation();
        } else {
@@ -167,12 +167,11 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T

    private void loadDefaultLocation() {
        switch (mState.action) {
            case ACTION_PICK_COPY_DESTINATION:
            case State.ACTION_CREATE:
            case ACTION_CREATE:
                loadHomeDir();
                break;
            case ACTION_GET_CONTENT:
            case State.ACTION_OPEN:
            case ACTION_OPEN:
            case ACTION_OPEN_TREE:
                mState.stack.changeRoot(mRoots.getRecentsRoot());
                mActivity.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
@@ -259,6 +258,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
        assert(mState.action == ACTION_CREATE);
        new CreatePickedDocumentTask(
                mActivity,
                mDocs,
                mLastAccessed,
                mState.stack,
                mimeType,
@@ -326,12 +326,12 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
                    | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
        }

        mActivity.setResult(Activity.RESULT_OK, intent);
        mActivity.setResult(Activity.RESULT_OK, intent, 0);
        mActivity.finish();
    }

    private Executor getExecutorForCurrentDirectory() {
        final DocumentInfo cwd = mActivity.getCurrentDirectory();
        final DocumentInfo cwd = mState.stack.peek();
        if (cwd != null && cwd.authority != null) {
            return mExecutors.lookup(cwd.authority);
        } else {
@@ -342,5 +342,12 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
    public interface Addons extends CommonAddons {
        void onAppPicked(ResolveInfo info);
        void onDocumentPicked(DocumentInfo doc);

        /**
         * Overload final method {@link Activity#setResult(int, Intent)} so that we can intercept
         * this method call in test environment.
         */
        @VisibleForTesting
        void setResult(int resultCode, Intent result, int notUsed);
    }
}
+5 −15
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.provider.DocumentsContract;
import android.support.design.widget.Snackbar;
import android.util.Log;

import com.android.documentsui.DocumentsAccess;
import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.R;
import com.android.documentsui.base.BooleanConsumer;
@@ -38,9 +39,8 @@ import java.util.function.Consumer;
 * Task that creates a new document in the background.
 */
class CreatePickedDocumentTask extends PairedTask<Activity, Void, Uri> {
    private static final String TAG = "CreatePickedDocumentTas";

    private final LastAccessedStorage mLastAccessed;
    private final DocumentsAccess mDocs;
    private final DocumentStack mStack;
    private final String mMimeType;
    private final String mDisplayName;
@@ -49,6 +49,7 @@ class CreatePickedDocumentTask extends PairedTask<Activity, Void, Uri> {

    CreatePickedDocumentTask(
            Activity activity,
            DocumentsAccess docs,
            LastAccessedStorage lastAccessed,
            DocumentStack stack,
            String mimeType,
@@ -57,6 +58,7 @@ class CreatePickedDocumentTask extends PairedTask<Activity, Void, Uri> {
            Consumer<Uri> callback) {
        super(activity);
        mLastAccessed = lastAccessed;
        mDocs = docs;
        mStack = stack;
        mMimeType = mimeType;
        mDisplayName = displayName;
@@ -73,19 +75,7 @@ class CreatePickedDocumentTask extends PairedTask<Activity, Void, Uri> {
    protected Uri run(Void... params) {
        DocumentInfo cwd = mStack.peek();

        final ContentResolver resolver = mOwner.getContentResolver();
        ContentProviderClient client = null;
        Uri childUri = null;
        try {
            client = DocumentsApplication.acquireUnstableProviderOrThrow(
                    resolver, cwd.derivedUri.getAuthority());
            childUri = DocumentsContract.createDocument(
                    client, cwd.derivedUri, mMimeType, mDisplayName);
        } catch (Exception e) {
            Log.w(TAG, "Failed to create document", e);
        } finally {
            ContentProviderClient.releaseQuietly(client);
        }
        Uri childUri = mDocs.createDocument(cwd, mMimeType, mDisplayName);

        if (childUri != null) {
            mLastAccessed.setLastAccessed(mOwner, mStack);
+5 −0
Original line number Diff line number Diff line
@@ -350,6 +350,11 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
                || super.onKeyDown(keyCode, event);
    }

    @Override
    public void setResult(int resultCode, Intent intent, int notUsed) {
        setResult(resultCode, intent);
    }

    public static PickActivity get(Fragment fragment) {
        return (PickActivity) fragment.getActivity();
    }
Loading