diff options
author | 2016-11-04 17:49:29 -0700 | |
---|---|---|
committer | 2016-11-07 18:57:30 -0800 | |
commit | fc72617ec69f5e63c9091c47be23097a40288e2e (patch) | |
tree | 3d277430c166a03303bae6f175f83a78a690d90e | |
parent | 035939ffd22cac412a9169ef0c4325ce19f03c36 (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
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 |