From aad933736764c6eafb942524214266d50c123453 Mon Sep 17 00:00:00 2001 From: Ang Li Date: Mon, 21 May 2018 19:47:16 -0700 Subject: Add bt cancel discovery. (#98) `btCancelDiscovery` synchronous Rpc. --- .../bundled/bluetooth/BluetoothAdapterSnippet.java | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src/main/java/com/google/android/mobly/snippet/bundled') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java index ffaf1af..37e7c5f 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java @@ -52,7 +52,7 @@ public class BluetoothAdapterSnippet implements Snippet { private final JsonSerializer mJsonSerializer = new JsonSerializer(); private static final ConcurrentHashMap mDiscoveryResults = new ConcurrentHashMap<>(); - private volatile boolean mIsScanResultAvailable = false; + private volatile boolean mIsDiscoveryFinished = false; public BluetoothAdapterSnippet() { mContext = InstrumentationRegistry.getContext(); @@ -180,7 +180,7 @@ public class BluetoothAdapterSnippet implements Snippet { mBluetoothAdapter.cancelDiscovery(); } mDiscoveryResults.clear(); - mIsScanResultAvailable = false; + mIsDiscoveryFinished = false; BroadcastReceiver receiver = new BluetoothScanReceiver(); mContext.registerReceiver(receiver, filter); try { @@ -188,7 +188,7 @@ public class BluetoothAdapterSnippet implements Snippet { throw new BluetoothAdapterSnippetException( "Failed to initiate Bluetooth Discovery."); } - if (!Utils.waitUntil(() -> mIsScanResultAvailable, 120)) { + if (!Utils.waitUntil(() -> mIsDiscoveryFinished, 120)) { throw new BluetoothAdapterSnippetException( "Failed to get discovery results after 2 mins, timeout!"); } @@ -214,6 +214,30 @@ public class BluetoothAdapterSnippet implements Snippet { } } + @Rpc(description = "Cancel ongoing bluetooth discovery.") + public void btCancelDiscovery() throws BluetoothAdapterSnippetException { + if (!mBluetoothAdapter.isDiscovering()) { + Log.d("No ongoing bluetooth discovery."); + return; + } + IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); + mIsDiscoveryFinished = false; + BroadcastReceiver receiver = new BluetoothScanReceiver(); + mContext.registerReceiver(receiver, filter); + try { + if (!mBluetoothAdapter.cancelDiscovery()) { + throw new BluetoothAdapterSnippetException( + "Failed to initiate to cancel bluetooth discovery."); + } + if (!Utils.waitUntil(() -> mIsDiscoveryFinished, 120)) { + throw new BluetoothAdapterSnippetException( + "Failed to get discovery results after 2 mins, timeout!"); + } + } finally { + mContext.unregisterReceiver(receiver); + } + } + @Rpc(description = "Stop being discoverable in Bluetooth.") public void btStopBeingDiscoverable() throws Throwable { if (!(boolean) @@ -290,7 +314,7 @@ public class BluetoothAdapterSnippet implements Snippet { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { - mIsScanResultAvailable = true; + mIsDiscoveryFinished = true; } else if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); -- cgit v1.2.3