From bf5555738b3dcb3e75abd8ddc8cb3c59916cae4e Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Mon, 3 Jan 2022 08:36:03 +0100 Subject: [PATCH] Grant CDM roles when association is created Grant CDM roles for the corresponding CDM profiles when Associations are being created instead of in onDeviceConnected(). Remove `simulate_connect` and `simulate_disconnect` Shell commads that aren't needed now (have been used in CTS tests, which is now being updated to account for the new role granting logic). Bug: 212656822 Test: atest CtsCompanionDeviceManagerCoreTestCases Test: atest CtsCompanionDeviceManagerUiAutomationTestCases Test: atest CtsOsTestCases:CompanionDeviceManagerTest Change-Id: I44f5c73a815ff60ecfc9a4143eb0f85438015ad6 --- .../AssociationRequestsProcessor.java | 11 ++++++-- .../CompanionDeviceManagerService.java | 28 ++++++------------- .../CompanionDeviceShellCommand.java | 10 +------ 3 files changed, 17 insertions(+), 32 deletions(-) diff --git a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java index 93fc0e7262aa4..2b7b97737e0f6 100644 --- a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +++ b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java @@ -254,9 +254,14 @@ class AssociationRequestsProcessor { private AssociationInfo createAssociationAndNotifyApplication( @NonNull AssociationRequest request, @NonNull String packageName, @UserIdInt int userId, @Nullable MacAddress macAddress, @NonNull IAssociationRequestCallback callback) { - final AssociationInfo association = mService.createAssociation(userId, packageName, - macAddress, request.getDisplayName(), request.getDeviceProfile(), - request.isSelfManaged()); + final AssociationInfo association; + final long callingIdentity = Binder.clearCallingIdentity(); + try { + association = mService.createAssociation(userId, packageName, macAddress, + request.getDisplayName(), request.getDeviceProfile(), request.isSelfManaged()); + } finally { + Binder.restoreCallingIdentity(callingIdentity); + } try { callback.onAssociationCreated(association); diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index b2b55765f178a..cfd37988d234c 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -787,6 +787,12 @@ public class CompanionDeviceManagerService extends SystemService Slog.i(LOG_TAG, "New CDM association created=" + association); mAssociationStore.addAssociation(association); + // If the "Device Profile" is specified, make the companion application a holder of the + // corresponding role. + if (deviceProfile != null) { + addRoleHolderForAssociation(getContext(), association); + } + updateSpecialAccessPermissionForAssociatedPackage(association); return association; @@ -930,14 +936,8 @@ public class CompanionDeviceManagerService extends SystemService exemptFromAutoRevoke(packageInfo.packageName, packageInfo.applicationInfo.uid); - if (!association.isSelfManaged()) { - if (mCurrentlyConnectedDevices.contains(association.getDeviceMacAddressAsString())) { - addRoleHolderForAssociation(getContext(), association); - } - - if (association.isNotifyOnDeviceNearby()) { - restartBleScan(); - } + if (association.isNotifyOnDeviceNearby()) { + restartBleScan(); } } @@ -983,19 +983,7 @@ public class CompanionDeviceManagerService extends SystemService void onDeviceConnected(String address) { Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); - mCurrentlyConnectedDevices.add(address); - - for (AssociationInfo association : mAssociationStore.getAssociationsByAddress(address)) { - if (association.getDeviceProfile() != null) { - Slog.i(LOG_TAG, "Granting role " + association.getDeviceProfile() - + " to " + association.getPackageName() - + " due to device connected: " + association.getDeviceMacAddress()); - - addRoleHolderForAssociation(getContext(), association); - } - } - onDeviceNearby(address); } diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java index 9b2bd82fcfede..f2e660779e9ec 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java @@ -73,20 +73,12 @@ class CompanionDeviceShellCommand extends android.os.ShellCommand { } break; - case "simulate_connect": { - mService.onDeviceConnected(getNextArgRequired()); - } - break; - - case "simulate_disconnect": { - mService.onDeviceDisconnected(getNextArgRequired()); - } - break; case "clear-association-memory-cache": { mService.persistState(); mService.loadAssociationsFromDisk(); } break; + default: return handleDefaultCommands(cmd); }