Loading src/com/android/documentsui/LoadDocStackTask.java +12 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading src/com/android/documentsui/picker/ActionHandler.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading tests/common/com/android/documentsui/testing/TestDocumentsAccess.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -63,6 +65,7 @@ public class TestDocumentsAccess implements DocumentsAccess { @Override public Path findDocumentPath(Uri docUri) throws RemoteException { lastUri.accept(docUri); return nextPath; } } tests/unit/com/android/documentsui/picker/ActionHandlerTest.java +31 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading
src/com/android/documentsui/LoadDocStackTask.java +12 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
src/com/android/documentsui/picker/ActionHandler.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading
tests/common/com/android/documentsui/testing/TestDocumentsAccess.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -63,6 +65,7 @@ public class TestDocumentsAccess implements DocumentsAccess { @Override public Path findDocumentPath(Uri docUri) throws RemoteException { lastUri.accept(docUri); return nextPath; } }
tests/unit/com/android/documentsui/picker/ActionHandlerTest.java +31 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading