Catch Exceptions thrown by BleScanner in CDM

Catch any RuntimeExceptions thrown by BluetoothLeScanner.stopScan() in
BleCompanionDeviceScanner in CDM service.

Bug: 219684162
Test: atest CtsCompanionDeviceManagerCoreTestCases
Test: atest CtsCompanionDeviceManagerUiAutomationTestCases
Change-Id: Ifc75108cb197c4bc324b906a4e41aff94c843960
This commit is contained in:
Sergey Nikolaienkov
2022-02-17 10:34:22 +01:00
parent 45b9ed8368
commit 20c1ba94f6

View File

@@ -21,8 +21,6 @@ import static android.bluetooth.BluetoothAdapter.ACTION_BLE_STATE_CHANGED;
import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED;
import static android.bluetooth.BluetoothAdapter.EXTRA_PREVIOUS_STATE;
import static android.bluetooth.BluetoothAdapter.EXTRA_STATE;
import static android.bluetooth.BluetoothAdapter.STATE_BLE_ON;
import static android.bluetooth.BluetoothAdapter.STATE_ON;
import static android.bluetooth.BluetoothAdapter.nameForState;
import static android.bluetooth.le.ScanCallback.SCAN_FAILED_ALREADY_STARTED;
import static android.bluetooth.le.ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED;
@@ -230,18 +228,24 @@ class BleCompanionDeviceScanner implements AssociationStore.OnChangeListener {
if (DEBUG) Log.i(TAG, "stopScan()");
if (!mScanning) {
Log.d(TAG, " > not scanning.");
if (DEBUG) Log.d(TAG, " > not scanning.");
return;
}
// mScanCallback is non-null here - it cannot be null when mScanning is true.
// BluetoothLeScanner will throw an IllegalStateException if stopScan() is called while LE
// is not enabled.
if (mBtAdapter.isLeEnabled()) {
try {
mBleScanner.stopScan(mScanCallback);
} catch (RuntimeException e) {
// Just to be sure not to crash system server here if BluetoothLeScanner throws
// another RuntimeException.
Slog.w(TAG, "Exception while stopping BLE scanning", e);
}
}
mScanning = false;
if (mBtAdapter.getState() != STATE_ON && mBtAdapter.getState() != STATE_BLE_ON) {
Log.d(TAG, "BT Adapter is not turned ON");
return;
}
mBleScanner.stopScan(mScanCallback);
}
@MainThread