Wait for discovery to finish before returning discovered devices.

This commit is contained in:
akwizgran
2020-02-21 16:14:40 +00:00
parent 2522034397
commit 472d560dda

View File

@@ -76,7 +76,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
private static final Logger LOG = private static final Logger LOG =
getLogger(AndroidBluetoothPlugin.class.getName()); getLogger(AndroidBluetoothPlugin.class.getName());
private static final int MAX_DEVICE_DISCOVERY_MS = 60_000; private static final int MAX_DEVICE_DISCOVERY_MS = 30_000;
private static final int MAX_SERVICE_DISCOVERY_MS = 15_000; private static final int MAX_SERVICE_DISCOVERY_MS = 15_000;
private final AndroidExecutor androidExecutor; private final AndroidExecutor androidExecutor;
@@ -254,6 +254,8 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
return; return;
} }
List<Pair<TransportProperties, DiscoveryHandler>> discovered =
new ArrayList<>();
Map<String, Pair<TransportProperties, DiscoveryHandler>> byUuid = Map<String, Pair<TransportProperties, DiscoveryHandler>> byUuid =
new HashMap<>(); new HashMap<>();
Map<String, Pair<TransportProperties, DiscoveryHandler>> byAddress = Map<String, Pair<TransportProperties, DiscoveryHandler>> byAddress =
@@ -289,7 +291,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
TransportProperties p = TransportProperties p =
new TransportProperties(pair.getFirst()); new TransportProperties(pair.getFirst());
p.put(PROP_ADDRESS, d.getAddress()); p.put(PROP_ADDRESS, d.getAddress());
pair.getSecond().handleDevice(p); discovered.add(new Pair<>(p, pair.getSecond()));
unknown.remove(d); unknown.remove(d);
break; break;
} }
@@ -299,7 +301,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
LOG.info("Matched " + scrubMacAddress(d.getAddress()) LOG.info("Matched " + scrubMacAddress(d.getAddress())
+ " by address"); + " by address");
} }
pair.getSecond().handleDevice(pair.getFirst()); discovered.add(pair);
unknown.remove(d); unknown.remove(d);
} }
} }
@@ -365,7 +367,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
TransportProperties p = TransportProperties p =
new TransportProperties(pair.getFirst()); new TransportProperties(pair.getFirst());
p.put(PROP_ADDRESS, d.getAddress()); p.put(PROP_ADDRESS, d.getAddress());
pair.getSecond().handleDevice(p); discovered.add(new Pair<>(p, pair.getSecond()));
break; break;
} }
} }
@@ -386,6 +388,13 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> {
} finally { } finally {
appContext.unregisterReceiver(receiver); appContext.unregisterReceiver(receiver);
} }
if (LOG.isLoggable(INFO)) {
LOG.info("Discovered " + discovered.size() + " contacts");
}
for (Pair<TransportProperties, DiscoveryHandler> pair : discovered) {
pair.getSecond().handleDevice(pair.getFirst());
}
} }
private List<String> getUuids(BluetoothDevice d) { private List<String> getUuids(BluetoothDevice d) {