diff options
5 files changed, 15 insertions, 50 deletions
diff --git a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java index 9fc0da83c504..d43333e507a6 100644 --- a/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +++ b/core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java @@ -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 {} @@ -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 @@ -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 @@ -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; diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 35253b68aac7..fc3f20f7a556 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -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); @@ -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. diff --git a/core/java/com/android/internal/app/ResolverListController.java b/core/java/com/android/internal/app/ResolverListController.java index 3f897a5f26bf..033ac72dda4e 100644 --- a/core/java/com/android/internal/app/ResolverListController.java +++ b/core/java/com/android/internal/app/ResolverListController.java @@ -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, diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java index bc0cdc1e029b..583c75102d52 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java @@ -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"); diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java index 0bf8663c7a85..eb39d58019d9 100644 --- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java @@ -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"); |