Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c4a44e5 authored by Nicolas Prevot's avatar Nicolas Prevot Committed by Nicolas Prévot
Browse files

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
parent c4aa3c78
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -3929,19 +3929,20 @@ public class PackageManagerService extends IPackageManager.Stub {
                // Check for results that need to skip the current profile.
                ResolveInfo resolveInfo  = querySkipCurrentProfileIntents(matchingFilters, intent,
                        resolvedType, flags, userId);
                if (resolveInfo != null) {
                if (resolveInfo != null && isUserEnabled(resolveInfo.targetUserId)) {
                    List<ResolveInfo> result = new ArrayList<ResolveInfo>(1);
                    result.add(resolveInfo);
                    return filterIfNotPrimaryUser(result, userId);
                }
                // Check for cross profile results.
                resolveInfo = queryCrossProfileIntents(
                        matchingFilters, intent, resolvedType, flags, userId);
                // Check for results in the current profile.
                List<ResolveInfo> result = mActivities.queryIntent(
                        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);
                    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.
     *