Merge "Resolve tiles intent before prompting a dialog for profile selection"
This commit is contained in:
@@ -398,26 +398,41 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
|
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
|
||||||
|
mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
|
||||||
|
|
||||||
if (tile.userHandle == null || tile.isPrimaryProfileOnly()) {
|
if (tile.userHandle == null || tile.isPrimaryProfileOnly()) {
|
||||||
mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
|
|
||||||
activity.startActivityForResult(intent, 0);
|
activity.startActivityForResult(intent, 0);
|
||||||
} else if (tile.userHandle.size() == 1) {
|
} else if (tile.userHandle.size() == 1) {
|
||||||
mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
|
|
||||||
activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
|
activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
|
||||||
} else {
|
} else {
|
||||||
mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
|
|
||||||
final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
|
final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
|
||||||
if (userHandle != null && tile.userHandle.contains(userHandle)) {
|
if (userHandle != null && tile.userHandle.contains(userHandle)) {
|
||||||
activity.startActivityForResultAsUser(intent, 0, userHandle);
|
activity.startActivityForResultAsUser(intent, 0, userHandle);
|
||||||
} else {
|
return;
|
||||||
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile,
|
|
||||||
sourceMetricCategory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final List<UserHandle> resolvableUsers = getResolvableUsers(intent, tile);
|
||||||
|
if (resolvableUsers.size() == 1) {
|
||||||
|
activity.startActivityForResultAsUser(intent, 0, resolvableUsers.get(0));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile,
|
||||||
|
sourceMetricCategory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isIntentResolvable(Intent intent) {
|
private boolean isIntentResolvable(Intent intent) {
|
||||||
return mPackageManager.resolveActivity(intent, 0) != null;
|
return mPackageManager.resolveActivity(intent, 0) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<UserHandle> getResolvableUsers(Intent intent, Tile tile) {
|
||||||
|
final ArrayList<UserHandle> eligibleUsers = new ArrayList<>();
|
||||||
|
for (UserHandle user : tile.userHandle) {
|
||||||
|
if (mPackageManager.resolveActivityAsUser(intent, 0, user.getIdentifier()) != null) {
|
||||||
|
eligibleUsers.add(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return eligibleUsers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -583,4 +583,28 @@ public class DashboardFeatureProviderImplTest {
|
|||||||
.startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
|
.startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
|
||||||
verify(mActivity).getSupportFragmentManager();
|
verify(mActivity).getSupportFragmentManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void openTileIntent_profileSelectionDialog_unresolvableWorkProfileIntentShouldNotShow() {
|
||||||
|
final int userId = 10;
|
||||||
|
ShadowUserManager.getShadow().addUser(userId, "Someone", 0);
|
||||||
|
final UserHandle userHandle = new UserHandle(userId);
|
||||||
|
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||||
|
final ArrayList<UserHandle> handles = new ArrayList<>();
|
||||||
|
handles.add(new UserHandle(0));
|
||||||
|
handles.add(userHandle);
|
||||||
|
tile.userHandle = handles;
|
||||||
|
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), eq(0)))
|
||||||
|
.thenReturn(new ResolveInfo());
|
||||||
|
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), eq(userId)))
|
||||||
|
.thenReturn(null);
|
||||||
|
|
||||||
|
mImpl.openTileIntent(mActivity, tile);
|
||||||
|
|
||||||
|
final ArgumentCaptor<UserHandle> argument = ArgumentCaptor.forClass(UserHandle.class);
|
||||||
|
verify(mActivity)
|
||||||
|
.startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture());
|
||||||
|
assertThat(argument.getValue().getIdentifier()).isEqualTo(0);
|
||||||
|
verify(mActivity, never()).getSupportFragmentManager();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user