From c140dee3e919ca6f0b0a59eb4f54f7af589d4a96 Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Tue, 9 Mar 2021 11:13:34 -0800 Subject: [PATCH] Fix CDM device disconnected callback immediately triggering "device disappeared" Fixes: 182287245 Test: manual Change-Id: I720ecfd326e13a3a9e84e45eeccbe21cbe2454b1 --- .../companion/CompanionDeviceManagerService.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 52237c934797e..4b56845117576 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -766,6 +766,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind .get(association.getPackageName()); if (serviceConnector != null) { serviceConnector.unbind(); + restartBleScan(); } } } @@ -1067,11 +1068,19 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void onDeviceDisconnected(String address) { - Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); + Slog.d(LOG_TAG, "onDeviceDisconnected(address = " + address + ")"); mCurrentlyConnectedDevices.remove(address); - onDeviceDisappeared(address); + Date lastSeen = mDevicesLastNearby.get(address); + if (isDeviceDisappeared(lastSeen)) { + onDeviceDisappeared(address); + } + } + + private boolean isDeviceDisappeared(Date lastSeen) { + return lastSeen == null || System.currentTimeMillis() - lastSeen.getTime() + >= DEVICE_DISAPPEARED_UNBIND_TIMEOUT_MS; } private ServiceConnector getDeviceListenerServiceConnector( @@ -1172,8 +1181,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind String address = mDevicesLastNearby.keyAt(i); Date lastNearby = mDevicesLastNearby.valueAt(i); - if (System.currentTimeMillis() - lastNearby.getTime() - >= DEVICE_DISAPPEARED_UNBIND_TIMEOUT_MS) { + if (isDeviceDisappeared(lastNearby)) { for (Association association : getAllAssociations(address)) { if (association.isNotifyOnDeviceNearby()) { getDeviceListenerServiceConnector(association).unbind();