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

Commit 2c1b8930 authored by Garfield Tan's avatar Garfield Tan Committed by android-build-merger
Browse files

Use the new extra to get the initial location.

am: fc72617e

Change-Id: Ica6d524e7c6358a556efa02c1614a63bab7145de
parents d4ecb2de fc72617e
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.documentsui;
import android.annotation.Nullable;
import android.app.Activity;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Path;
import android.util.Log;

@@ -60,8 +61,17 @@ public class LoadDocStackTask extends PairedTask<Activity, Uri, DocumentStack> {

    @Override
    public @Nullable DocumentStack run(Uri... uris) {
        final Uri docUri = uris[0];
        if (Shared.ENABLE_OMC_API_FEATURES && mDocs.isDocumentUri(docUri)) {
        if (Shared.ENABLE_OMC_API_FEATURES && mDocs.isDocumentUri(uris[0])) {
            final Uri docUri;
            if (DocumentsContract.isTreeUri(uris[0])) {
                // Reconstruct tree URI into a plain document URI so that we can get the full path
                // to the root.
                final String docId = DocumentsContract.getDocumentId(uris[0]);
                docUri = DocumentsContract.buildDocumentUri(uris[0].getAuthority(), docId);
            } else {
                docUri = uris[0];
            }

            try {
                final Path path = mDocs.findDocumentPath(docUri);
                if (path != null) {
+4 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.app.Activity;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.Settings;
import android.util.Log;

@@ -39,6 +40,7 @@ import com.android.documentsui.base.MimeTypes;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.FocusHandler;
import com.android.documentsui.dirlist.Model;
@@ -121,7 +123,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
    }

    private boolean launchToDocument(Intent intent) {
        final Uri uri = intent.getData();
        final Uri uri = intent.getParcelableExtra(DocumentsContract.EXTRA_INITIAL_URI);
        if (uri != null) {
            loadDocument(uri, this::onStackLoaded);
            return true;
@@ -138,6 +140,7 @@ class ActionHandler<T extends Activity & Addons> extends AbstractActionHandler<T
                stack.pop();
            }
            mState.stack.reset(stack);
            mActivity.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
        } else {
            Log.w(TAG, "Failed to launch into the given uri. Load last accessed stack.");
            loadLastAccessedStack();
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ public class TestDocumentsAccess implements DocumentsAccess {
    public boolean nextIsDocumentsUri;
    public @Nullable Path nextPath;

    public TestEventHandler<Uri> lastUri = new TestEventHandler<>();

    @Override
    public DocumentInfo getRootDocument(RootInfo root) {
        return nextRootDocument;
@@ -63,6 +65,7 @@ public class TestDocumentsAccess implements DocumentsAccess {

    @Override
    public Path findDocumentPath(Uri docUri) throws RemoteException {
        lastUri.accept(docUri);
        return nextPath;
    }
}
+31 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNotNull;

import android.content.Intent;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Path;
import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
@@ -140,12 +141,40 @@ public class ActionHandlerTest {
        mEnv.docs.nextDocuments =
                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF);

        mActivity.refreshCurrentRootAndDirectory.assertNotCalled();
        Intent intent = mActivity.getIntent();
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setData(TestEnv.FILE_GIF.derivedUri);
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, TestEnv.FILE_GIF.derivedUri);
        mHandler.initLocation(intent);

        assertStackEquals(TestRootsAccess.HOME, Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
        mActivity.refreshCurrentRootAndDirectory.assertCalled();
    }

    @Test
    public void testInitLocation_LaunchToDocuments_convertsTreeUriToDocumentUri() throws Exception {
        mEnv.docs.nextIsDocumentsUri = true;
        mEnv.docs.nextPath = new Path(
                TestRootsAccess.HOME.rootId,
                Arrays.asList(
                        TestEnv.FOLDER_0.documentId,
                        TestEnv.FOLDER_1.documentId,
                        TestEnv.FILE_GIF.documentId));
        mEnv.docs.nextDocuments =
                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF);

        Intent intent = mActivity.getIntent();
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        final Uri treeBaseUri = DocumentsContract.buildTreeDocumentUri(
                TestRootsAccess.HOME.authority, TestEnv.FOLDER_0.documentId);
        final Uri treeDocUri = DocumentsContract.buildDocumentUriUsingTree(
                treeBaseUri, TestEnv.FILE_GIF.documentId);
        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, treeDocUri);
        mHandler.initLocation(intent);

        assertStackEquals(TestRootsAccess.HOME, Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
        mEnv.docs.lastUri.assertLastArgument(TestEnv.FILE_GIF.derivedUri);
        mActivity.refreshCurrentRootAndDirectory.assertCalled();
    }

    @Test