diff options
author | 2017-08-29 08:42:24 +0000 | |
---|---|---|
committer | 2017-08-29 08:42:24 +0000 | |
commit | 909abc0bdb0e5e90390c61b9c42e91b0086374f2 (patch) | |
tree | 1ce2798bdca4031fa4f8ae45a12e0320e0a01a61 | |
parent | 6820aafea933449868667817f10eb6c991b7e5fe (diff) | |
parent | 2a43dcbc106660ad3c5eeb17cdf30fc290b5850b (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.java | 10 | ||||
-rw-r--r-- | core/java/android/bluetooth/le/ScanCallback.java | 6 |
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; /** |