Do not return cross-profile intent results to a non-enabled user.

In PackageManagerService.queryIntentActivities, do not return
ResolveInfos targeting a user which is not enabled.

BUG:19578138
Change-Id: Id4e730ca8671c26f8cf077bc9c66b3dbd37be482
This commit is contained in:
Nicolas Prevot
2015-04-23 17:11:47 +01:00
committed by Nicolas Prévot
parent c4aa3c781a
commit 1c4a44e577

View File

@@ -3929,19 +3929,20 @@ public class PackageManagerService extends IPackageManager.Stub {
// Check for results that need to skip the current profile. // Check for results that need to skip the current profile.
ResolveInfo resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent, ResolveInfo resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent,
resolvedType, flags, userId); resolvedType, flags, userId);
if (resolveInfo != null) { if (resolveInfo != null && isUserEnabled(resolveInfo.targetUserId)) {
List<ResolveInfo> result = new ArrayList<ResolveInfo>(1); List<ResolveInfo> result = new ArrayList<ResolveInfo>(1);
result.add(resolveInfo); result.add(resolveInfo);
return filterIfNotPrimaryUser(result, userId); return filterIfNotPrimaryUser(result, userId);
} }
// Check for cross profile results.
resolveInfo = queryCrossProfileIntents(
matchingFilters, intent, resolvedType, flags, userId);
// Check for results in the current profile. // Check for results in the current profile.
List<ResolveInfo> result = mActivities.queryIntent( List<ResolveInfo> result = mActivities.queryIntent(
intent, resolvedType, flags, userId); intent, resolvedType, flags, userId);
if (resolveInfo != null) {
// Check for cross profile results.
resolveInfo = queryCrossProfileIntents(
matchingFilters, intent, resolvedType, flags, userId);
if (resolveInfo != null && isUserEnabled(resolveInfo.targetUserId)) {
result.add(resolveInfo); result.add(resolveInfo);
Collections.sort(result, mResolvePrioritySorter); Collections.sort(result, mResolvePrioritySorter);
} }
@@ -3962,6 +3963,16 @@ public class PackageManagerService extends IPackageManager.Stub {
} }
} }
private boolean isUserEnabled(int userId) {
long callingId = Binder.clearCallingIdentity();
try {
UserInfo userInfo = sUserManager.getUserInfo(userId);
return userInfo != null && userInfo.isEnabled();
} finally {
Binder.restoreCallingIdentity(callingId);
}
}
/** /**
* Filter out activities with primaryUserOnly flag set, when current user is not the owner. * Filter out activities with primaryUserOnly flag set, when current user is not the owner.
* *