diff options
author | 2020-02-10 23:49:21 +0000 | |
---|---|---|
committer | 2020-02-14 21:44:07 +0000 | |
commit | a34bbd9167774e796c1e3b717e1d78ae7a5cc1bb (patch) | |
tree | a3d080159c62ba05d6751d73e52d545c8d54de5f | |
parent | 28fb87ee2f4b71e3bab308d37d9975630f60263b (diff) |
startActivity with proper user and uri according to the attached userId
Now we should able to preview document across user and
return correct uri to ACTION_GET_CONTENT
Bug: 148264890
Test: manual
Test: atest DocumentsUIGoogleTests
Change-Id: I231e996244cce455a3be7a9b7569bba286da005d
18 files changed, 126 insertions, 37 deletions
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java index bee4aac5a..b18fabbaf 100644 --- a/src/com/android/documentsui/AbstractActionHandler.java +++ b/src/com/android/documentsui/AbstractActionHandler.java @@ -264,7 +264,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA } @Override - public void showAppDetails(ResolveInfo info) { + public void showAppDetails(ResolveInfo info, UserId userId) { throw new UnsupportedOperationException("Can't show app details."); } @@ -455,7 +455,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA } try { - mActivity.startActivity(intent); + doc.userId.startActivityAsUser(mActivity, intent); return true; } catch (ActivityNotFoundException e) { mDialogs.showNoApplicationFound(); @@ -479,7 +479,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA if (intent != null) { // TODO: un-work around issue b/24963914. Should be fixed soon. try { - mActivity.startActivity(intent); + doc.userId.startActivityAsUser(mActivity, intent); return true; } catch (SecurityException e) { // Carry on to regular view mode. @@ -498,7 +498,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA Intent manage = new Intent(DocumentsContract.ACTION_MANAGE_DOCUMENT); manage.setData(doc.derivedUri); try { - mActivity.startActivity(manage); + doc.userId.startActivityAsUser(mActivity, manage); return true; } catch (ActivityNotFoundException ex) { // Fall back to regular handling. diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java index a428df898..f3bd1fed9 100644 --- a/src/com/android/documentsui/ActionHandler.java +++ b/src/com/android/documentsui/ActionHandler.java @@ -30,6 +30,7 @@ import com.android.documentsui.base.BooleanConsumer; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.DocumentStack; import com.android.documentsui.base.RootInfo; +import com.android.documentsui.base.UserId; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -88,7 +89,7 @@ public interface ActionHandler { */ void startAuthentication(PendingIntent intent); - void showAppDetails(ResolveInfo info); + void showAppDetails(ResolveInfo info, UserId userId); void openRoot(RootInfo root); diff --git a/src/com/android/documentsui/UserIdManager.java b/src/com/android/documentsui/UserIdManager.java index 03fb73309..e73eda9df 100644 --- a/src/com/android/documentsui/UserIdManager.java +++ b/src/com/android/documentsui/UserIdManager.java @@ -32,6 +32,7 @@ import android.os.UserManager; import android.util.Log; import androidx.annotation.GuardedBy; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.os.BuildCompat; @@ -55,12 +56,14 @@ public interface UserIdManager { * Returns the system user from {@link #getUserIds()} if the list at least 2 users. Otherwise, * returns null. */ + @Nullable UserId getSystemUser(); /** * Returns the managed user from {@link #getUserIds()} if the list at least 2 users. Otherwise, * returns null. */ + @Nullable UserId getManagedUser(); /** @@ -148,7 +151,7 @@ public interface UserIdManager { return mManagedUser; } - public List<UserId> getUserIdsInternal() { + private List<UserId> getUserIdsInternal() { final List<UserId> result = new ArrayList<>(); result.add(mCurrentUser); diff --git a/src/com/android/documentsui/base/DocumentInfo.java b/src/com/android/documentsui/base/DocumentInfo.java index db11933d8..e1d9234f3 100644 --- a/src/com/android/documentsui/base/DocumentInfo.java +++ b/src/com/android/documentsui/base/DocumentInfo.java @@ -325,6 +325,18 @@ public class DocumentInfo implements Durable, Parcelable { return (flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0; } + /** + * Returns a document uri representing this {@link DocumentInfo}. The URI contains user + * information. Use this when uri is needed externally. For usage within DocsUI, use + * {@link #derivedUri}. + */ + public Uri getDocumentUri() { + if (UserId.CURRENT_USER.equals(userId)) { + return derivedUri; + } + return userId.buildDocumentUriAsUser(authority, documentId); + } + @Override public int hashCode() { return userId.hashCode() + derivedUri.hashCode() + mimeType.hashCode(); diff --git a/src/com/android/documentsui/base/UserId.java b/src/com/android/documentsui/base/UserId.java index 89a38d26c..1b6b3182f 100644 --- a/src/com/android/documentsui/base/UserId.java +++ b/src/com/android/documentsui/base/UserId.java @@ -20,11 +20,13 @@ import static androidx.core.util.Preconditions.checkNotNull; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; +import android.provider.DocumentsContract; import androidx.annotation.VisibleForTesting; import androidx.loader.content.CursorLoader; @@ -119,6 +121,20 @@ public final class UserId { } /** + * Returns a document uri representing this user. + */ + public Uri buildDocumentUriAsUser(String authority, String documentId) { + return DocumentsContract.buildDocumentUriAsUser(authority, documentId, mUserHandle); + } + + /** + * Starts activity for this user + */ + public void startActivityAsUser(Context context, Intent intent) { + context.startActivityAsUser(intent, mUserHandle); + } + + /** * Returns an identifier stored in this user id. This can be used to recreate the {@link UserId} * by {@link UserId#of(int)}. */ diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java index 1a504ce8a..7b17246e2 100644 --- a/src/com/android/documentsui/files/ActionHandler.java +++ b/src/com/android/documentsui/files/ActionHandler.java @@ -154,7 +154,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co Metrics.logUserAction(MetricConsts.USER_ACTION_SETTINGS); final Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_ROOT_SETTINGS); intent.setDataAndType(root.getUri(), DocumentsContract.Root.MIME_TYPE_ITEM); - mActivity.startActivity(intent); + root.userId.startActivityAsUser(mActivity, intent); } @Override @@ -289,7 +289,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(doc.derivedUri); try { - mActivity.startActivity(intent); + doc.userId.startActivityAsUser(mActivity, intent); } catch (ActivityNotFoundException e) { Log.e(TAG, "Failed to view settings in application for " + doc.derivedUri, e); mDialogs.showNoApplicationFound(); @@ -369,7 +369,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co intent = new Intent(Intent.ACTION_SEND); DocumentInfo doc = docs.get(0); intent.setType(doc.mimeType); - intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri); + intent.putExtra(Intent.EXTRA_STREAM, doc.getDocumentUri()); } else if (docs.size() > 1) { intent = new Intent(Intent.ACTION_SEND_MULTIPLE); @@ -378,7 +378,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co final ArrayList<Uri> uris = new ArrayList<>(); for (DocumentInfo doc : docs) { mimeTypes.add(doc.mimeType); - uris.add(doc.derivedUri); + uris.add(doc.getDocumentUri()); } intent.setType(MimeTypes.findCommonMimeType(mimeTypes)); @@ -546,7 +546,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co Intent intent = Intent.createChooser(buildViewIntent(doc), null); intent.putExtra(Intent.EXTRA_AUTO_LAUNCH_SINGLE_CHOICE, false); try { - mActivity.startActivity(intent); + doc.userId.startActivityAsUser(mActivity, intent); } catch (ActivityNotFoundException e) { mDialogs.showNoApplicationFound(); } diff --git a/src/com/android/documentsui/files/QuickViewIntentBuilder.java b/src/com/android/documentsui/files/QuickViewIntentBuilder.java index 236a36c97..f399a2864 100644 --- a/src/com/android/documentsui/files/QuickViewIntentBuilder.java +++ b/src/com/android/documentsui/files/QuickViewIntentBuilder.java @@ -17,8 +17,8 @@ package com.android.documentsui.files; import static com.android.documentsui.base.DocumentInfo.getCursorString; -import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.base.Shared.MAX_DOCS_IN_INTENT; +import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.content.ClipData; import android.content.ClipDescription; @@ -28,18 +28,18 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; -import android.os.Build; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; -import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; import android.util.Range; +import androidx.annotation.Nullable; + +import com.android.documentsui.Model; import com.android.documentsui.R; import com.android.documentsui.base.DebugFlags; import com.android.documentsui.base.DocumentInfo; -import com.android.documentsui.Model; import com.android.documentsui.roots.RootCursorWrapper; import java.util.ArrayList; @@ -111,7 +111,7 @@ public final class QuickViewIntentBuilder { if (!TextUtils.isEmpty(trustedPkg)) { Intent intent = new Intent(Intent.ACTION_QUICK_VIEW); - intent.setDataAndType(mDocument.derivedUri, mDocument.mimeType); + intent.setDataAndType(mDocument.getDocumentUri(), mDocument.mimeType); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.setPackage(trustedPkg); diff --git a/src/com/android/documentsui/inspector/InspectorController.java b/src/com/android/documentsui/inspector/InspectorController.java index 4a886066e..68c465dfe 100644 --- a/src/com/android/documentsui/inspector/InspectorController.java +++ b/src/com/android/documentsui/inspector/InspectorController.java @@ -269,7 +269,7 @@ public final class InspectorController { intent.setPackage(mProviders.getPackageName(userId, uri.getAuthority())); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(uri); - mContext.startActivity(intent); + userId.startActivityAsUser(mContext, intent); } /** diff --git a/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java b/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java index 441b7d4a7..447cc1885 100644 --- a/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java +++ b/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java @@ -24,7 +24,6 @@ import androidx.annotation.StringRes; import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; -import com.android.documentsui.base.UserId; import com.android.documentsui.roots.ProvidersAccess; /** @@ -68,7 +67,7 @@ public final class ShowInProviderAction extends Action { @Override public String getPackageName() { - return mProviders.getPackageName(UserId.DEFAULT_USER, mDoc.derivedUri.getAuthority()); + return mProviders.getPackageName(mDoc.userId, mDoc.derivedUri.getAuthority()); } public @StringRes int getButtonLabel() { diff --git a/src/com/android/documentsui/picker/ActionHandler.java b/src/com/android/documentsui/picker/ActionHandler.java index 554d182dc..fcc6e8945 100644 --- a/src/com/android/documentsui/picker/ActionHandler.java +++ b/src/com/android/documentsui/picker/ActionHandler.java @@ -54,6 +54,7 @@ import com.android.documentsui.base.Lookup; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; +import com.android.documentsui.base.UserId; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.picker.ActionHandler.Addons; import com.android.documentsui.queries.SearchViewManager; @@ -232,12 +233,12 @@ class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionH } @Override - public void showAppDetails(ResolveInfo info) { + public void showAppDetails(ResolveInfo info, UserId userId) { mInjector.pickResult.increaseActionCount(); final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.fromParts("package", info.activityInfo.packageName, null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - mActivity.startActivity(intent); + userId.startActivityAsUser(mActivity, intent); } @Override diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java index f7f2ebe80..3666716a9 100644 --- a/src/com/android/documentsui/picker/PickActivity.java +++ b/src/com/android/documentsui/picker/PickActivity.java @@ -361,7 +361,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { mSearchManager.recordHistory(); } else if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) { // Explicit file picked, return - mInjector.actions.finishPicking(doc.derivedUri); + mInjector.actions.finishPicking(doc.getDocumentUri()); mSearchManager.recordHistory(); } else if (mState.action == ACTION_CREATE) { // Replace selected file @@ -375,7 +375,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { final int size = docs.size(); final Uri[] uris = new Uri[size]; for (int i = 0; i < size; i++) { - uris[i] = docs.get(i).derivedUri; + uris[i] = docs.get(i).getDocumentUri(); } mInjector.actions.finishPicking(uris); mSearchManager.recordHistory(); diff --git a/src/com/android/documentsui/sidebar/AppItem.java b/src/com/android/documentsui/sidebar/AppItem.java index 0487aa02e..06fffaab1 100644 --- a/src/com/android/documentsui/sidebar/AppItem.java +++ b/src/com/android/documentsui/sidebar/AppItem.java @@ -71,7 +71,7 @@ public class AppItem extends Item { @Override boolean showAppDetails() { - mActionHandler.showAppDetails(info); + mActionHandler.showAppDetails(info, userId); return true; } diff --git a/src/com/android/documentsui/sidebar/RootAndAppItem.java b/src/com/android/documentsui/sidebar/RootAndAppItem.java index c797febbb..6630d8bbd 100644 --- a/src/com/android/documentsui/sidebar/RootAndAppItem.java +++ b/src/com/android/documentsui/sidebar/RootAndAppItem.java @@ -41,7 +41,7 @@ class RootAndAppItem extends RootItem { @Override boolean showAppDetails() { - mActionHandler.showAppDetails(resolveInfo); + mActionHandler.showAppDetails(resolveInfo, userId); return true; } diff --git a/tests/common/com/android/documentsui/TestActivity.java b/tests/common/com/android/documentsui/TestActivity.java index 103fb404b..53f0792df 100644 --- a/tests/common/com/android/documentsui/TestActivity.java +++ b/tests/common/com/android/documentsui/TestActivity.java @@ -18,9 +18,6 @@ package com.android.documentsui; import static junit.framework.Assert.assertEquals; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentActivity; - import android.app.ActivityManager; import android.app.LoaderManager; import android.content.ComponentName; @@ -31,9 +28,13 @@ import android.content.IntentSender; import android.content.pm.PackageManager; import android.content.res.Resources; import android.net.Uri; +import android.os.UserHandle; import android.test.mock.MockContentResolver; import android.util.Pair; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; + import com.android.documentsui.AbstractActionHandler.CommonAddons; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.RootInfo; @@ -57,12 +58,14 @@ public abstract class TestActivity extends AbstractBase { public TestPackageManager packageMgr; public Intent intent; public RootInfo currentRoot; + public UserHandle currentUserHandle; public MockContentResolver contentResolver; public TestLoaderManager loaderManager; public TestSupportLoaderManager supportLoaderManager; public ActivityManager activityManager; public TestEventListener<Intent> startActivity; + public TestEventListener<Pair<Intent, UserHandle>> startActivityAsUser; public TestEventListener<Intent> startService; public TestEventListener<Pair<IntentSender, Integer>> startIntentSender; public TestEventListener<RootInfo> rootPicked; @@ -82,8 +85,10 @@ public abstract class TestActivity extends AbstractBase { resources = TestResources.create(); packageMgr = TestPackageManager.create(); intent = new Intent(); + currentUserHandle = env.userHandle; startActivity = new TestEventListener<>(); + startActivityAsUser = new TestEventListener<>(); startService = new TestEventListener<>(); startIntentSender = new TestEventListener<>(); rootPicked = new TestEventListener<>(); @@ -107,10 +112,25 @@ public abstract class TestActivity extends AbstractBase { startActivity.accept(intent); } + @Override + public final void startActivityAsUser(Intent intent, UserHandle userHandle) { + if (userHandle.equals(currentUserHandle)) { + startActivity(intent); + } else { + startActivityAsUser.accept(new Pair<>(intent, userHandle)); + } + } + public final void assertActivityStarted(String expectedAction) { assertEquals(expectedAction, startActivity.getLastValue().getAction()); } + public final void assertActivityAsUserStarted(String expectedAction, UserHandle userHandle) { + Pair<Intent, UserHandle> intentUserHandle = startActivityAsUser.getLastValue(); + assertEquals(expectedAction, intentUserHandle.first.getAction()); + assertEquals(intentUserHandle.second, userHandle); + } + @Override public final ComponentName startService(Intent intent) { startService.accept(intent); diff --git a/tests/common/com/android/documentsui/testing/TestEnv.java b/tests/common/com/android/documentsui/testing/TestEnv.java index a75c0034c..b78d7316b 100644 --- a/tests/common/com/android/documentsui/testing/TestEnv.java +++ b/tests/common/com/android/documentsui/testing/TestEnv.java @@ -16,6 +16,7 @@ package com.android.documentsui.testing; import android.content.Context; +import android.os.UserHandle; import android.provider.DocumentsContract.Document; import android.test.mock.MockContentResolver; @@ -60,6 +61,10 @@ public class TestEnv { public static DocumentInfo FILE_VIRTUAL; public static DocumentInfo FILE_READ_ONLY; + public static class OtherUser { + public static DocumentInfo FILE_PNG; + } + public final TestScheduledExecutorService mExecutor; public final State state = new State(); public final TestProvidersAccess providers = new TestProvidersAccess(); @@ -72,16 +77,20 @@ public class TestEnv { public final TestSearchViewManager searchViewManager; public final Injector<?> injector; public final Features features; + public final UserId userId; + public final UserHandle userHandle; public final MockContentResolver contentResolver; public final Map<String, TestDocumentsProvider> mockProviders; - private TestEnv(Context context, Features features, String authority) { + private TestEnv(Context context, Features features, String authority, UserId userId) { this.features = features; + this.userId = userId; + userHandle = UserHandle.of(userId.getIdentifier()); state.sortModel = SortModel.createModel(); mExecutor = new TestScheduledExecutorService(); - model = new TestModel(UserId.DEFAULT_USER, authority, features); - archiveModel = new TestModel(UserId.DEFAULT_USER, ArchivesProvider.AUTHORITY, features); + model = new TestModel(userId, authority, features); + archiveModel = new TestModel(userId, ArchivesProvider.AUTHORITY, features); selectionMgr = SelectionHelpers.createTestInstance(); searchViewManager = new TestSearchViewManager(); injector = new Injector( @@ -134,7 +143,7 @@ public class TestEnv { } private static TestEnv create(Context context, Features features, String authority) { - TestEnv env = new TestEnv(context, features, authority); + TestEnv env = new TestEnv(context, features, authority, TestProvidersAccess.USER_ID); env.reset(); return env; } @@ -170,6 +179,9 @@ public class TestEnv { | Document.FLAG_SUPPORTS_DELETE | Document.FLAG_SUPPORTS_RENAME); + OtherUser.FILE_PNG = model.createFile("work.png"); + OtherUser.FILE_PNG.userId = TestProvidersAccess.OtherUser.USER_ID; + archiveModel.update(); model.update(); } diff --git a/tests/common/com/android/documentsui/testing/TestProvidersAccess.java b/tests/common/com/android/documentsui/testing/TestProvidersAccess.java index 2ebbae0e5..6d7a1aca3 100644 --- a/tests/common/com/android/documentsui/testing/TestProvidersAccess.java +++ b/tests/common/com/android/documentsui/testing/TestProvidersAccess.java @@ -15,6 +15,7 @@ */ package com.android.documentsui.testing; +import android.os.UserHandle; import android.provider.DocumentsContract.Root; import com.android.documentsui.InspectorProvider; @@ -34,6 +35,8 @@ import javax.annotation.Nullable; public class TestProvidersAccess implements ProvidersAccess { + public static final UserId USER_ID = UserId.DEFAULT_USER; + public static final RootInfo DOWNLOADS; public static final RootInfo HOME; public static final RootInfo HAMMY; @@ -48,8 +51,7 @@ public class TestProvidersAccess implements ProvidersAccess { public static final RootInfo NO_TREE_ROOT; static { - UserId userId = UserId.DEFAULT_USER; - + UserId userId = USER_ID; DOWNLOADS = new RootInfo() {{ flags = Root.FLAG_SUPPORTS_CREATE; }}; @@ -154,7 +156,9 @@ public class TestProvidersAccess implements ProvidersAccess { } public static class OtherUser { - public static final UserId USER_ID = UserId.of(UserId.DEFAULT_USER.getIdentifier() + 1); + public static final UserHandle USER_HANDLE = UserHandle.of( + TestProvidersAccess.USER_ID.getIdentifier() + 1); + public static final UserId USER_ID = UserId.of(OtherUser.USER_HANDLE); public static final RootInfo DOWNLOADS; diff --git a/tests/unit/com/android/documentsui/inspector/InspectorControllerTest.java b/tests/unit/com/android/documentsui/inspector/InspectorControllerTest.java index d35a6dedd..52d3c9061 100644 --- a/tests/unit/com/android/documentsui/inspector/InspectorControllerTest.java +++ b/tests/unit/com/android/documentsui/inspector/InspectorControllerTest.java @@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Looper; +import android.os.UserHandle; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.test.suitebuilder.annotation.SmallTest; @@ -84,8 +85,8 @@ public class InspectorControllerTest { @Before public void setUp() throws Exception { - mUserId = UserId.DEFAULT_USER; mEnv = TestEnv.create(); + mUserId = mEnv.userId; mPm = TestPackageManager.create(); mLoaderManager = new TestLoaderManager(); mDataSupplier = new TestDataSupplier(); @@ -285,7 +286,7 @@ public class InspectorControllerTest { assertTrue(strUri.contains(TestEnv.FILE_JPG.displayName)); } - private static class TestActivity extends Activity { + private class TestActivity extends Activity { private @Nullable Intent started; @@ -293,6 +294,15 @@ public class InspectorControllerTest { public void startActivity(Intent intent) { started = intent; } + + @Override + public void startActivityAsUser(Intent intent, UserHandle user) { + if (user.equals(mEnv.userHandle)) { + startActivity(intent); + return; + } + throw new UnsupportedOperationException("not implemented"); + } } private static class TestAction implements ActionDisplay { diff --git a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java index abcc6333b..57d4df7f5 100644 --- a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java +++ b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java @@ -580,6 +580,17 @@ public class ActionHandlerTest { } @Test + public void testPreviewItem_onOtherUser() throws Exception { + mActivity.resources.setQuickViewerPackage("corptropolis.viewer"); + mActivity.currentRoot = TestProvidersAccess.OtherUser.DOWNLOADS; + + mHandler.onDocumentOpened(TestEnv.OtherUser.FILE_PNG, ActionHandler.VIEW_TYPE_PREVIEW, + ActionHandler.VIEW_TYPE_REGULAR, true); + mActivity.assertActivityAsUserStarted(Intent.ACTION_QUICK_VIEW, + TestProvidersAccess.OtherUser.USER_HANDLE); + } + + @Test public void testPreviewItem_archives() throws Exception { mActivity.resources.setQuickViewerPackage("corptropolis.viewer"); mActivity.currentRoot = TestProvidersAccess.HOME; |