summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java32
1 files changed, 14 insertions, 18 deletions
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
index e51ef297519f..d194bb29b19b 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
@@ -187,9 +187,7 @@ public class VirtualDeviceManagerService extends SystemService {
CompanionDeviceManager cdm =
getContext().getSystemService(CompanionDeviceManager.class);
if (cdm != null) {
- synchronized (mVirtualDeviceManagerLock) {
- mActiveAssociations = cdm.getAllAssociations(UserHandle.USER_ALL);
- }
+ onCdmAssociationsChanged(cdm.getAllAssociations(UserHandle.USER_ALL));
cdm.addOnAssociationsChangedListener(getContext().getMainExecutor(),
this::onCdmAssociationsChanged, UserHandle.USER_ALL);
} else {
@@ -345,19 +343,21 @@ public class VirtualDeviceManagerService extends SystemService {
@RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
void onCdmAssociationsChanged(List<AssociationInfo> associations) {
+ List<AssociationInfo> vdmAssociations = new ArrayList<>();
+ Set<Integer> activeAssociationIds = new HashSet<>();
+ for (int i = 0; i < associations.size(); ++i) {
+ AssociationInfo association = associations.get(i);
+ if (VIRTUAL_DEVICE_COMPANION_DEVICE_PROFILES.contains(association.getDeviceProfile())) {
+ vdmAssociations.add(association);
+ activeAssociationIds.add(association.getId());
+ }
+ }
Set<VirtualDeviceImpl> virtualDevicesToRemove = new HashSet<>();
Set<String> removedPersistentDeviceIds = new HashSet<>();
synchronized (mVirtualDeviceManagerLock) {
- Set<Integer> activeAssociationIds = new HashSet<>(associations.size());
- for (int i = 0; i < associations.size(); ++i) {
- activeAssociationIds.add(associations.get(i).getId());
- }
-
for (int i = 0; i < mActiveAssociations.size(); ++i) {
AssociationInfo associationInfo = mActiveAssociations.get(i);
- if (!activeAssociationIds.contains(associationInfo.getId())
- && VIRTUAL_DEVICE_COMPANION_DEVICE_PROFILES.contains(
- associationInfo.getDeviceProfile())) {
+ if (!activeAssociationIds.contains(associationInfo.getId())) {
removedPersistentDeviceIds.add(
VirtualDeviceImpl.createPersistentDeviceId(associationInfo.getId()));
}
@@ -370,7 +370,7 @@ public class VirtualDeviceManagerService extends SystemService {
}
}
- mActiveAssociations = associations;
+ mActiveAssociations = vdmAssociations;
}
for (VirtualDeviceImpl virtualDevice : virtualDevicesToRemove) {
@@ -869,12 +869,8 @@ public class VirtualDeviceManagerService extends SystemService {
synchronized (mVirtualDeviceManagerLock) {
for (int i = 0; i < mActiveAssociations.size(); ++i) {
AssociationInfo associationInfo = mActiveAssociations.get(i);
- if (VIRTUAL_DEVICE_COMPANION_DEVICE_PROFILES.contains(
- associationInfo.getDeviceProfile())) {
- persistentIds.add(
- VirtualDeviceImpl.createPersistentDeviceId(
- associationInfo.getId()));
- }
+ persistentIds.add(
+ VirtualDeviceImpl.createPersistentDeviceId(associationInfo.getId()));
}
}
return persistentIds;