summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Philip P. Moltmann <moltmann@google.com> 2019-01-31 14:22:39 -0800
committer Philip P. Moltmann <moltmann@google.com> 2019-01-31 14:22:39 -0800
commite1436e85ae751068bbf7615511d7f24fdd8319c7 (patch)
tree0021082c20d48649f3833659d23d3fc2c316cc2f
parentfcd2ab1b0265f4eb2a25ad15d940e532c363cb57 (diff)
Flags instead of booleans for countPermissionApps
Test: Checked that the api retunred the results Change-Id: I3f95bf9beee4a7edae5cbd9457ad4efefe83d1be Fixes: 123697839
-rw-r--r--api/system-current.txt4
-rw-r--r--api/test-current.txt2
-rw-r--r--core/java/android/permission/IPermissionController.aidl4
-rw-r--r--core/java/android/permission/PermissionControllerManager.java39
-rw-r--r--core/java/android/permission/PermissionControllerService.java24
5 files changed, 48 insertions, 25 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 43d055b1199b..69de04092c38 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5501,6 +5501,8 @@ package android.permission {
public final class PermissionControllerManager {
method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
+ field public static final int COUNT_ONLY_WHEN_GRANTED = 1; // 0x1
+ field public static final int COUNT_WHEN_SYSTEM = 2; // 0x2
field public static final int REASON_INSTALLER_POLICY_VIOLATION = 2; // 0x2
field public static final int REASON_MALWARE = 1; // 0x1
}
@@ -5514,7 +5516,7 @@ package android.permission {
ctor public PermissionControllerService();
method public final void attachBaseContext(android.content.Context);
method public final android.os.IBinder onBind(android.content.Intent);
- method public abstract int onCountPermissionApps(@NonNull java.util.List<java.lang.String>, boolean, boolean);
+ method public abstract int onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int);
method @NonNull public abstract java.util.List<android.permission.RuntimePermissionPresentationInfo> onGetAppPermissions(@NonNull String);
method @NonNull public abstract java.util.List<android.permission.RuntimePermissionUsageInfo> onGetPermissionUsages(boolean, long);
method public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream);
diff --git a/api/test-current.txt b/api/test-current.txt
index 9023a859a286..b81fa763bb8b 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1691,6 +1691,8 @@ package android.permission {
public final class PermissionControllerManager {
method @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
+ field public static final int COUNT_ONLY_WHEN_GRANTED = 1; // 0x1
+ field public static final int COUNT_WHEN_SYSTEM = 2; // 0x2
field public static final int REASON_INSTALLER_POLICY_VIOLATION = 2; // 0x2
field public static final int REASON_MALWARE = 1; // 0x1
}
diff --git a/core/java/android/permission/IPermissionController.aidl b/core/java/android/permission/IPermissionController.aidl
index 5dd869f46b4e..ee6744b320f2 100644
--- a/core/java/android/permission/IPermissionController.aidl
+++ b/core/java/android/permission/IPermissionController.aidl
@@ -32,8 +32,8 @@ oneway interface IPermissionController {
void getRuntimePermissionBackup(in UserHandle user, in ParcelFileDescriptor pipe);
void getAppPermissions(String packageName, in RemoteCallback callback);
void revokeRuntimePermission(String packageName, String permissionName);
- void countPermissionApps(in List<String> permissionNames, boolean countOnlyGranted,
- boolean countSystem, in RemoteCallback callback);
+ void countPermissionApps(in List<String> permissionNames, int flags,
+ in RemoteCallback callback);
void getPermissionUsages(boolean countSystem, long numMillis, in RemoteCallback callback);
void isApplicationQualifiedForRole(String roleName, String packageName,
in RemoteCallback callback);
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index b59d0c7a660e..850d02021a1e 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -20,6 +20,7 @@ import static android.permission.PermissionControllerService.SERVICE_INTERFACE;
import static com.android.internal.util.Preconditions.checkArgumentNonnegative;
import static com.android.internal.util.Preconditions.checkCollectionElementsNotNull;
+import static com.android.internal.util.Preconditions.checkFlagsArgument;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.internal.util.Preconditions.checkStringNotEmpty;
@@ -113,6 +114,20 @@ public final class PermissionControllerManager {
*/
public static final int REASON_INSTALLER_POLICY_VIOLATION = 2;
+ /** @hide */
+ @IntDef(prefix = { "COUNT_" }, value = {
+ COUNT_ONLY_WHEN_GRANTED,
+ COUNT_WHEN_SYSTEM,
+ }, flag = true)
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface CountPermissionAppsFlag {}
+
+ /** Count an app only if the permission is granted to the app. */
+ public static final int COUNT_ONLY_WHEN_GRANTED = 1;
+
+ /** Count and app even if it is a system app. */
+ public static final int COUNT_WHEN_SYSTEM = 2;
+
/**
* Callback for delivering the result of {@link #revokeRuntimePermissions}.
*/
@@ -162,7 +177,7 @@ public final class PermissionControllerManager {
*/
public interface OnCountPermissionAppsResultCallback {
/**
- * The result for {@link #countPermissionApps(List, boolean, boolean,
+ * The result for {@link #countPermissionApps(List, int,
* OnCountPermissionAppsResultCallback, Handler)}.
*
* @param numApps The number of apps that have one of the permissions
@@ -302,8 +317,8 @@ public final class PermissionControllerManager {
* Count how many apps have one of a set of permissions.
*
* @param permissionNames The permissions the app might have
- * @param countOnlyGranted Count an app only if the permission is granted to the app
- * @param countSystem Also count system apps
+ * @param flags Modify which apps to count. By default all non-system apps that request a
+ * permission are counted
* @param callback Callback to receive the result
* @param handler Handler on which to invoke the callback
*
@@ -311,13 +326,14 @@ public final class PermissionControllerManager {
*/
@RequiresPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS)
public void countPermissionApps(@NonNull List<String> permissionNames,
- boolean countOnlyGranted, boolean countSystem,
+ @CountPermissionAppsFlag int flags,
@NonNull OnCountPermissionAppsResultCallback callback, @Nullable Handler handler) {
checkCollectionElementsNotNull(permissionNames, "permissionNames");
+ checkFlagsArgument(flags, COUNT_WHEN_SYSTEM | COUNT_ONLY_WHEN_GRANTED);
checkNotNull(callback);
sRemoteService.scheduleRequest(new PendingCountPermissionAppsRequest(sRemoteService,
- permissionNames, countOnlyGranted, countSystem, callback,
+ permissionNames, flags, callback,
handler == null ? sRemoteService.getHandler() : handler));
}
@@ -731,20 +747,17 @@ public final class PermissionControllerManager {
AbstractRemoteService.PendingRequest<RemoteService, IPermissionController> {
private final @NonNull List<String> mPermissionNames;
private final @NonNull OnCountPermissionAppsResultCallback mCallback;
- private final boolean mCountOnlyGranted;
- private final boolean mCountSystem;
+ private final @CountPermissionAppsFlag int mFlags;
private final @NonNull RemoteCallback mRemoteCallback;
private PendingCountPermissionAppsRequest(@NonNull RemoteService service,
- @NonNull List<String> permissionNames, boolean countOnlyGranted,
- boolean countSystem, @NonNull OnCountPermissionAppsResultCallback callback,
- @NonNull Handler handler) {
+ @NonNull List<String> permissionNames, @CountPermissionAppsFlag int flags,
+ @NonNull OnCountPermissionAppsResultCallback callback, @NonNull Handler handler) {
super(service);
mPermissionNames = permissionNames;
- mCountOnlyGranted = countOnlyGranted;
- mCountSystem = countSystem;
+ mFlags = flags;
mCallback = callback;
mRemoteCallback = new RemoteCallback(result -> {
@@ -770,7 +783,7 @@ public final class PermissionControllerManager {
public void run() {
try {
getService().getServiceInterface().countPermissionApps(mPermissionNames,
- mCountOnlyGranted, mCountSystem, mRemoteCallback);
+ mFlags, mRemoteCallback);
} catch (RemoteException e) {
Log.e(TAG, "Error counting permission apps", e);
}
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index 9a58b971baf5..70404c35fa45 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -16,9 +16,13 @@
package android.permission;
+import static android.permission.PermissionControllerManager.COUNT_ONLY_WHEN_GRANTED;
+import static android.permission.PermissionControllerManager.COUNT_WHEN_SYSTEM;
+
import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkArgumentNonnegative;
import static com.android.internal.util.Preconditions.checkCollectionElementsNotNull;
+import static com.android.internal.util.Preconditions.checkFlagsArgument;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.internal.util.Preconditions.checkStringNotEmpty;
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
@@ -37,6 +41,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteCallback;
import android.os.UserHandle;
+import android.permission.PermissionControllerManager.CountPermissionAppsFlag;
import android.util.ArrayMap;
import android.util.Log;
@@ -121,13 +126,13 @@ public abstract class PermissionControllerService extends Service {
* Count how many apps have one of a set of permissions.
*
* @param permissionNames The permissions the app might have
- * @param countOnlyGranted Count an app only if the permission is granted to the app
- * @param countSystem Also count system apps
+ * @param flags Modify which apps to count. By default all non-system apps that request a
+ * permission are counted
*
* @return the number of apps that have one of the permissions
*/
public abstract int onCountPermissionApps(@NonNull List<String> permissionNames,
- boolean countOnlyGranted, boolean countSystem);
+ @CountPermissionAppsFlag int flags);
/**
* Count how many apps have used permissions.
@@ -226,17 +231,18 @@ public abstract class PermissionControllerService extends Service {
}
@Override
- public void countPermissionApps(List<String> permissionNames, boolean countOnlyGranted,
- boolean countSystem, RemoteCallback callback) {
+ public void countPermissionApps(List<String> permissionNames, int flags,
+ RemoteCallback callback) {
checkCollectionElementsNotNull(permissionNames, "permissionNames");
+ checkFlagsArgument(flags, COUNT_WHEN_SYSTEM | COUNT_ONLY_WHEN_GRANTED);
checkNotNull(callback, "callback");
enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null);
mHandler.sendMessage(
obtainMessage(PermissionControllerService::countPermissionApps,
- PermissionControllerService.this, permissionNames, countOnlyGranted,
- countSystem, callback));
+ PermissionControllerService.this, permissionNames, flags,
+ callback));
}
@Override
@@ -311,8 +317,8 @@ public abstract class PermissionControllerService extends Service {
}
private void countPermissionApps(@NonNull List<String> permissionNames,
- boolean countOnlyGranted, boolean countSystem, @NonNull RemoteCallback callback) {
- int numApps = onCountPermissionApps(permissionNames, countOnlyGranted, countSystem);
+ @CountPermissionAppsFlag int flags, @NonNull RemoteCallback callback) {
+ int numApps = onCountPermissionApps(permissionNames, flags);
Bundle result = new Bundle();
result.putInt(PermissionControllerManager.KEY_RESULT, numApps);