Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c140dee3 authored by Eugene Susla's avatar Eugene Susla
Browse files

Fix CDM device disconnected callback immediately triggering "device disappeared"

Fixes: 182287245
Test: manual

Change-Id: I720ecfd326e13a3a9e84e45eeccbe21cbe2454b1
parent 16f93725
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -766,6 +766,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
                            .get(association.getPackageName());
            if (serviceConnector != null) {
                serviceConnector.unbind();
                restartBleScan();
            }
        }
    }
@@ -1067,12 +1068,20 @@ 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);

        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<ICompanionDeviceService> getDeviceListenerServiceConnector(
            Association a) {
@@ -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();