10f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay/* 20f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * Copyright (C) 2016 The Android Open Source Project 30f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * 40f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 50f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * you may not use this file except in compliance with the License. 60f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * You may obtain a copy of the License at 70f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * 80f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * http://www.apache.org/licenses/LICENSE-2.0 90f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * 100f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * Unless required by applicable law or agreed to in writing, software 110f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * distributed under the License is distributed on an "AS IS" BASIS, 120f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * See the License for the specific language governing permissions and 140f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay * limitations under the License. 150f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay */ 160f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 170f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKaypackage com.android.documentsui.picker; 180f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 19894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport static junit.framework.Assert.assertTrue; 20894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 210f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport static org.junit.Assert.assertEquals; 220f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport static org.junit.Assert.assertNotNull; 230f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 24894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport android.app.Activity; 25894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport android.content.ClipData; 260f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport android.content.Intent; 270f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport android.net.Uri; 28894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport android.os.AsyncTask; 29fc72617ec69f5e63c9091c47be23097a40288e2eGarfield Tanimport android.provider.DocumentsContract; 302a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tanimport android.provider.DocumentsContract.Path; 310f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport android.support.test.filters.MediumTest; 320f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport android.support.test.runner.AndroidJUnit4; 330f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 34800300826ebb50f5a26393bc966c27fa26e9a16fBen Linimport com.android.documentsui.AbstractActionHandler; 350f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport com.android.documentsui.R; 36894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport com.android.documentsui.base.DocumentStack; 370f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport com.android.documentsui.base.RootInfo; 380f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport com.android.documentsui.base.Shared; 39ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tanimport com.android.documentsui.base.State; 40ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tanimport com.android.documentsui.base.State.ActionType; 41f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tanimport com.android.documentsui.testing.DocumentStackAsserts; 420f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport com.android.documentsui.testing.TestEnv; 439bd4099ee27f8302a06fc66980079f29127318f8Jon Mannimport com.android.documentsui.testing.TestProvidersAccess; 4423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport com.android.documentsui.testing.TestLastAccessedStorage; 45800300826ebb50f5a26393bc966c27fa26e9a16fBen Linimport com.android.documentsui.testing.TestResolveInfo; 460f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 47894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tanimport org.junit.AfterClass; 480f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport org.junit.Before; 490f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport org.junit.Test; 500f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKayimport org.junit.runner.RunWith; 510f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 522a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tanimport java.util.Arrays; 532a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan 540f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay@RunWith(AndroidJUnit4.class) 550f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay@MediumTest 560f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKaypublic class ActionHandlerTest { 570f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 580f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay private TestEnv mEnv; 590f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay private TestActivity mActivity; 600f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay private ActionHandler<TestActivity> mHandler; 6123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan private TestLastAccessedStorage mLastAccessed; 620f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 630f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay @Before 640f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay public void setUp() { 650f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mEnv = TestEnv.create(); 66e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan mActivity = TestActivity.create(mEnv); 672e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan mEnv.providers.configurePm(mActivity.packageMgr); 6823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mLastAccessed = new TestLastAccessedStorage(); 690f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 700f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mHandler = new ActionHandler<>( 710f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mActivity, 720f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mEnv.state, 732e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan mEnv.providers, 740f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mEnv.docs, 7563bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan mEnv.searchViewManager, 760f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mEnv::lookupExecutor, 7723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mEnv.injector, 7823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mLastAccessed 7923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan ); 800f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 81894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.dialogs.confirmNext(); 820f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 835b0a2c187a9e446b683687817d22cbe443585223Steve McKay mEnv.selectionMgr.toggleSelection("1"); 84894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 85894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan AsyncTask.setDefaultExecutor(mEnv.mExecutor); 86894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 87894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 88894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @AfterClass 89894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public static void tearDownOnce() { 90894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 910f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay } 920f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 930f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay @Test 945f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan public void testInitLocation_RestoresIfStackIsLoaded() throws Exception { 955f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mEnv.state.stack.changeRoot(TestProvidersAccess.DOWNLOADS); 965f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_0); 975f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan 985f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mHandler.initLocation(mActivity.getIntent()); 995f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mActivity.restoreRootAndDirectory.assertCalled(); 1005f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan } 1015f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan 1025f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan @Test 1035f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan public void testInitLocation_LoadsRootDocIfStackOnlyHasRoot() throws Exception { 1045f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mEnv.state.stack.changeRoot(TestProvidersAccess.HAMMY); 1055f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan 1065f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan mHandler.initLocation(mActivity.getIntent()); 1075f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan assertRootPicked(TestProvidersAccess.HAMMY.getUri()); 1085f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan } 1095f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan 1105f2a9babb845129fd9595f6265cda84b30c795c5Garfield Tan @Test 1110f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay public void testInitLocation_CopyDestination_DefaultsToDownloads() throws Exception { 112317d65f8153822981ac08b944abde72a7db20104Steve McKay mActivity.resources.bools.put(R.bool.show_documents_root, false); 1130f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 1140f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay Intent intent = mActivity.getIntent(); 1150f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay intent.setAction(Shared.ACTION_PICK_COPY_DESTINATION); 1160f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mHandler.initLocation(mActivity.getIntent()); 1179bd4099ee27f8302a06fc66980079f29127318f8Jon Mann assertRootPicked(TestProvidersAccess.DOWNLOADS.getUri()); 1180f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay } 1190f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 1200f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay @Test 121317d65f8153822981ac08b944abde72a7db20104Steve McKay public void testInitLocation_CopyDestination_DocumentsRootEnabled() throws Exception { 122317d65f8153822981ac08b944abde72a7db20104Steve McKay mActivity.resources.bools.put(R.bool.show_documents_root, true); 123dbf09882377b4752fe45b1e2282fcbac4dcee60bBen Lin mActivity.resources.strings.put(R.string.default_root_uri, TestProvidersAccess.HOME.getUri().toString()); 1240f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 1250f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay Intent intent = mActivity.getIntent(); 1260f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay intent.setAction(Shared.ACTION_PICK_COPY_DESTINATION); 1270f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mHandler.initLocation(intent); 1289bd4099ee27f8302a06fc66980079f29127318f8Jon Mann assertRootPicked(TestProvidersAccess.HOME.getUri()); 1290f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay } 1300f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 13163bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan @Test 1322a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan public void testInitLocation_LaunchToDocuments() throws Exception { 1337a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin if (!mEnv.features.isLaunchToDocumentEnabled()) { 1347a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin return; 1357a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin } 1367a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin 1372a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan mEnv.docs.nextIsDocumentsUri = true; 1382a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan mEnv.docs.nextPath = new Path( 1399bd4099ee27f8302a06fc66980079f29127318f8Jon Mann TestProvidersAccess.HOME.rootId, 1402a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan Arrays.asList( 1412a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan TestEnv.FOLDER_0.documentId, 1422a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan TestEnv.FOLDER_1.documentId, 1432a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan TestEnv.FILE_GIF.documentId)); 1442a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan mEnv.docs.nextDocuments = 1452a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF); 1462a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan 147fc72617ec69f5e63c9091c47be23097a40288e2eGarfield Tan mActivity.refreshCurrentRootAndDirectory.assertNotCalled(); 1482a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan Intent intent = mActivity.getIntent(); 149f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan intent.setAction(Intent.ACTION_GET_CONTENT); 150fc72617ec69f5e63c9091c47be23097a40288e2eGarfield Tan intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, TestEnv.FILE_GIF.derivedUri); 1512a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan mHandler.initLocation(intent); 1522a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan 153f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan mEnv.beforeAsserts(); 154fc72617ec69f5e63c9091c47be23097a40288e2eGarfield Tan 1559bd4099ee27f8302a06fc66980079f29127318f8Jon Mann DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME, 156f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1)); 157fc72617ec69f5e63c9091c47be23097a40288e2eGarfield Tan mActivity.refreshCurrentRootAndDirectory.assertCalled(); 1582a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan } 1592a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan 1602a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan @Test 161894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testInitLocation_RestoresLastAccessedStack() throws Exception { 162894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final DocumentStack stack = 1639bd4099ee27f8302a06fc66980079f29127318f8Jon Mann new DocumentStack(TestProvidersAccess.HAMMY, TestEnv.FOLDER_0, TestEnv.FOLDER_1); 164894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mLastAccessed.setLastAccessed(mActivity, stack); 165894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 166894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.initLocation(mActivity.getIntent()); 167894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 168894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 169894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(stack, mEnv.state.stack); 170894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.refreshCurrentRootAndDirectory.assertCalled(); 171ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 172bab25161824d80657b11ba6db6e9f0ecfc72dfbcGarfield Tan 173ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan @Test 174894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testInitLocation_DefaultToRecents_ActionGetContent() throws Exception { 175894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan testInitLocationDefaultToRecentsOnAction(State.ACTION_GET_CONTENT); 176ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 177bab25161824d80657b11ba6db6e9f0ecfc72dfbcGarfield Tan 178ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan @Test 179894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testInitLocation_DefaultToRecents_ActionOpen() throws Exception { 180894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan testInitLocationDefaultToRecentsOnAction(State.ACTION_OPEN); 181ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 182ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 183ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan @Test 184894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testInitLocation_DefaultToRecents_ActionOpenTree() throws Exception { 185894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan testInitLocationDefaultToRecentsOnAction(State.ACTION_OPEN_TREE); 186ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 187ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 188ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan @Test 189894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testInitLocation_DefaultsToDownloads_ActionCreate() throws Exception { 190894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_CREATE; 191894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.resources.bools.put(R.bool.show_documents_root, false); 192894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 193894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.refreshCurrentRootAndDirectory.assertNotCalled(); 194894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 195894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.initLocation(mActivity.getIntent()); 196894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 1979bd4099ee27f8302a06fc66980079f29127318f8Jon Mann assertRootPicked(TestProvidersAccess.DOWNLOADS.getUri()); 198bab25161824d80657b11ba6db6e9f0ecfc72dfbcGarfield Tan } 199bab25161824d80657b11ba6db6e9f0ecfc72dfbcGarfield Tan 200bab25161824d80657b11ba6db6e9f0ecfc72dfbcGarfield Tan @Test 20163bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan public void testOpenContainerDocument() { 20263bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan mHandler.openContainerDocument(TestEnv.FOLDER_0); 20363bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan 20463bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan assertEquals(TestEnv.FOLDER_0, mEnv.state.stack.peek()); 20563bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan 20663bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan mActivity.refreshCurrentRootAndDirectory.assertCalled(); 20763bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan } 20863bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan 209894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 210894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testPickDocument_SetsCorrectResultAndFinishes_ActionPickCopyDestination() 211894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan throws Exception { 212ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 213894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_PICK_COPY_DESTINATION; 2149bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 215894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 216894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_2); 217ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 218894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 219894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 220894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.pickDocument(TestEnv.FOLDER_2); 221894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 222894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 223894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 224894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 225894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 226894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 227894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 228894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, false); 229894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, false); 230894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, false); 231894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 232894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FOLDER_2.derivedUri); 233894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 234894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 235894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 236894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 237894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 238894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testPickDocument_SetsCorrectResultAndFinishes_ActionOpenTree() throws Exception { 239894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_OPEN_TREE; 2409bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 241894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 242894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_2); 243894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 244894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 245894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 246894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.pickDocument(TestEnv.FOLDER_2); 247894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 248894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 249894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 250894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 251894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 252894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 253894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 254894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 255894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, true); 256894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true); 257894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, true); 258894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, DocumentsContract.buildTreeDocumentUri( 2599bd4099ee27f8302a06fc66980079f29127318f8Jon Mann TestProvidersAccess.HOME.authority, TestEnv.FOLDER_2.documentId)); 260894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 261894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 262894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 263894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 264894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 265894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testSaveDocument_SetsCorrectResultAndFinishes() throws Exception { 266894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_CREATE; 2679bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 268894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 269894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 270894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final String mimeType = "audio/aac"; 271894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final String displayName = "foobar.m4a"; 272894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 273894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.saveDocument(mimeType, displayName, (boolean inProgress) -> {}); 274894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 275894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 276894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 277894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.docs.assertCreatedDocument(TestEnv.FOLDER_1, mimeType, displayName); 278894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Uri docUri = mEnv.docs.getLastCreatedDocumentUri(); 279894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 280894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 281894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 282894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 283894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 284894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 285894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, true); 286894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true); 287894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 288894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, docUri); 289894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 290894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 291894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 292894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 293894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 294894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testSaveDocument_ConfirmsOverwrite() { 295b9ac9cf6d8c5f9b25436df1bb90c5bf5f929cd7fGarfield Tan if (!mEnv.features.isOverwriteConfirmationEnabled()) { 296b9ac9cf6d8c5f9b25436df1bb90c5bf5f929cd7fGarfield Tan return; 297b9ac9cf6d8c5f9b25436df1bb90c5bf5f929cd7fGarfield Tan } 298b9ac9cf6d8c5f9b25436df1bb90c5bf5f929cd7fGarfield Tan 299894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_CREATE; 3009bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 301894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 302894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 303894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.saveDocument(null, TestEnv.FILE_JPG); 304894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 305894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.dialogs.assertOverwriteConfirmed(TestEnv.FILE_JPG); 306894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 307894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 308894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 309894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testFinishPicking_SetsCorrectResultAndFinishes_ActionGetContent() throws Exception { 310894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_GET_CONTENT; 3119bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 312894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 313894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 314894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 315894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 316894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.finishPicking(TestEnv.FILE_JPG.derivedUri); 317894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 318894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 319894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 320894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 321894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 322894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 323894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 324894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 325894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, false); 326894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, false); 327894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 328894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FILE_JPG.derivedUri); 329894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 330894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 331894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 332894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 333894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 334894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testFinishPicking_SetsCorrectResultAndFinishes_ActionGetContent_MultipleSelection() 335894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan throws Exception { 336894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_GET_CONTENT; 3379bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 338894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 339894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.acceptMimes = new String[] { "image/*" }; 340894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 341894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 342894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 343894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.finishPicking(TestEnv.FILE_JPG.derivedUri, TestEnv.FILE_GIF.derivedUri); 344894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 345894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 346894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 347894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 348894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 349894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 350894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 351894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 352894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, false); 353894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, false); 354894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 355894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FILE_JPG.derivedUri, TestEnv.FILE_GIF.derivedUri); 356894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 357894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 358894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 359894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 360894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 361894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testFinishPicking_SetsCorrectResultAndFinishes_ActionOpen() throws Exception { 362894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_OPEN; 3639bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 364894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 365894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 366894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 367894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 368894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.finishPicking(TestEnv.FILE_JPG.derivedUri); 369894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 370894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 371894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 372894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 373894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 374894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 375894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 376894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 377894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, true); 378894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true); 379894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 380894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FILE_JPG.derivedUri); 381894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 382894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 383894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 384894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 385894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 386894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testFinishPicking_SetsCorrectResultAndFinishes_ActionOpen_MultipleSelection() 387894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan throws Exception { 388894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_OPEN; 3899bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 390894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 391894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.acceptMimes = new String[] { "image/*" }; 392894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 393894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 394894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 395894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.finishPicking(TestEnv.FILE_JPG.derivedUri, TestEnv.FILE_GIF.derivedUri); 396894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 397894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 398894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 399894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 400894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 401894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 402894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 403894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 404894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, true); 405894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true); 406894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 407894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FILE_JPG.derivedUri, TestEnv.FILE_GIF.derivedUri); 408894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 409894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 410894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 411894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 412894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan @Test 413894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan public void testFinishPicking_SetsCorrectResultAndFinishes_ActionCreate() throws Exception { 414894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.action = State.ACTION_CREATE; 4159bd4099ee27f8302a06fc66980079f29127318f8Jon Mann mEnv.state.stack.changeRoot(TestProvidersAccess.HOME); 416894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.state.stack.push(TestEnv.FOLDER_1); 417894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 418894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertNotCalled(); 419894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 420894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.finishPicking(TestEnv.FILE_JPG.derivedUri); 421894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 422894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 423894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 424894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertLastAccessedStackUpdated(); 425894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 426894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 427894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan final Intent result = mActivity.setResult.getLastValue().second; 428894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_READ_URI_PERMISSION, true); 429894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, true); 430894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION, true); 431894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertPermission(result, Intent.FLAG_GRANT_PREFIX_URI_PERMISSION, false); 432894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertContent(result, TestEnv.FILE_JPG.derivedUri); 433894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 434894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.finishedHandler.assertCalled(); 435ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 436ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 437800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin @Test 438800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin public void testOnAppPickedResult_OnOK() throws Exception { 439800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin Intent intent = new Intent(); 440800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mHandler.onActivityResult(AbstractActionHandler.CODE_FORWARD, Activity.RESULT_OK, intent); 441800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.finishedHandler.assertCalled(); 442800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.setResult.assertCalled(); 443800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin 444800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin assertEquals(Activity.RESULT_OK, (long) mActivity.setResult.getLastValue().first); 445800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin assertEquals(intent, mActivity.setResult.getLastValue().second); 446800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin } 447800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin 448800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin @Test 449800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin public void testOnAppPickedResult_OnNotOK() throws Exception { 450800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin Intent intent = new Intent(); 451800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mHandler.onActivityResult(0, Activity.RESULT_OK, intent); 452800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.finishedHandler.assertNotCalled(); 453800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.setResult.assertNotCalled(); 454800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin 455800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mHandler.onActivityResult(AbstractActionHandler.CODE_FORWARD, Activity.RESULT_CANCELED, 456800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin intent); 457800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.finishedHandler.assertNotCalled(); 458800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mActivity.setResult.assertNotCalled(); 459800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin } 460800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin 461800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin @Test 462800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin public void testOpenAppRoot() throws Exception { 463800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin mHandler.openRoot(TestResolveInfo.create()); 464800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin assertEquals((long) mActivity.startActivityForResult.getLastValue().second, 465800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin AbstractActionHandler.CODE_FORWARD); 466800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin assertNotNull(mActivity.startActivityForResult.getLastValue().first); 467800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin } 468800300826ebb50f5a26393bc966c27fa26e9a16fBen Lin 469894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan private void testInitLocationDefaultToRecentsOnAction(@ActionType int action) 470ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan throws Exception { 471ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan mEnv.state.action = action; 472894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 473ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan mActivity.refreshCurrentRootAndDirectory.assertNotCalled(); 474ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 475894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mHandler.initLocation(mActivity.getIntent()); 476ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 477894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mEnv.beforeAsserts(); 4789bd4099ee27f8302a06fc66980079f29127318f8Jon Mann assertEquals(TestProvidersAccess.RECENTS, mEnv.state.stack.getRoot()); 479894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan mActivity.refreshCurrentRootAndDirectory.assertCalled(); 480ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan } 481ae9375844c27ee532c4a3c73d9d2297884933c1eGarfield Tan 4820f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay private void assertRootPicked(Uri expectedUri) throws Exception { 4830f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mEnv.beforeAsserts(); 4840f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay 4850f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay mActivity.rootPicked.assertCalled(); 4860f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay RootInfo root = mActivity.rootPicked.getLastValue(); 4870f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay assertNotNull(root); 4880f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay assertEquals(expectedUri, root.getUri()); 4890f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay } 490894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 491894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan private void assertLastAccessedStackUpdated() { 4922e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan assertEquals(mEnv.state.stack, mLastAccessed.getLastAccessed( 4932e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan mActivity, mEnv.providers, mEnv.state)); 494894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 495894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 496894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan private void assertPermission(Intent intent, int permission, boolean granted) { 497894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan int flags = intent.getFlags(); 498894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 499894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan if (granted) { 500894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(permission, flags & permission); 501894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } else { 502894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(0, flags & permission); 503894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 504894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 505894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 506894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan private void assertContent(Intent intent, Uri... contents) { 507894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan if (contents.length == 1) { 508894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(contents[0], intent.getData()); 509894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } else { 510894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan ClipData clipData = intent.getClipData(); 511894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan 512894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertNotNull(clipData); 513894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan for (int i = 0; i < mEnv.state.acceptMimes.length; ++i) { 514894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(mEnv.state.acceptMimes[i], clipData.getDescription().getMimeType(i)); 515894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 516894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan for (int i = 0; i < contents.length; ++i) { 517894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan assertEquals(contents[i], clipData.getItemAt(i).getUri()); 518894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 519894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 520894d487698ff5c7052f499602fb74ad89f1d2d15Garfield Tan } 5210f5ec83eeee1d68f344c036cdff0c31ff68e6ee8Steve McKay} 522