diff options
author | Jakub Pawlowski <jpawlowski@google.com> | 2017-08-29 08:09:15 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-08-29 08:09:15 +0000 |
commit | 957d82ce38de8621a9c1e64d8d82b4a0f4e10a64 (patch) | |
tree | ccdf18c75404bc952b09eaa5d5fd3b1fc3982293 /framework/java/android/bluetooth/le/BluetoothLeScanner.java | |
parent | c7e7f5c9303e0e89912f559d7deefdbf502a30af (diff) | |
parent | 01ea3736138c612f04ccee60adf68a5b0e2d5b7d (diff) |
Merge "Fix GATT client leakage when scan is throttled (1/2)"
am: 3cc1ad87f0
Change-Id: Ieda555f6f8bda35201327c6c6e0c97621b88671e
Diffstat (limited to 'framework/java/android/bluetooth/le/BluetoothLeScanner.java')
-rw-r--r-- | framework/java/android/bluetooth/le/BluetoothLeScanner.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/framework/java/android/bluetooth/le/BluetoothLeScanner.java b/framework/java/android/bluetooth/le/BluetoothLeScanner.java index 9a0f70fe9f..c8ed7ef719 100644 --- a/framework/java/android/bluetooth/le/BluetoothLeScanner.java +++ b/framework/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; |