From f90a00f4103be21c3aa3c32048c34f47cf62496f Mon Sep 17 00:00:00 2001 From: Evan Chen Date: Mon, 2 May 2022 15:43:29 -0700 Subject: [PATCH] Update connected devices sets when app is killed Update the current connected devices sets when binder is dead, so that application is able to call notifyDeviceAppeared after re-launch the application. Bug: 230668833 Test: atest CtsCompanionDeviceManagerCoreTestCases atest CtsCompanionDeviceManagerUiAutomationTestCases atest CtsOsTestCases:CompanionDeviceManagerTest Change-Id: I851a0fd0dda2a65750591685aedd1b694fc4c741 --- .../companion/CompanionDeviceManagerService.java | 9 +++++++++ .../presence/CompanionDevicePresenceMonitor.java | 13 ++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index b4c107c1a2c1a..62bb9f155c340 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -294,6 +294,15 @@ public class CompanionDeviceManagerService extends SystemService { private boolean onCompanionApplicationBindingDiedInternal( @UserIdInt int userId, @NonNull String packageName) { + // Update the current connected devices sets when binderDied, so that application is able + // to call notifyDeviceAppeared after re-launch the application. + for (AssociationInfo ai : + mAssociationStore.getAssociationsForPackage(userId, packageName)) { + int id = ai.getId(); + Slog.i(TAG, "Removing association id: " + id + " for package: " + + packageName + " due to binderDied."); + mDevicePresenceMonitor.removeDeviceFromMonitoring(id); + } // TODO(b/218613015): implement. return false; } diff --git a/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java b/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java index 6371b25e63479..24be1b6fd7017 100644 --- a/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java +++ b/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java @@ -205,6 +205,15 @@ public class CompanionDevicePresenceMonitor implements AssociationStore.OnChange mCallback.onDeviceDisappeared(goneDeviceAssociationId); } + /** + * Remove the current connected devices by associationId. + */ + public void removeDeviceFromMonitoring(int associationId) { + mConnectedBtDevices.remove(associationId); + mNearbyBleDevices.remove(associationId); + mReportedSelfManagedDevices.remove(associationId); + } + /** * Implements * {@link AssociationStore.OnChangeListener#onAssociationRemoved(AssociationInfo)} @@ -217,9 +226,7 @@ public class CompanionDevicePresenceMonitor implements AssociationStore.OnChange Log.d(TAG, " > association=" + association); } - mConnectedBtDevices.remove(id); - mNearbyBleDevices.remove(id); - mReportedSelfManagedDevices.remove(id); + removeDeviceFromMonitoring(id); // Do NOT call mCallback.onDeviceDisappeared()! // CompanionDeviceManagerService will know that the association is removed, and will do