From 52fca33d0bed7845fe38f9903160aa7eb46b85e0 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 21 Feb 2020 16:26:29 +0000 Subject: [PATCH] Restart discovery if it finishes too quickly. Discovery finishes quickly on some devices if called at the wrong time. --- .../bluetooth/AndroidBluetoothPlugin.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java index 77b077119..eaf5cb5e2 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java @@ -76,6 +76,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin { private static final Logger LOG = getLogger(AndroidBluetoothPlugin.class.getName()); + private static final int MIN_DEVICE_DISCOVERY_MS = 2_000; private static final int MAX_DEVICE_DISCOVERY_MS = 30_000; private static final int MAX_SERVICE_DISCOVERY_MS = 15_000; @@ -416,8 +417,9 @@ class AndroidBluetoothPlugin extends BluetoothPlugin { appContext.registerReceiver(receiver, filter); try { if (adapter.startDiscovery()) { - long now = clock.currentTimeMillis(); - long end = now + MAX_DEVICE_DISCOVERY_MS; + long start = clock.currentTimeMillis(); + long end = start + MAX_DEVICE_DISCOVERY_MS; + long now = start; while (now < end) { Intent i = intents.poll(end - now, MILLISECONDS); if (i == null) break; @@ -426,7 +428,16 @@ class AndroidBluetoothPlugin extends BluetoothPlugin { LOG.info("Discovery started"); } else if (ACTION_DISCOVERY_FINISHED.equals(action)) { LOG.info("Discovery finished"); - break; + now = clock.currentTimeMillis(); + if (now - start < MIN_DEVICE_DISCOVERY_MS) { + LOG.info("Discovery finished quickly, retrying"); + if (!adapter.startDiscovery()) { + LOG.info("Could not restart discovery"); + break; + } + } else { + break; + } } else if (ACTION_FOUND.equals(action)) { BluetoothDevice d = requireNonNull( i.getParcelableExtra(EXTRA_DEVICE));