summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Garfield Tan <xutan@google.com> 2016-11-04 17:49:29 -0700
committer Garfield Tan <xutan@google.com> 2016-11-07 18:57:30 -0800
commitfc72617ec69f5e63c9091c47be23097a40288e2e (patch)
tree3d277430c166a03303bae6f175f83a78a690d90e
parent035939ffd22cac412a9169ef0c4325ce19f03c36 (diff)
Use the new extra to get the initial location.
Also fix some bugs around that and add respective tests. Bug: 32648422 Change-Id: I9bba32979c7dda4edc7a694efd0ae5b9f272dcc7
-rw-r--r--src/com/android/documentsui/LoadDocStackTask.java14
-rw-r--r--src/com/android/documentsui/picker/ActionHandler.java5
-rw-r--r--tests/common/com/android/documentsui/testing/TestDocumentsAccess.java3
-rw-r--r--tests/unit/com/android/documentsui/picker/ActionHandlerTest.java33
4 files changed, 50 insertions, 5 deletions
diff --git a/src/com/android/documentsui/LoadDocStackTask.java b/src/com/android/documentsui/LoadDocStackTask.java
index 626b4ffd5..712f5e164 100644
--- a/src/com/android/documentsui/LoadDocStackTask.java
+++ b/src/com/android/documentsui/LoadDocStackTask.java
@@ -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) {
diff --git a/src/com/android/documentsui/picker/ActionHandler.java b/src/com/android/documentsui/picker/ActionHandler.java
index 19993810f..45e4cb20c 100644
--- a/src/com/android/documentsui/picker/ActionHandler.java
+++ b/src/com/android/documentsui/picker/ActionHandler.java
@@ -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();
diff --git a/tests/common/com/android/documentsui/testing/TestDocumentsAccess.java b/tests/common/com/android/documentsui/testing/TestDocumentsAccess.java
index cb8da3045..890af2421 100644
--- a/tests/common/com/android/documentsui/testing/TestDocumentsAccess.java
+++ b/tests/common/com/android/documentsui/testing/TestDocumentsAccess.java
@@ -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;
}
}
diff --git a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
index 5e26cd8c6..da9a05c57 100644
--- a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
@@ -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