summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jakub Pawlowski <jpawlowski@google.com> 2017-08-29 08:42:24 +0000
committer android-build-merger <android-build-merger@google.com> 2017-08-29 08:42:24 +0000
commit909abc0bdb0e5e90390c61b9c42e91b0086374f2 (patch)
tree1ce2798bdca4031fa4f8ae45a12e0320e0a01a61
parent6820aafea933449868667817f10eb6c991b7e5fe (diff)
parent2a43dcbc106660ad3c5eeb17cdf30fc290b5850b (diff)
Merge "Fix GATT client leakage when scan is throttled (1/2)" am: 3cc1ad87f0 am: d019cce887 am: ced5e47a3d
am: 2a43dcbc10 Change-Id: I9dc49a2a30eca9ce4d78ad8d5b289db1600f2ff3
-rw-r--r--core/java/android/bluetooth/le/BluetoothLeScanner.java10
-rw-r--r--core/java/android/bluetooth/le/ScanCallback.java6
2 files changed, 15 insertions, 1 deletions
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index 9a0f70fe9f72..c8ed7ef719d9 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -345,6 +345,7 @@ public final class BluetoothLeScanner {
private List<List<ResultStorageDescriptor>> mResultStorages;
// mLeHandle 0: not registered
+ // -2: registration failed because app is scanning to frequently
// -1: scan stopped or registration failed
// > 0: registered and scan started
private int mScannerId;
@@ -365,7 +366,7 @@ public final class BluetoothLeScanner {
public void startRegistration() {
synchronized (this) {
// Scan stopped.
- if (mScannerId == -1) return;
+ if (mScannerId == -1 || mScannerId == -2) return;
try {
mBluetoothGatt.registerScanner(this, mWorkSource);
wait(REGISTRATION_CALLBACK_TIMEOUT_MILLIS);
@@ -379,6 +380,10 @@ public final class BluetoothLeScanner {
// Registration timed out or got exception, reset scannerId to -1 so no
// subsequent operations can proceed.
if (mScannerId == 0) mScannerId = -1;
+
+ // If scanning too frequently, don't report anything to the app.
+ if (mScannerId == -2) return;
+
postCallbackError(mScanCallback,
ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED);
}
@@ -438,6 +443,9 @@ public final class BluetoothLeScanner {
Log.e(TAG, "fail to start le scan: " + e);
mScannerId = -1;
}
+ } else if (status == ScanCallback.SCAN_FAILED_SCANNING_TOO_FREQUENTLY) {
+ // applicaiton was scanning too frequently
+ mScannerId = -2;
} else {
// registration failed
mScannerId = -1;
diff --git a/core/java/android/bluetooth/le/ScanCallback.java b/core/java/android/bluetooth/le/ScanCallback.java
index fcbc2c74f0dd..53d9310a1236 100644
--- a/core/java/android/bluetooth/le/ScanCallback.java
+++ b/core/java/android/bluetooth/le/ScanCallback.java
@@ -51,6 +51,12 @@ public abstract class ScanCallback {
*/
public static final int SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES = 5;
+ /**
+ * Fails to start scan as application tries to scan too frequently.
+ * @hide
+ */
+ public static final int SCAN_FAILED_SCANNING_TOO_FREQUENTLY = 6;
+
static final int NO_ERROR = 0;
/**