Merge "Show sharesheet with 1 personal app and >0 work apps with WP off" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-07 16:06:30 +00:00
committed by Android (Google) Code Review
5 changed files with 15 additions and 50 deletions

View File

@@ -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;

View File

@@ -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.

View File

@@ -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,

View File

@@ -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");

View File

@@ -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");