summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java11
-rw-r--r--services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java21
2 files changed, 15 insertions, 17 deletions
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 2a22cac75ae0..9b2554fdbb3c 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -292,14 +292,13 @@ 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);
+ final int associationId = ai.getId();
+ if (ai.isSelfManaged()
+ && mDevicePresenceMonitor.isDevicePresent(associationId)) {
+ mDevicePresenceMonitor.onSelfManagedDeviceReporterBinderDied(associationId);
+ }
}
// 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 37e83697c787..89ed301eb661 100644
--- a/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java
+++ b/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java
@@ -149,6 +149,13 @@ public class CompanionDevicePresenceMonitor implements AssociationStore.OnChange
onDeviceGone(mReportedSelfManagedDevices, associationId, "application-reported");
}
+ /**
+ * Marks a "self-managed" device as disconnected when binderDied.
+ */
+ public void onSelfManagedDeviceReporterBinderDied(int associationId) {
+ onDeviceGone(mReportedSelfManagedDevices, associationId, "application-reported");
+ }
+
@Override
public void onBluetoothCompanionDeviceConnected(int associationId) {
onDevicePresent(mConnectedBtDevices, associationId, /* sourceLoggingTag */ "bt");
@@ -259,16 +266,6 @@ public class CompanionDevicePresenceMonitor implements AssociationStore.OnChange
}
/**
- * Remove the current connected devices by associationId.
- */
- public void removeDeviceFromMonitoring(int associationId) {
- mConnectedBtDevices.remove(associationId);
- mNearbyBleDevices.remove(associationId);
- mReportedSelfManagedDevices.remove(associationId);
- mSimulated.remove(associationId);
- }
-
- /**
* Implements
* {@link AssociationStore.OnChangeListener#onAssociationRemoved(AssociationInfo)}
*/
@@ -280,7 +277,9 @@ public class CompanionDevicePresenceMonitor implements AssociationStore.OnChange
Log.d(TAG, " > association=" + association);
}
- removeDeviceFromMonitoring(id);
+ mConnectedBtDevices.remove(id);
+ mNearbyBleDevices.remove(id);
+ mReportedSelfManagedDevices.remove(id);
// Do NOT call mCallback.onDeviceDisappeared()!
// CompanionDeviceManagerService will know that the association is removed, and will do