Merge "Fix GATT client leakage when scan is throttled (1/2)" am: 3cc1ad87f0
am: d019cce887
Change-Id: I24d4dbf1344b13c558aa6974dfee6fd0e8549056
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user