diff options
| author | 2023-09-14 21:03:22 +0000 | |
|---|---|---|
| committer | 2023-09-14 21:03:22 +0000 | |
| commit | 71d131441ed5e2a5f4285d9d39b995df091bde2a (patch) | |
| tree | 18d4c1b26e5ad28fc34e9769a009330be56f082c /java/tests | |
| parent | 63cd47c3db33a2901aed2e14f6de8be9997014d9 (diff) | |
| parent | 500df2ce5d4c36934a347aeaed5435e4d136453e (diff) | |
Merge "Switch activities to AnnotatedUserHandles fully" into main
Diffstat (limited to 'java/tests')
6 files changed, 134 insertions, 141 deletions
diff --git a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java index d77aa099..b1424849 100644 --- a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java +++ b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java @@ -65,9 +65,7 @@ public class ChooserActivityOverrideData { public ImageLoader imageLoader; public int alternateProfileSetting; public Resources resources; - public UserHandle workProfileUserHandle; - public UserHandle cloneProfileUserHandle; - public UserHandle tabOwnerUserHandleForLaunch; + public AnnotatedUserHandles annotatedUserHandles; public boolean hasCrossProfileIntents; public boolean isQuietModeEnabled; public Integer myUserId; @@ -86,9 +84,11 @@ public class ChooserActivityOverrideData { workResolverListController = mock(ChooserActivity.ChooserListController.class); alternateProfileSetting = 0; resources = null; - workProfileUserHandle = null; - cloneProfileUserHandle = null; - tabOwnerUserHandleForLaunch = null; + annotatedUserHandles = AnnotatedUserHandles.newBuilder() + .setUserIdOfCallingApp(1234) // Must be non-negative. + .setUserHandleSharesheetLaunchedAs(UserHandle.SYSTEM) + .setPersonalProfileUserHandle(UserHandle.SYSTEM) + .build(); hasCrossProfileIntents = true; isQuietModeEnabled = false; myUserId = null; diff --git a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java index 27b7037f..fbc99a3a 100644 --- a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java +++ b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java @@ -237,8 +237,8 @@ public class ChooserWrapperActivity extends ChooserActivity implements IChooserW } @Override - protected UserHandle getWorkProfileUserHandle() { - return sOverrides.workProfileUserHandle; + protected AnnotatedUserHandles computeAnnotatedUserHandles() { + return sOverrides.annotatedUserHandles; } @Override @@ -247,14 +247,6 @@ public class ChooserWrapperActivity extends ChooserActivity implements IChooserW } @Override - protected UserHandle getTabOwnerUserHandleForLaunch() { - if (sOverrides.tabOwnerUserHandleForLaunch == null) { - return super.getTabOwnerUserHandleForLaunch(); - } - return sOverrides.tabOwnerUserHandleForLaunch; - } - - @Override public Context createContextAsUser(UserHandle user, int flags) { // return the current context as a work profile doesn't really exist in these tests return this; diff --git a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java index 7233fd3d..1ce1b3b0 100644 --- a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java +++ b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java @@ -77,6 +77,9 @@ public class ResolverActivityTest { private static final UserHandle PERSONAL_USER_HANDLE = androidx.test.platform.app .InstrumentationRegistry.getInstrumentation().getTargetContext().getUser(); + private static final UserHandle WORK_PROFILE_USER_HANDLE = UserHandle.of(10); + private static final UserHandle CLONE_PROFILE_USER_HANDLE = UserHandle.of(11); + protected Intent getConcreteIntentForLaunch(Intent clientIntent) { clientIntent.setClass( androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().getTargetContext(), @@ -238,9 +241,9 @@ public class ResolverActivityTest { List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10, PERSONAL_USER_HANDLE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); ResolveInfo toChoose = personalResolvedComponentInfos.get(1).getResolveInfoAt(0); @@ -350,7 +353,7 @@ public class ResolverActivityTest { @Test public void testWorkTab_displayedWhenWorkProfileUserAvailable() { Intent sendIntent = createSendImageIntent(); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); mActivityRule.launchActivity(sendIntent); waitForIdle(); @@ -373,9 +376,9 @@ public class ResolverActivityTest { List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId = */ 10, PERSONAL_USER_HANDLE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, new ArrayList<>(workResolvedComponentInfos)); Intent sendIntent = createSendImageIntent(); @@ -393,12 +396,12 @@ public class ResolverActivityTest { List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10, PERSONAL_USER_HANDLE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent); waitForIdle(); @@ -412,9 +415,9 @@ public class ResolverActivityTest { public void testWorkTab_personalTabUsesExpectedAdapter() { List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, PERSONAL_USER_HANDLE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -428,12 +431,12 @@ public class ResolverActivityTest { @Test public void testWorkTab_workProfileHasExpectedNumberOfTargets() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -448,12 +451,12 @@ public class ResolverActivityTest { @Test public void testWorkTab_selectingWorkTabAppOpensAppInWorkProfile() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); ResolveInfo[] chosen = new ResolveInfo[1]; @@ -480,11 +483,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_noPersonalApps_workTabHasExpectedNumberOfTargets() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(1, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -499,11 +502,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_headerIsVisibleInPersonalTab() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(1, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createOpenWebsiteIntent(); @@ -517,11 +520,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_switchTabs_headerStaysSame() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(1, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createOpenWebsiteIntent(); @@ -543,12 +546,12 @@ public class ResolverActivityTest { @Test public void testWorkTab_noPersonalApps_canStartWorkApps() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId= */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); ResolveInfo[] chosen = new ResolveInfo[1]; @@ -576,14 +579,13 @@ public class ResolverActivityTest { @Test public void testWorkTab_crossProfileIntentsDisabled_personalToWork_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(workProfileTargets, - sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(workProfileTargets, WORK_PROFILE_USER_HANDLE); sOverrides.hasCrossProfileIntents = false; setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -602,14 +604,13 @@ public class ResolverActivityTest { @Test public void testWorkTab_workProfileDisabled_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(workProfileTargets, - sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(workProfileTargets, WORK_PROFILE_USER_HANDLE); sOverrides.isQuietModeEnabled = true; setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -628,11 +629,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_noWorkAppsAvailable_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(0, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(0, WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); @@ -650,11 +651,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_xProfileOff_noAppsAvailable_workOff_xProfileOffEmptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(0, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(0, WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); @@ -674,11 +675,11 @@ public class ResolverActivityTest { @Test public void testMiniResolver() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(1, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(1, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(1, WORK_PROFILE_USER_HANDLE); // Personal profile only has a browser personalResolvedComponentInfos.get(0).getResolveInfoAt(0).handleAllWebDataURI = true; setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); @@ -692,11 +693,11 @@ public class ResolverActivityTest { @Test public void testMiniResolver_noCurrentProfileTarget() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(0, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(1, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(1, WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); @@ -720,11 +721,11 @@ public class ResolverActivityTest { @Test public void testWorkTab_noAppsAvailable_workOff_noAppsAvailableEmptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(0, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(0, WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); @@ -743,14 +744,13 @@ public class ResolverActivityTest { @Test public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_doesNotAutoLaunch() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10, PERSONAL_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(workProfileTargets, - sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(workProfileTargets, WORK_PROFILE_USER_HANDLE); sOverrides.hasCrossProfileIntents = false; setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -769,7 +769,7 @@ public class ResolverActivityTest { @Test public void testLayoutWithDefault_withWorkTab_neverShown() throws RemoteException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); // In this case we prefer the other profile and don't display anything about the last // chosen activity. @@ -794,54 +794,53 @@ public class ResolverActivityTest { @Test public void testClonedProfilePresent_personalAdapterIsSetWithPersonalProfile() { // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ false, /* cloneAvailable= */ true); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); setupResolverControllers(resolvedComponentInfos); Intent sendIntent = createSendImageIntent(); final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent); waitForIdle(); - assertThat(activity.getCurrentUserHandle(), is(activity.getPersonalProfileUserHandle())); + assertThat(activity.getCurrentUserHandle(), is(PERSONAL_USER_HANDLE)); assertThat(activity.getAdapter().getCount(), is(3)); } @Test public void testClonedProfilePresent_personalTabUsesExpectedAdapter() { - markWorkProfileUserAvailable(); // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ true); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4, - sOverrides.workProfileUserHandle); + WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent); waitForIdle(); - assertThat(activity.getCurrentUserHandle(), is(activity.getPersonalProfileUserHandle())); + assertThat(activity.getCurrentUserHandle(), is(PERSONAL_USER_HANDLE)); assertThat(activity.getAdapter().getCount(), is(3)); } @Test public void testClonedProfilePresent_layoutWithDefault_neverShown() throws Exception { // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ false, /* cloneAvailable= */ true); Intent sendIntent = createSendImageIntent(); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 2, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); setupResolverControllers(resolvedComponentInfos); when(sOverrides.resolverListController.getLastChosen()) @@ -859,13 +858,13 @@ public class ResolverActivityTest { @Test public void testClonedProfilePresent_alwaysButtonDisabled() throws Exception { // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ false, /* cloneAvailable= */ true); Intent sendIntent = createSendImageIntent(); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); setupResolverControllers(resolvedComponentInfos); when(sOverrides.resolverListController.getLastChosen()) @@ -892,17 +891,16 @@ public class ResolverActivityTest { @Test public void testClonedProfilePresent_personalProfileActivityIsStartedInCorrectUser() throws Exception { - markWorkProfileUserAvailable(); // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ true); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(3, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(3, WORK_PROFILE_USER_HANDLE); sOverrides.hasCrossProfileIntents = false; setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -928,17 +926,16 @@ public class ResolverActivityTest { @Test public void testClonedProfilePresent_workProfileActivityIsStartedInCorrectUser() throws Exception { - markWorkProfileUserAvailable(); // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ true); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); List<ResolvedComponentInfo> workResolvedComponentInfos = - createResolvedComponentsForTest(3, sOverrides.workProfileUserHandle); + createResolvedComponentsForTest(3, WORK_PROFILE_USER_HANDLE); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); @@ -967,12 +964,12 @@ public class ResolverActivityTest { public void testClonedProfilePresent_personalProfileResolverComparatorHasCorrectUsers() throws Exception { // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ false, /* cloneAvailable= */ true); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); setupResolverControllers(resolvedComponentInfos); Intent sendIntent = createSendImageIntent(); @@ -981,8 +978,8 @@ public class ResolverActivityTest { List<UserHandle> result = activity .getResolverRankerServiceUserHandleList(PERSONAL_USER_HANDLE); - assertThat(result.containsAll(Lists.newArrayList(PERSONAL_USER_HANDLE, - sOverrides.cloneProfileUserHandle)), is(true)); + assertThat(result.containsAll( + Lists.newArrayList(PERSONAL_USER_HANDLE, CLONE_PROFILE_USER_HANDLE)), is(true)); } private Intent createSendImageIntent() { @@ -1059,8 +1056,19 @@ public class ResolverActivityTest { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } - private void markWorkProfileUserAvailable() { - ResolverWrapperActivity.sOverrides.workProfileUserHandle = UserHandle.of(10); + private void markOtherProfileAvailability(boolean workAvailable, boolean cloneAvailable) { + AnnotatedUserHandles.Builder handles = AnnotatedUserHandles.newBuilder(); + handles + .setUserIdOfCallingApp(1234) // Must be non-negative. + .setUserHandleSharesheetLaunchedAs(PERSONAL_USER_HANDLE) + .setPersonalProfileUserHandle(PERSONAL_USER_HANDLE); + if (workAvailable) { + handles.setWorkProfileUserHandle(WORK_PROFILE_USER_HANDLE); + } + if (cloneAvailable) { + handles.setCloneProfileUserHandle(CLONE_PROFILE_USER_HANDLE); + } + sOverrides.annotatedUserHandles = handles.build(); } private void setupResolverControllers( @@ -1068,10 +1076,6 @@ public class ResolverActivityTest { setupResolverControllers(personalResolvedComponentInfos, new ArrayList<>()); } - private void markCloneProfileUserAvailable() { - ResolverWrapperActivity.sOverrides.cloneProfileUserHandle = UserHandle.of(11); - } - private void setupResolverControllers( List<ResolvedComponentInfo> personalResolvedComponentInfos, List<ResolvedComponentInfo> workResolvedComponentInfos) { diff --git a/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java b/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java index 401ede26..60180c0b 100644 --- a/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java +++ b/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java @@ -57,13 +57,6 @@ public class ResolverWrapperActivity extends ResolverActivity { super(/* isIntentPicker= */ true); } - // ResolverActivity inspects the launched-from UID at onCreate and needs to see some - // non-negative value in the test. - @Override - public int getLaunchedFromUid() { - return 1234; - } - public CountingIdlingResource getLabelIdlingResource() { return mLabelIdlingResource; } @@ -161,13 +154,8 @@ public class ResolverWrapperActivity extends ResolverActivity { } @Override - protected UserHandle getWorkProfileUserHandle() { - return sOverrides.workProfileUserHandle; - } - - @Override - protected UserHandle getCloneProfileUserHandle() { - return sOverrides.cloneProfileUserHandle; + protected AnnotatedUserHandles computeAnnotatedUserHandles() { + return sOverrides.annotatedUserHandles; } @Override @@ -193,9 +181,7 @@ public class ResolverWrapperActivity extends ResolverActivity { public ResolverListController resolverListController; public ResolverListController workResolverListController; public Boolean isVoiceInteraction; - public UserHandle workProfileUserHandle; - public UserHandle cloneProfileUserHandle; - public UserHandle tabOwnerUserHandleForLaunch; + public AnnotatedUserHandles annotatedUserHandles; public Integer myUserId; public boolean hasCrossProfileIntents; public boolean isQuietModeEnabled; @@ -208,9 +194,11 @@ public class ResolverWrapperActivity extends ResolverActivity { createPackageManager = null; resolverListController = mock(ResolverListController.class); workResolverListController = mock(ResolverListController.class); - workProfileUserHandle = null; - cloneProfileUserHandle = null; - tabOwnerUserHandleForLaunch = null; + annotatedUserHandles = AnnotatedUserHandles.newBuilder() + .setUserIdOfCallingApp(1234) // Must be non-negative. + .setUserHandleSharesheetLaunchedAs(UserHandle.SYSTEM) + .setPersonalProfileUserHandle(UserHandle.SYSTEM) + .build(); myUserId = null; hasCrossProfileIntents = true; isQuietModeEnabled = false; diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java index 9f16ced5..c0b15b6d 100644 --- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java +++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java @@ -163,6 +163,9 @@ public class UnbundledChooserActivityTest { private static final UserHandle PERSONAL_USER_HANDLE = InstrumentationRegistry .getInstrumentation().getTargetContext().getUser(); + private static final UserHandle WORK_PROFILE_USER_HANDLE = UserHandle.of(10); + private static final UserHandle CLONE_PROFILE_USER_HANDLE = UserHandle.of(11); + private static final Function<PackageManager, PackageManager> DEFAULT_PM = pm -> pm; private static final Function<PackageManager, PackageManager> NO_APP_PREDICTION_SERVICE_PM = pm -> { @@ -557,7 +560,7 @@ public class UnbundledChooserActivityTest { createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); ResolveInfo toChoose = personalResolvedComponentInfos.get(1).getResolveInfoAt(0); Intent sendIntent = createSendTextIntent(); @@ -1728,7 +1731,7 @@ public class UnbundledChooserActivityTest { // We need app targets for direct targets to get displayed List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2); setupResolverControllers(resolvedComponentInfos, resolvedComponentInfos); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); // set caller-provided target Intent chooserIntent = Intent.createChooser(createSendTextIntent(), null); @@ -1990,7 +1993,7 @@ public class UnbundledChooserActivityTest { public void testWorkTab_displayedWhenWorkProfileUserAvailable() { Intent sendIntent = createSendTextIntent(); sendIntent.setType(TEST_MIME_TYPE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test")); waitForIdle(); @@ -2022,7 +2025,7 @@ public class UnbundledChooserActivityTest { setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendTextIntent(); sendIntent.setType(TEST_MIME_TYPE); - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); final IChooserWrapper activity = (IChooserWrapper) mActivityRule.launchActivity(Intent.createChooser(sendIntent, "work tab test")); @@ -2037,7 +2040,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_workProfileHasExpectedNumberOfTargets() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); @@ -2058,7 +2061,7 @@ public class UnbundledChooserActivityTest { @Test @Ignore public void testWorkTab_selectingWorkTabAppOpensAppInWorkProfile() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); int workProfileTargets = 4; @@ -2089,7 +2092,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_crossProfileIntentsDisabled_personalToWork_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); @@ -2113,7 +2116,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_workProfileDisabled_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); @@ -2137,7 +2140,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_noWorkAppsAvailable_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3); List<ResolvedComponentInfo> workResolvedComponentInfos = @@ -2160,7 +2163,7 @@ public class UnbundledChooserActivityTest { @Ignore // b/220067877 @Test public void testWorkTab_xProfileOff_noAppsAvailable_workOff_xProfileOffEmptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3); List<ResolvedComponentInfo> workResolvedComponentInfos = @@ -2184,7 +2187,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_noAppsAvailable_workOff_noAppsAvailableEmptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3); List<ResolvedComponentInfo> workResolvedComponentInfos = @@ -2410,7 +2413,7 @@ public class UnbundledChooserActivityTest { @Test @Ignore("b/222124533") public void testSwitchProfileLogging() throws InterruptedException { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); @@ -2433,7 +2436,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_doesNotAutoLaunch() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10); @@ -2485,7 +2488,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_withInitialIntents_workTabDoesNotIncludePersonalInitialIntents() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 1; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10); @@ -2515,7 +2518,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_xProfileIntentsDisabled_personalToWork_nonSendIntent_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); @@ -2549,7 +2552,7 @@ public class UnbundledChooserActivityTest { @Test public void testWorkTab_noWorkAppsAvailable_nonSendIntent_emptyStateShown() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3); List<ResolvedComponentInfo> workResolvedComponentInfos = @@ -2610,7 +2613,7 @@ public class UnbundledChooserActivityTest { @Test public void test_query_shortcut_loader_for_the_selected_tab() { - markWorkProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ false); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = @@ -2643,12 +2646,12 @@ public class UnbundledChooserActivityTest { @Test public void testClonedProfilePresent_personalAdapterIsSetWithPersonalProfile() { // enable cloneProfile - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ false, /* cloneAvailable= */ true); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsWithCloneProfileForTest( 3, PERSONAL_USER_HANDLE, - ChooserActivityOverrideData.getInstance().cloneProfileUserHandle); + CLONE_PROFILE_USER_HANDLE); setupResolverControllers(resolvedComponentInfos); Intent sendIntent = createSendTextIntent(); @@ -2662,8 +2665,7 @@ public class UnbundledChooserActivityTest { @Test public void testClonedProfilePresent_personalTabUsesExpectedAdapter() { - markWorkProfileUserAvailable(); - markCloneProfileUserAvailable(); + markOtherProfileAvailability(/* workAvailable= */ true, /* cloneAvailable= */ true); List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTest(3); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest( @@ -2984,12 +2986,19 @@ public class UnbundledChooserActivityTest { return shortcuts; } - private void markWorkProfileUserAvailable() { - ChooserActivityOverrideData.getInstance().workProfileUserHandle = UserHandle.of(10); - } - - private void markCloneProfileUserAvailable() { - ChooserActivityOverrideData.getInstance().cloneProfileUserHandle = UserHandle.of(11); + private void markOtherProfileAvailability(boolean workAvailable, boolean cloneAvailable) { + AnnotatedUserHandles.Builder handles = AnnotatedUserHandles.newBuilder(); + handles + .setUserIdOfCallingApp(1234) // Must be non-negative. + .setUserHandleSharesheetLaunchedAs(PERSONAL_USER_HANDLE) + .setPersonalProfileUserHandle(PERSONAL_USER_HANDLE); + if (workAvailable) { + handles.setWorkProfileUserHandle(WORK_PROFILE_USER_HANDLE); + } + if (cloneAvailable) { + handles.setCloneProfileUserHandle(CLONE_PROFILE_USER_HANDLE); + } + ChooserWrapperActivity.sOverrides.annotatedUserHandles = handles.build(); } private void setupResolverControllers( diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityWorkProfileTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityWorkProfileTest.java index f0e88564..da879f74 100644 --- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityWorkProfileTest.java +++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityWorkProfileTest.java @@ -105,7 +105,6 @@ public class UnbundledChooserActivityWorkProfileTest { public void testBlocker() { setUpPersonalAndWorkComponentInfos(); sOverrides.hasCrossProfileIntents = mTestCase.hasCrossProfileIntents(); - sOverrides.tabOwnerUserHandleForLaunch = mTestCase.getMyUserHandle(); launchActivity(mTestCase.getIsSendAction()); switchToTab(mTestCase.getTab()); @@ -268,7 +267,12 @@ public class UnbundledChooserActivityWorkProfileTest { } private void setUpPersonalAndWorkComponentInfos() { - markWorkProfileUserAvailable(); + ChooserWrapperActivity.sOverrides.annotatedUserHandles = AnnotatedUserHandles.newBuilder() + .setUserIdOfCallingApp(1234) // Must be non-negative. + .setUserHandleSharesheetLaunchedAs(mTestCase.getMyUserHandle()) + .setPersonalProfileUserHandle(PERSONAL_USER_HANDLE) + .setWorkProfileUserHandle(WORK_USER_HANDLE) + .build(); int workProfileTargets = 4; List<ResolvedComponentInfo> personalResolvedComponentInfos = createResolvedComponentsForTestWithOtherProfile(3, @@ -308,10 +312,6 @@ public class UnbundledChooserActivityWorkProfileTest { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } - private void markWorkProfileUserAvailable() { - ChooserWrapperActivity.sOverrides.workProfileUserHandle = WORK_USER_HANDLE; - } - private void assertCantAccessWorkAppsBlockerDisplayed() { onView(withText(R.string.resolver_cross_profile_blocked)) .check(matches(isDisplayed())); |