Loading services/core/java/com/android/server/pm/PermissionsState.java +38 −27 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,9 @@ public final class PermissionsState { private static final int[] NO_GIDS = {}; 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 ArrayMap<String, PermissionData> mPermissions; private int[] mGlobalGids = NO_GIDS; private int[] mGlobalGids = NO_GIDS; Loading Loading @@ -274,31 +277,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getPermissions(int userId) { public Set<String> getPermissions(int userId) { enforceValidUserId(userId); return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS | FLAG_RUNTIME_PERMISSIONS, 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; } } /** /** Loading @@ -307,7 +286,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getRuntimePermissions(int userId) { public Set<String> getRuntimePermissions(int userId) { return getPermissions(userId); return getPermissionsInternal(FLAG_RUNTIME_PERMISSIONS, userId); } } /** /** Loading @@ -316,7 +295,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getInstallPermissions() { public Set<String> getInstallPermissions() { return getPermissions(UserHandle.USER_ALL); return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS, UserHandle.USER_ALL); } } /** /** Loading Loading @@ -375,6 +354,38 @@ public final class PermissionsState { mPermissions = null; 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) { private int grantPermission(BasePermission permission, int userId) { if (hasPermission(permission.name, userId)) { if (hasPermission(permission.name, userId)) { return PERMISSION_OPERATION_FAILURE; return PERMISSION_OPERATION_FAILURE; Loading Loading
services/core/java/com/android/server/pm/PermissionsState.java +38 −27 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,9 @@ public final class PermissionsState { private static final int[] NO_GIDS = {}; 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 ArrayMap<String, PermissionData> mPermissions; private int[] mGlobalGids = NO_GIDS; private int[] mGlobalGids = NO_GIDS; Loading Loading @@ -274,31 +277,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getPermissions(int userId) { public Set<String> getPermissions(int userId) { enforceValidUserId(userId); return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS | FLAG_RUNTIME_PERMISSIONS, 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; } } /** /** Loading @@ -307,7 +286,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getRuntimePermissions(int userId) { public Set<String> getRuntimePermissions(int userId) { return getPermissions(userId); return getPermissionsInternal(FLAG_RUNTIME_PERMISSIONS, userId); } } /** /** Loading @@ -316,7 +295,7 @@ public final class PermissionsState { * @return The permissions or an empty set. * @return The permissions or an empty set. */ */ public Set<String> getInstallPermissions() { public Set<String> getInstallPermissions() { return getPermissions(UserHandle.USER_ALL); return getPermissionsInternal(FLAG_INSTALL_PERMISSIONS, UserHandle.USER_ALL); } } /** /** Loading Loading @@ -375,6 +354,38 @@ public final class PermissionsState { mPermissions = null; 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) { private int grantPermission(BasePermission permission, int userId) { if (hasPermission(permission.name, userId)) { if (hasPermission(permission.name, userId)) { return PERMISSION_OPERATION_FAILURE; return PERMISSION_OPERATION_FAILURE; Loading