diff options
-rw-r--r-- | services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 6859c5835c80..d6759b3e2cca 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -336,8 +336,10 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public List<String> getAssociations(String callingPackage, int userId) throws RemoteException { - checkCallerIsSystemOr(callingPackage, userId); - checkUsesFeature(callingPackage, getCallingUserId()); + if (!callerCanManageCompanionDevices()) { + checkCallerIsSystemOr(callingPackage, userId); + checkUsesFeature(callingPackage, getCallingUserId()); + } return new ArrayList<>(CollectionUtils.map( readAllAssociations(userId, callingPackage), a -> a.deviceAddress)); @@ -353,6 +355,12 @@ public class CompanionDeviceManagerService extends SystemService implements Bind removeAssociation(getCallingUserId(), callingPackage, deviceMacAddress); } + private boolean callerCanManageCompanionDevices() { + return getContext().checkCallingOrSelfPermission( + android.Manifest.permission.MANAGE_COMPANION_DEVICES) + == PackageManager.PERMISSION_GRANTED; + } + private void checkCallerIsSystemOr(String pkg) throws RemoteException { checkCallerIsSystemOr(pkg, getCallingUserId()); } |