From 2959fa471ab73f0643ce742169f831b9b229347f Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Wed, 6 Jan 2021 11:18:05 -0800 Subject: [PATCH] Introduce API to get CDM profile permissions description string Bug: 165951651 Test: presubmit Change-Id: Ic59f7a70f0a1b8b53510fc313e0e3e2155cd3b31 --- core/api/system-current.txt | 1 + .../permission/IPermissionController.aidl | 3 ++ .../PermissionControllerService.java | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 745351dd2f60d..bbff736f7d03b 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -8409,6 +8409,7 @@ package android.permission { public abstract class PermissionControllerService extends android.app.Service { ctor public PermissionControllerService(); + method @NonNull @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public String getPrivilegesDescriptionStringForProfile(@NonNull String); method @BinderThread public void onApplyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer); method @NonNull public final android.os.IBinder onBind(android.content.Intent); method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List, int, @NonNull java.util.function.IntConsumer); diff --git a/core/java/android/permission/IPermissionController.aidl b/core/java/android/permission/IPermissionController.aidl index f011395425411..084cc2ff4aa41 100644 --- a/core/java/android/permission/IPermissionController.aidl +++ b/core/java/android/permission/IPermissionController.aidl @@ -44,4 +44,7 @@ oneway interface IPermissionController { void grantOrUpgradeDefaultRuntimePermissions(in AndroidFuture callback); void notifyOneTimePermissionSessionTimeout(String packageName); void updateUserSensitiveForApp(int uid, in AndroidFuture callback); + void getPrivilegesDescriptionStringForProfile( + in String deviceProfileName, + in AndroidFuture callback); } diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java index e2e61406ba95e..8441fea1095a4 100644 --- a/core/java/android/permission/PermissionControllerService.java +++ b/core/java/android/permission/PermissionControllerService.java @@ -32,6 +32,7 @@ import static com.android.internal.util.Preconditions.checkStringNotEmpty; import android.Manifest; import android.annotation.BinderThread; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.app.Service; import android.app.admin.DevicePolicyManager.PermissionGrantState; @@ -61,6 +62,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -283,6 +285,22 @@ public abstract class PermissionControllerService extends Service { throw new AbstractMethodError("Must be overridden in implementing class"); } + /** + * Get a user-readable sentence, describing the set of privileges that are to be granted to a + * companion app managing a device of the given profile. + * + * @param deviceProfileName the + * {@link android.companion.AssociationRequest.DeviceProfile device profile} name + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.MANAGE_COMPANION_DEVICES) + @NonNull + public String getPrivilegesDescriptionStringForProfile(@NonNull String deviceProfileName) { + throw new AbstractMethodError("Must be overridden in implementing class"); + } + @Override public final @NonNull IBinder onBind(Intent intent) { return new IPermissionController.Stub() { @@ -517,6 +535,24 @@ public abstract class PermissionControllerService extends Service { PermissionControllerService.this.dump(fd, writer, args); } + + @Override + public void getPrivilegesDescriptionStringForProfile( + @NonNull String deviceProfileName, + @NonNull AndroidFuture callback) { + checkStringNotEmpty(deviceProfileName); + Objects.requireNonNull(callback); + + enforceSomePermissionsGrantedToCaller(Manifest.permission.MANAGE_COMPANION_DEVICES); + + try { + callback.complete(PermissionControllerService + .this + .getPrivilegesDescriptionStringForProfile(deviceProfileName)); + } catch (Throwable t) { + callback.completeExceptionally(t); + } + } }; } }