summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorPhilip P. Moltmann <moltmann@google.com>2019-04-18 11:02:09 -0700
committerPhilip P. Moltmann <moltmann@google.com>2019-04-18 11:05:35 -0700
commit188e47bbc59f79bf2ebb637b202f230e74483868 (patch)
tree47b87d85628cb16968c60b3e44c3de28a66e5af6 /core/java/android
parent3979c51c00f3065787e22bbddbc3582ddc5e41f4 (diff)
Call PermissionControllerService on workerthread
As otherwise the mainthread is overwhelmed and blocking. Test: atest CtsPermissionTestCases:android.permission.cts.PermissionControllerTest Fixes: 130738002 Change-Id: I1d6cbc60411802cef1c8aedbb6e89430e65b2aa9
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/permission/PermissionControllerService.java63
1 files changed, 34 insertions, 29 deletions
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index ed44367e28c6..fd7c8739dc60 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -28,18 +28,19 @@ import static com.android.internal.util.Preconditions.checkCollectionElementsNot
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;
import android.Manifest;
import android.annotation.BinderThread;
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.WorkerThread;
import android.app.Service;
import android.app.admin.DevicePolicyManager.PermissionGrantState;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -96,6 +97,7 @@ public abstract class PermissionControllerService extends Service {
*
* @return the actually removed permissions as {@code Map<packageName, List<permission>>}
*/
+ @WorkerThread
public abstract @NonNull Map<String, List<String>> onRevokeRuntimePermissions(
@NonNull Map<String, List<String>> requests, boolean doDryRun,
@PermissionControllerManager.Reason int reason, @NonNull String callerPackageName);
@@ -106,6 +108,7 @@ public abstract class PermissionControllerService extends Service {
* @param user The user to back up
* @param backup The stream to write the backup to
*/
+ @WorkerThread
public abstract void onGetRuntimePermissionsBackup(@NonNull UserHandle user,
@NonNull OutputStream backup);
@@ -142,6 +145,7 @@ public abstract class PermissionControllerService extends Service {
*
* @return descriptions of the runtime permissions of the app
*/
+ @WorkerThread
public abstract @NonNull List<RuntimePermissionPresentationInfo> onGetAppPermissions(
@NonNull String packageName);
@@ -151,6 +155,7 @@ public abstract class PermissionControllerService extends Service {
* @param packageName The package for which to revoke
* @param permissionName The permission to revoke
*/
+ @WorkerThread
public abstract void onRevokeRuntimePermission(@NonNull String packageName,
@NonNull String permissionName);
@@ -163,6 +168,7 @@ public abstract class PermissionControllerService extends Service {
*
* @return the number of apps that have one of the permissions
*/
+ @WorkerThread
public abstract int onCountPermissionApps(@NonNull List<String> permissionNames,
@CountPermissionAppsFlag int flags);
@@ -174,6 +180,7 @@ public abstract class PermissionControllerService extends Service {
*
* @return descriptions of the users of permissions
*/
+ @WorkerThread
public abstract @NonNull List<RuntimePermissionUsageInfo> onGetPermissionUsages(
boolean countSystem, long numMillis);
@@ -186,6 +193,7 @@ public abstract class PermissionControllerService extends Service {
* @see PermissionManager#getRuntimePermissionsVersion()
* @see PermissionManager#setRuntimePermissionsVersion(int)
*/
+ @WorkerThread
public abstract void onGrantOrUpgradeDefaultRuntimePermissions();
/**
@@ -196,6 +204,7 @@ public abstract class PermissionControllerService extends Service {
* @param permission Permission to change
* @param grantState State to set the permission into
*/
+ @WorkerThread
public abstract boolean onSetRuntimePermissionGrantStateByDeviceAdmin(
@NonNull String callerPackageName, @NonNull String packageName,
@NonNull String permission, @PermissionGrantState int grantState);
@@ -232,10 +241,9 @@ public abstract class PermissionControllerService extends Service {
throw new RuntimeException(e);
}
- mHandler.sendMessage(obtainMessage(
- PermissionControllerService::revokeRuntimePermissions,
- PermissionControllerService.this, request, doDryRun, reason,
- callerPackageName, callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(() ->
+ PermissionControllerService.this.revokeRuntimePermissions(request, doDryRun,
+ reason, callerPackageName, callback));
}
@Override
@@ -245,9 +253,8 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null);
- mHandler.sendMessage(obtainMessage(
- PermissionControllerService::getRuntimePermissionsBackup,
- PermissionControllerService.this, user, pipe));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(() ->
+ PermissionControllerService.this.getRuntimePermissionsBackup(user, pipe));
}
@Override
@@ -287,9 +294,9 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null);
- mHandler.sendMessage(
- obtainMessage(PermissionControllerService::getAppPermissions,
- PermissionControllerService.this, packageName, callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this.getAppPermissions(packageName,
+ callback));
}
@Override
@@ -299,9 +306,9 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.REVOKE_RUNTIME_PERMISSIONS, null);
- mHandler.sendMessage(
- obtainMessage(PermissionControllerService::onRevokeRuntimePermission,
- PermissionControllerService.this, packageName, permissionName));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this.onRevokeRuntimePermission(
+ packageName, permissionName));
}
@Override
@@ -313,10 +320,9 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null);
- mHandler.sendMessage(
- obtainMessage(PermissionControllerService::countPermissionApps,
- PermissionControllerService.this, permissionNames, flags,
- callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this.countPermissionApps(permissionNames,
+ flags, callback));
}
@Override
@@ -327,10 +333,9 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS, null);
- mHandler.sendMessage(
- obtainMessage(PermissionControllerService::getPermissionUsages,
- PermissionControllerService.this, countSystem, numMillis,
- callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this.getPermissionUsages(countSystem,
+ numMillis, callback));
}
@Override
@@ -356,10 +361,10 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY,
null);
- mHandler.sendMessage(obtainMessage(
- PermissionControllerService::setRuntimePermissionGrantStateByDeviceAdmin,
- PermissionControllerService.this, callerPackageName, packageName,
- permission, grantState, callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this
+ .setRuntimePermissionGrantStateByDeviceAdmin(callerPackageName,
+ packageName, permission, grantState, callback));
}
@Override
@@ -369,9 +374,9 @@ public abstract class PermissionControllerService extends Service {
enforceCallingPermission(Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY,
null);
- mHandler.sendMessage(obtainMessage(
- PermissionControllerService::grantOrUpgradeDefaultRuntimePermissions,
- PermissionControllerService.this, callback));
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(
+ () -> PermissionControllerService.this
+ .grantOrUpgradeDefaultRuntimePermissions(callback));
}
};
}