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

Commit def4868b authored by Steve McKay's avatar Steve McKay
Browse files

Test location init with doc URI.

Make a more complete test environment.
Move GetRootDocumentTask to roots package.

Change-Id: Icb8f4c42c38c17aa97ec428ef9d46d76d2286fa7
parent 2010ff78
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.dirlist.MultiSelectManager.Selection;
import com.android.documentsui.files.LauncherActivity;
import com.android.documentsui.files.OpenUriForViewTask;
import com.android.documentsui.roots.LoadRootTask;
import com.android.documentsui.roots.RootsAccess;
import com.android.documentsui.sidebar.EjectRootTask;
@@ -53,21 +54,25 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
    protected final T mActivity;
    protected final State mState;
    protected final RootsAccess mRoots;
    protected final DocumentsAccess mDocs;
    protected final Lookup<String, Executor> mExecutors;

    public AbstractActionHandler(
            T activity,
            State state,
            RootsAccess roots,
            DocumentsAccess docs,
            Lookup<String, Executor> executors) {

        assert(activity != null);
        assert(state != null);
        assert(roots != null);
        assert(docs != null);

        mActivity = activity;
        mState = state;
        mRoots = roots;
        mDocs = docs;
        mExecutors = executors;
    }

@@ -137,10 +142,16 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
        throw new UnsupportedOperationException("Delete not supported!");
    }

    @Override
    public final void loadDocument(Uri uri) {
        new OpenUriForViewTask<>(mActivity, mState, mRoots, mDocs, uri)
                .executeOnExecutor(mExecutors.lookup(uri.getAuthority()));
    }

    @Override
    public final void loadRoot(Uri uri) {
        new LoadRootTask<>(mActivity, mRoots, mState, uri).executeOnExecutor(
                mExecutors.lookup(uri.getAuthority()));
        new LoadRootTask<>(mActivity, mRoots, mState, uri)
                .executeOnExecutor(mExecutors.lookup(uri.getAuthority()));
    }

    protected final void loadHomeDir() {
@@ -152,10 +163,10 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
     * from our concrete activity implementations.
     */
    public interface CommonAddons {
       void refreshCurrentRootAndDirectory(@AnimationType int anim);
       void onRootPicked(RootInfo root);
       // TODO: Move this to PickAddons.
       // TODO: Move this to PickAddons as multi-document picking is exclusive to that activity.
       void onDocumentsPicked(List<DocumentInfo> docs);
       void onDocumentPicked(DocumentInfo doc, Model model);
       void refreshCurrentRootAndDirectory(@AnimationType int anim);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ public interface ActionHandler {

    void loadRoot(Uri uri);

    void loadDocument(Uri uri);

    void openInNewWindow(DocumentStack path);

    void pasteIntoFolder(RootInfo root);
+1 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import com.android.documentsui.dirlist.FragmentTuner;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.dirlist.MultiSelectManager;
import com.android.documentsui.dirlist.MultiSelectManager.Selection;
import com.android.documentsui.roots.GetRootDocumentTask;
import com.android.documentsui.roots.RootsCache;
import com.android.documentsui.sidebar.RootsFragment;
import com.android.documentsui.sorting.SortController;
+80 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.documentsui;

import android.annotation.Nullable;
import android.content.Context;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.util.Log;

import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.RootInfo;

import java.io.FileNotFoundException;

/**
 * Provides synchronous access to {@link DocumentInfo} instances given some identifying information.
 */
public interface DocumentsAccess {

    @Nullable DocumentInfo getRootDocument(RootInfo root);
    @Nullable DocumentInfo getRootDocument(Uri uri);
    @Nullable DocumentInfo getDocument(Uri uri);

    public static DocumentsAccess create(Context context) {
        return new RuntimeDocumentAccess(context);
    }

    public final class RuntimeDocumentAccess implements DocumentsAccess {

        private static final String TAG = "DocumentAccess";

        private final Context mContext;

        private RuntimeDocumentAccess(Context context) {
            mContext = context;
        }

        @Override
        public @Nullable DocumentInfo getRootDocument(RootInfo root) {
            return getRootDocument(
                    DocumentsContract.buildDocumentUri(root.authority, root.documentId));
        }

        @Override
        public @Nullable DocumentInfo getRootDocument(Uri uri) {
            try {
                return DocumentInfo.fromUri(mContext.getContentResolver(), uri);
            } catch (FileNotFoundException e) {
                Log.w(TAG, "Failed to find root", e);
                return null;
            }
        }

        @Override
        public DocumentInfo getDocument(Uri uri) {
            try {
                return DocumentInfo.fromUri(mContext.getContentResolver(), uri);
            } catch (FileNotFoundException e) {
                Log.w(TAG, "Couldn't create DocumentInfo for uri: " + uri);
            }

            return null;
        }
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.util.Log;

import com.android.documentsui.IconUtils;
import com.android.documentsui.R;
import com.android.documentsui.roots.RootsAccess;

import java.io.DataInputStream;
import java.io.DataOutputStream;
@@ -349,8 +350,9 @@ public class RootInfo implements Durable, Parcelable, Comparable<RootInfo> {
    }

    /**
     * Gets the {@link DocumentInfo} of the root folder of this root.
     * @deprecate use {@link RootsAccess#getRootDocumentBlocking}.
     */
    @Deprecated
    public @Nullable DocumentInfo getRootDocumentBlocking(Context context) {
        try {
            final Uri uri = DocumentsContract.buildDocumentUri(authority, documentId);
Loading