summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java9
-rw-r--r--services/core/java/com/android/server/pm/PermissionsState.java3
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) {