diff options
| -rw-r--r-- | services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java | 36 | 
1 files changed, 27 insertions, 9 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 ad09f7cd3dde..33f1b4282e97 100644 --- a/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java +++ b/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java @@ -184,13 +184,21 @@ class BleCompanionDeviceScanner implements AssociationStore.OnChangeListener {      @MainThread      private void startScan() {          enforceInitialized(); -        // This method should not be called if scan is already in progress. -        if (mScanning) throw new IllegalStateException("Scan is already in progress."); -        // Neither should this method be called if the adapter is not available. -        if (mBleScanner == null) throw new IllegalStateException("BLE is not available.");          if (DEBUG) Log.i(TAG, "startScan()"); +        // This method should not be called if scan is already in progress. +        if (mScanning) { +            Slog.w(TAG, "Scan is already in progress."); +            return; +        } + +        // Neither should this method be called if the adapter is not available. +        if (mBleScanner == null) { +            Slog.w(TAG, "BLE is not available."); +            return; +        } +          // Collect MAC addresses from all associations.          final Set<String> macAddresses = new HashSet<>();          for (AssociationInfo association : mAssociationStore.getAssociations()) { @@ -221,8 +229,18 @@ class BleCompanionDeviceScanner implements AssociationStore.OnChangeListener {              filters.add(filter);          } -        mBleScanner.startScan(filters, SCAN_SETTINGS, mScanCallback); -        mScanning = true; +        // BluetoothLeScanner will throw an IllegalStateException if startScan() is called while LE +        // is not enabled. +        if (mBtAdapter.isLeEnabled()) { +            try { +                mBleScanner.startScan(filters, SCAN_SETTINGS, mScanCallback); +                mScanning = true; +            } catch (IllegalStateException e) { +                Slog.w(TAG, "Exception while starting BLE scanning", e); +            } +        } else { +            Slog.w(TAG, "BLE scanning is not turned on"); +        }      }      private void stopScanIfNeeded() { @@ -240,11 +258,11 @@ class BleCompanionDeviceScanner implements AssociationStore.OnChangeListener {          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. +            } catch (IllegalStateException e) {                  Slog.w(TAG, "Exception while stopping BLE scanning", e);              } +        } else { +            Slog.w(TAG, "BLE scanning is not turned on");          }          mScanning = false;  |