summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2015-04-22 01:43:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-04-22 01:43:35 +0000
commit8b625dbe7fa13e3fd15f57f015ab7afe229ce3cf (patch)
treeef7c997dcbc0927c03a6abf89f8694e4f35c6401 /services
parentb32243498fcf21212268b9dff558647d9e716a1c (diff)
parent1b7025f264fd811ab27470867f8e65eeebf092e9 (diff)
downloadframeworks_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.java65
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;