Merge "Show sharesheet with 1 personal app and >0 work apps with WP off" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0ed25f0cd2
@@ -55,6 +55,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
|
|||||||
private static final String TAG = "AbstractMultiProfilePagerAdapter";
|
private static final String TAG = "AbstractMultiProfilePagerAdapter";
|
||||||
static final int PROFILE_PERSONAL = 0;
|
static final int PROFILE_PERSONAL = 0;
|
||||||
static final int PROFILE_WORK = 1;
|
static final int PROFILE_WORK = 1;
|
||||||
|
|
||||||
@IntDef({PROFILE_PERSONAL, PROFILE_WORK})
|
@IntDef({PROFILE_PERSONAL, PROFILE_WORK})
|
||||||
@interface Profile {}
|
@interface Profile {}
|
||||||
|
|
||||||
@@ -365,7 +366,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
|
|||||||
UserHandle listUserHandle = listAdapter.getUserHandle();
|
UserHandle listUserHandle = listAdapter.getUserHandle();
|
||||||
if (!listUserHandle.equals(mWorkProfileUserHandle)
|
if (!listUserHandle.equals(mWorkProfileUserHandle)
|
||||||
|| !mInjector.isQuietModeEnabled(mWorkProfileUserHandle)
|
|| !mInjector.isQuietModeEnabled(mWorkProfileUserHandle)
|
||||||
|| !hasResolvedAppsInWorkProfile(listAdapter)) {
|
|| listAdapter.getCount() == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
DevicePolicyEventLogger
|
DevicePolicyEventLogger
|
||||||
@@ -382,20 +383,6 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
|
|||||||
return true;
|
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) {
|
private void maybeShowNoAppsAvailableEmptyState(ResolverListAdapter listAdapter) {
|
||||||
UserHandle listUserHandle = listAdapter.getUserHandle();
|
UserHandle listUserHandle = listAdapter.getUserHandle();
|
||||||
if (mWorkProfileUserHandle != null
|
if (mWorkProfileUserHandle != null
|
||||||
@@ -529,6 +516,13 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter {
|
|||||||
return false;
|
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 {
|
protected class ProfileDescriptor {
|
||||||
final ViewGroup rootView;
|
final ViewGroup rootView;
|
||||||
private final ViewGroup mEmptyStateView;
|
private final ViewGroup mEmptyStateView;
|
||||||
|
|||||||
@@ -994,7 +994,7 @@ public class ResolverActivity extends Activity implements
|
|||||||
if (isAutolaunching() || maybeAutolaunchActivity()) {
|
if (isAutolaunching() || maybeAutolaunchActivity()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isResolverListEmpty(listAdapter)) {
|
if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) {
|
||||||
mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter);
|
mMultiProfilePagerAdapter.showEmptyResolverListEmptyState(listAdapter);
|
||||||
} else {
|
} else {
|
||||||
mMultiProfilePagerAdapter.showListView(listAdapter);
|
mMultiProfilePagerAdapter.showListView(listAdapter);
|
||||||
@@ -1641,16 +1641,11 @@ public class ResolverActivity extends Activity implements
|
|||||||
|
|
||||||
private void setupViewVisibilities() {
|
private void setupViewVisibilities() {
|
||||||
ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter();
|
ResolverListAdapter activeListAdapter = mMultiProfilePagerAdapter.getActiveListAdapter();
|
||||||
if (!isResolverListEmpty(activeListAdapter)) {
|
if (!mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(activeListAdapter)) {
|
||||||
addUseDifferentAppLabelIfNecessary(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.
|
* Add a label to signify that the user can pick a different app.
|
||||||
* @param adapter The adapter used to provide data to item views.
|
* @param adapter The adapter used to provide data to item views.
|
||||||
|
|||||||
@@ -121,23 +121,13 @@ public class ResolverListController {
|
|||||||
List<Intent> intents,
|
List<Intent> intents,
|
||||||
UserHandle userHandle) {
|
UserHandle userHandle) {
|
||||||
int baseFlags = PackageManager.MATCH_DEFAULT_ONLY
|
int baseFlags = PackageManager.MATCH_DEFAULT_ONLY
|
||||||
|
| PackageManager.MATCH_DIRECT_BOOT_AWARE
|
||||||
|
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE
|
||||||
| (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0)
|
| (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0)
|
||||||
| (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0);
|
| (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0);
|
||||||
return getResolversForIntentAsUserInternal(intents, userHandle, baseFlags);
|
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(
|
private List<ResolverActivity.ResolvedComponentInfo> getResolversForIntentAsUserInternal(
|
||||||
List<Intent> intents,
|
List<Intent> intents,
|
||||||
UserHandle userHandle,
|
UserHandle userHandle,
|
||||||
|
|||||||
@@ -1339,15 +1339,8 @@ public class ChooserActivityTest {
|
|||||||
createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
|
createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
|
||||||
List<ResolvedComponentInfo> workResolvedComponentInfos =
|
List<ResolvedComponentInfo> workResolvedComponentInfos =
|
||||||
createResolvedComponentsForTest(workProfileTargets);
|
createResolvedComponentsForTest(workProfileTargets);
|
||||||
when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser(
|
|
||||||
Mockito.isA(List.class),
|
|
||||||
Mockito.isA(UserHandle.class)))
|
|
||||||
.thenReturn(new ArrayList<>(workResolvedComponentInfos));
|
|
||||||
sOverrides.isQuietModeEnabled = true;
|
sOverrides.isQuietModeEnabled = true;
|
||||||
// When work profile is disabled, we get 0 results when we query the work profile
|
setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
|
||||||
// intents.
|
|
||||||
setupResolverControllers(personalResolvedComponentInfos,
|
|
||||||
/* workResolvedComponentInfos */ new ArrayList<>());
|
|
||||||
Intent sendIntent = createSendTextIntent();
|
Intent sendIntent = createSendTextIntent();
|
||||||
sendIntent.setType("TestType");
|
sendIntent.setType("TestType");
|
||||||
|
|
||||||
|
|||||||
@@ -614,15 +614,8 @@ public class ResolverActivityTest {
|
|||||||
createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
|
createResolvedComponentsForTestWithOtherProfile(3, /* userId */ 10);
|
||||||
List<ResolvedComponentInfo> workResolvedComponentInfos =
|
List<ResolvedComponentInfo> workResolvedComponentInfos =
|
||||||
createResolvedComponentsForTest(workProfileTargets);
|
createResolvedComponentsForTest(workProfileTargets);
|
||||||
when(sOverrides.workResolverListController.getUserStateIndependentResolversAsUser(
|
|
||||||
Mockito.isA(List.class),
|
|
||||||
Mockito.isA(UserHandle.class)))
|
|
||||||
.thenReturn(new ArrayList<>(workResolvedComponentInfos));
|
|
||||||
sOverrides.isQuietModeEnabled = true;
|
sOverrides.isQuietModeEnabled = true;
|
||||||
// When work profile is disabled, we get 0 results when we query the work profile
|
setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
|
||||||
// intents.
|
|
||||||
setupResolverControllers(personalResolvedComponentInfos,
|
|
||||||
/* workResolvedComponentInfos */ new ArrayList<>());
|
|
||||||
Intent sendIntent = createSendImageIntent();
|
Intent sendIntent = createSendImageIntent();
|
||||||
sendIntent.setType("TestType");
|
sendIntent.setType("TestType");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user