Loading core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +9 −15 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { private static final String TAG = "AbstractMultiProfilePagerAdapter"; static final int PROFILE_PERSONAL = 0; static final int PROFILE_WORK = 1; @IntDef({PROFILE_PERSONAL, PROFILE_WORK}) @interface Profile {} Loading Loading @@ -365,7 +366,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { UserHandle listUserHandle = listAdapter.getUserHandle(); if (!listUserHandle.equals(mWorkProfileUserHandle) || !mInjector.isQuietModeEnabled(mWorkProfileUserHandle) || !hasResolvedAppsInWorkProfile(listAdapter)) { || listAdapter.getCount() == 0) { return false; } DevicePolicyEventLogger Loading @@ -382,20 +383,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { return true; } /** * Returns {@code true} if there is at least one app resolved in the work profile, * regardless of whether the work profile is enabled or not. */ private boolean hasResolvedAppsInWorkProfile(ResolverListAdapter listAdapter) { List<ResolverActivity.ResolvedComponentInfo> userStateIndependentWorkResolvers = listAdapter.mResolverListController.getUserStateIndependentResolversAsUser( listAdapter.getIntents(), mWorkProfileUserHandle); return userStateIndependentWorkResolvers.stream() .anyMatch(resolvedComponentInfo -> resolvedComponentInfo.getResolveInfoAt(0).targetUserId == UserHandle.USER_CURRENT); } private void maybeShowNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) { UserHandle listUserHandle = listAdapter.getUserHandle(); if (mWorkProfileUserHandle != null Loading Loading @@ -529,6 +516,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { return false; } boolean shouldShowEmptyStateScreen(ResolverListAdapter listAdapter) { int count = listAdapter.getUnfilteredCount(); return (count == 0 && listAdapter.getPlaceholderCount() == 0) || (listAdapter.getUserHandle().equals(mWorkProfileUserHandle) && isQuietModeEnabled(mWorkProfileUserHandle)); } protected class ProfileDescriptor { final ViewGroup rootView; private final ViewGroup mEmptyStateView; Loading core/java/com/android/internal/app/ResolverActivity.java +2 −7 Original line number Diff line number Diff line Loading @@ -994,7 +994,7 @@ public class ResolverActivity extends Activity implements if (isAutolaunching() || maybeAutolaunchActivity()) { return; } if (isResolverListEmpty(listAdapter)) { if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) { mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter); } else { mMultiProfilePagerAdapter.showListView(listAdapter); Loading Loading @@ -1641,16 +1641,11 @@ public class ResolverActivity extends Activity implements private void setupViewVisibilities() { ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter(); if (!isResolverListEmpty(activeListAdapter)) { if (!mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(activeListAdapter)) { addUseDifferentAppLabelIfNecessary(activeListAdapter); } } private boolean isResolverListEmpty(ResolverListAdapter listAdapter) { int count = listAdapter.getUnfilteredCount(); return count == 0 && listAdapter.getPlaceholderCount() == 0; } /** * Add a label to signify that the user can pick a different app. * @param adapter The adapter used to provide data to item views. Loading core/java/com/android/internal/app/ResolverListController.java +2 −12 Original line number Diff line number Diff line Loading @@ -121,23 +121,13 @@ public class ResolverListController { List<Intent> intents, UserHandle userHandle) { int baseFlags = PackageManager.MATCH_DEFAULT_ONLY | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0) | (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0); return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags); } /** * Returns a list of resolved intents which is user state-independent. This means it will * return the same results regardless of whether the {@code userHandle} user is disabled or not. */ public List<ResolverActivity.ResolvedComponentInfo> getUserStateIndependentResolversAsUser( List<Intent> intents, UserHandle userHandle) { int baseFlags = PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE; return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags); } private List<ResolverActivity.ResolvedComponentInfo> getResolversForIntentAsUserInternal( List<Intent> intents, UserHandle userHandle, Loading core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +1 −8 Original line number Diff line number Diff line Loading @@ -1339,15 +1339,8 @@ public class ChooserActivityTest { createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(workProfileTargets); when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser( Mockito.isA(List.class), Mockito.isA(UserHandle.class))) .thenReturn(new ArrayList<>(workResolvedComponentInfos)); sOverrides.isQuietModeEnabled = true; // When work profile is disabled, we get 0 results when we query the work profile // intents. setupResolverControllers(personalResolvedComponentInfos, /* workResolvedComponentInfos */ new ArrayList<>()); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendTextIntent(); sendIntent.setType("TestType"); Loading core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java +1 −8 Original line number Diff line number Diff line Loading @@ -614,15 +614,8 @@ public class ResolverActivityTest { createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(workProfileTargets); when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser( Mockito.isA(List.class), Mockito.isA(UserHandle.class))) .thenReturn(new ArrayList<>(workResolvedComponentInfos)); sOverrides.isQuietModeEnabled = true; // When work profile is disabled, we get 0 results when we query the work profile // intents. setupResolverControllers(personalResolvedComponentInfos, /* workResolvedComponentInfos */ new ArrayList<>()); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); Loading Loading
core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +9 −15 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { private static final String TAG = "AbstractMultiProfilePagerAdapter"; static final int PROFILE_PERSONAL = 0; static final int PROFILE_WORK = 1; @IntDef({PROFILE_PERSONAL, PROFILE_WORK}) @interface Profile {} Loading Loading @@ -365,7 +366,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { UserHandle listUserHandle = listAdapter.getUserHandle(); if (!listUserHandle.equals(mWorkProfileUserHandle) || !mInjector.isQuietModeEnabled(mWorkProfileUserHandle) || !hasResolvedAppsInWorkProfile(listAdapter)) { || listAdapter.getCount() == 0) { return false; } DevicePolicyEventLogger Loading @@ -382,20 +383,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { return true; } /** * Returns {@code true} if there is at least one app resolved in the work profile, * regardless of whether the work profile is enabled or not. */ private boolean hasResolvedAppsInWorkProfile(ResolverListAdapter listAdapter) { List<ResolverActivity.ResolvedComponentInfo> userStateIndependentWorkResolvers = listAdapter.mResolverListController.getUserStateIndependentResolversAsUser( listAdapter.getIntents(), mWorkProfileUserHandle); return userStateIndependentWorkResolvers.stream() .anyMatch(resolvedComponentInfo -> resolvedComponentInfo.getResolveInfoAt(0).targetUserId == UserHandle.USER_CURRENT); } private void maybeShowNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) { UserHandle listUserHandle = listAdapter.getUserHandle(); if (mWorkProfileUserHandle != null Loading Loading @@ -529,6 +516,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { return false; } boolean shouldShowEmptyStateScreen(ResolverListAdapter listAdapter) { int count = listAdapter.getUnfilteredCount(); return (count == 0 && listAdapter.getPlaceholderCount() == 0) || (listAdapter.getUserHandle().equals(mWorkProfileUserHandle) && isQuietModeEnabled(mWorkProfileUserHandle)); } protected class ProfileDescriptor { final ViewGroup rootView; private final ViewGroup mEmptyStateView; Loading
core/java/com/android/internal/app/ResolverActivity.java +2 −7 Original line number Diff line number Diff line Loading @@ -994,7 +994,7 @@ public class ResolverActivity extends Activity implements if (isAutolaunching() || maybeAutolaunchActivity()) { return; } if (isResolverListEmpty(listAdapter)) { if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) { mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter); } else { mMultiProfilePagerAdapter.showListView(listAdapter); Loading Loading @@ -1641,16 +1641,11 @@ public class ResolverActivity extends Activity implements private void setupViewVisibilities() { ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter(); if (!isResolverListEmpty(activeListAdapter)) { if (!mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(activeListAdapter)) { addUseDifferentAppLabelIfNecessary(activeListAdapter); } } private boolean isResolverListEmpty(ResolverListAdapter listAdapter) { int count = listAdapter.getUnfilteredCount(); return count == 0 && listAdapter.getPlaceholderCount() == 0; } /** * Add a label to signify that the user can pick a different app. * @param adapter The adapter used to provide data to item views. Loading
core/java/com/android/internal/app/ResolverListController.java +2 −12 Original line number Diff line number Diff line Loading @@ -121,23 +121,13 @@ public class ResolverListController { List<Intent> intents, UserHandle userHandle) { int baseFlags = PackageManager.MATCH_DEFAULT_ONLY | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0) | (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0); return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags); } /** * Returns a list of resolved intents which is user state-independent. This means it will * return the same results regardless of whether the {@code userHandle} user is disabled or not. */ public List<ResolverActivity.ResolvedComponentInfo> getUserStateIndependentResolversAsUser( List<Intent> intents, UserHandle userHandle) { int baseFlags = PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE; return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags); } private List<ResolverActivity.ResolvedComponentInfo> getResolversForIntentAsUserInternal( List<Intent> intents, UserHandle userHandle, Loading
core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +1 −8 Original line number Diff line number Diff line Loading @@ -1339,15 +1339,8 @@ public class ChooserActivityTest { createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(workProfileTargets); when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser( Mockito.isA(List.class), Mockito.isA(UserHandle.class))) .thenReturn(new ArrayList<>(workResolvedComponentInfos)); sOverrides.isQuietModeEnabled = true; // When work profile is disabled, we get 0 results when we query the work profile // intents. setupResolverControllers(personalResolvedComponentInfos, /* workResolvedComponentInfos */ new ArrayList<>()); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendTextIntent(); sendIntent.setType("TestType"); Loading
core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java +1 −8 Original line number Diff line number Diff line Loading @@ -614,15 +614,8 @@ public class ResolverActivityTest { createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10); List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(workProfileTargets); when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser( Mockito.isA(List.class), Mockito.isA(UserHandle.class))) .thenReturn(new ArrayList<>(workResolvedComponentInfos)); sOverrides.isQuietModeEnabled = true; // When work profile is disabled, we get 0 results when we query the work profile // intents. setupResolverControllers(personalResolvedComponentInfos, /* workResolvedComponentInfos */ new ArrayList<>()); setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); Intent sendIntent = createSendImageIntent(); sendIntent.setType("TestType"); Loading