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

Commit fc72617e authored by Garfield Tan's avatar Garfield Tan
Browse files

Use the new extra to get the initial location.

Also fix some bugs around that and add respective tests.

Bug: 32648422

Change-Id: I9bba32979c7dda4edc7a694efd0ae5b9f272dcc7
parent 035939ff
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