diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PermissionsState.java | 3 |
2 files changed, 7 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 56406caeeaf6..2ebb9f6ace58 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3217,10 +3217,11 @@ public class PackageManagerService extends IPackageManager.Stub { final PermissionsState permissionsState = ps.getPermissionsState(); // Compute GIDs only if requested - final int[] gids = (flags & PackageManager.GET_GIDS) != 0 - ? permissionsState.computeGids(userId) : EMPTY_INT_ARRAY; - // TODO b/29879962 Calculate granted permissions only if needed in generatePackageInfo - final Set<String> permissions = permissionsState.getPermissions(userId); + final int[] gids = (flags & PackageManager.GET_GIDS) == 0 + ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId); + // Compute granted permissions only if package has requested permissions + final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions) + ? Collections.<String>emptySet() : permissionsState.getPermissions(userId); final PackageUserState state = ps.readUserState(userId); return PackageParser.generatePackageInfo(p, gids, flags, diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java index 007b73814256..8f9968ecf7fd 100644 --- a/services/core/java/com/android/server/pm/PermissionsState.java +++ b/services/core/java/com/android/server/pm/PermissionsState.java @@ -274,7 +274,7 @@ public final class PermissionsState { return Collections.emptySet(); } - Set<String> permissions = new ArraySet<>(); + Set<String> permissions = new ArraySet<>(mPermissions.size()); final int permissionCount = mPermissions.size(); for (int i = 0; i < permissionCount; i++) { @@ -282,6 +282,7 @@ public final class PermissionsState { if (hasInstallPermission(permission)) { permissions.add(permission); + continue; } if (userId != UserHandle.USER_ALL) { |