From 20c1ba94f6835077ae329d787ef49d765892b50c Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Thu, 17 Feb 2022 10:34:22 +0100 Subject: [PATCH] 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 --- .../presence/BleCompanionDeviceScanner.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java b/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java index b026990280a73..33301b1806193 100644 --- a/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java +++ b/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java @@ -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