diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-04-22 01:43:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-22 01:43:35 +0000 |
commit | 8b625dbe7fa13e3fd15f57f015ab7afe229ce3cf (patch) | |
tree | ef7c997dcbc0927c03a6abf89f8694e4f35c6401 /services | |
parent | b32243498fcf21212268b9dff558647d9e716a1c (diff) | |
parent | 1b7025f264fd811ab27470867f8e65eeebf092e9 (diff) | |
download | frameworks_base-8b625dbe7fa13e3fd15f57f015ab7afe229ce3cf.zip frameworks_base-8b625dbe7fa13e3fd15f57f015ab7afe229ce3cf.tar.gz frameworks_base-8b625dbe7fa13e3fd15f57f015ab7afe229ce3cf.tar.bz2 |
Merge "Report all permissions by type correctly"
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/pm/PermissionsState.java | 65 |
1 files changed, 38 insertions, 27 deletions
diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java index 829ec39..688c035 100644 --- a/services/core/java/com/android/server/pm/PermissionsState.java +++ b/services/core/java/com/android/server/pm/PermissionsState.java @@ -61,6 +61,9 @@ public final class PermissionsState { private static final int[] NO_GIDS = {}; + private static final int FLAG_INSTALL_PERMISSIONS = 1 << 0; + private static final int FLAG_RUNTIME_PERMISSIONS = 1 << 1; + private ArrayMap<String, PermissionData> mPermissions; private int[] mGlobalGids = NO_GIDS; @@ -274,31 +277,7 @@ public final class PermissionsState { * @return The permissions or an empty set. */ public Set<String> getPermissions(int userId) { - enforceValidUserId(userId); - - if (mPermissions == null) { - return Collections.emptySet(); - } - - Set<String> permissions = new ArraySet<>(); - - final int permissionCount = mPermissions.size(); - for (int i = 0; i < permissionCount; i++) { - String permission = mPermissions.keyAt(i); - if (userId == UserHandle.USER_ALL) { - if (hasInstallPermission(permission)) { - permissions.add(permission); - } - } else { - if (hasInstallPermission(permission)) { - permissions.add(permission); - } else if (hasRuntimePermission(permission, userId)) { - permissions.add(permission); - } - } - } - - return permissions; + return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS | FLAG_RUNTIME_PERMISSIONS, userId); } /** @@ -307,7 +286,7 @@ public final class PermissionsState { * @return The permissions or an empty set. */ public Set<String> getRuntimePermissions(int userId) { - return getPermissions(userId); + return getPermissionsInternal(FLAG_RUNTIME_PERMISSIONS, userId); } /** @@ -316,7 +295,7 @@ public final class PermissionsState { * @return The permissions or an empty set. */ public Set<String> getInstallPermissions() { - return getPermissions(UserHandle.USER_ALL); + return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS, UserHandle.USER_ALL); } /** @@ -375,6 +354,38 @@ public final class PermissionsState { mPermissions = null; } + private Set<String> getPermissionsInternal(int flags, int userId) { + enforceValidUserId(userId); + + if (mPermissions == null) { + return Collections.emptySet(); + } + + if (userId == UserHandle.USER_ALL) { + flags = FLAG_INSTALL_PERMISSIONS; + } + + Set<String> permissions = new ArraySet<>(); + + final int permissionCount = mPermissions.size(); + for (int i = 0; i < permissionCount; i++) { + String permission = mPermissions.keyAt(i); + + if ((flags & FLAG_INSTALL_PERMISSIONS) != 0) { + if (hasInstallPermission(permission)) { + permissions.add(permission); + } + } + if ((flags & FLAG_RUNTIME_PERMISSIONS) != 0) { + if (hasRuntimePermission(permission, userId)) { + permissions.add(permission); + } + } + } + + return permissions; + } + private int grantPermission(BasePermission permission, int userId) { if (hasPermission(permission.name, userId)) { return PERMISSION_OPERATION_FAILURE; |