Disable Bluetooth if BLE was disabled while enabling
* Call onBrEdrDown if BLE app count is 0 when entering BLE_ON state and
the Bluetooth ON was triggered via enableBle().
This fixes an issue that Bluetooth automatically turns ON if gms calls
enableBle() then disableBle() in a short time.
* Fix a deadlock bug that acquires writeLock in a readLock.
Bug: 153767389
Bug: 155950370
Test: Manual
Change-Id: I4f92581465de81ffe9b45fb042b5cc43e5ab4136
Merged-In: I4f92581465de81ffe9b45fb042b5cc43e5ab4136
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
index ebaebae..2297d4b 100644
--- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java
+++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
@@ -873,7 +873,8 @@
}
/**
- * Call IBluetooth.onLeServiceUp() to continue if Bluetooth should be on.
+ * Call IBluetooth.onLeServiceUp() to continue if Bluetooth should be on,
+ * call IBluetooth.onBrEdrDown() to disable if Bluetooth should be off.
*/
private void continueFromBleOnState() {
if (DBG) {
@@ -885,11 +886,10 @@
Slog.e(TAG, "onBluetoothServiceUp: mBluetooth is null!");
return;
}
- if (!mEnableExternal && !isBleAppPresent() && isAirplaneModeOn()) {
- // Airplane mode is turned on while enabling BLE only mode, disable
- // BLE now.
- disableBleScanMode();
- sendBrEdrDownCallback();
+ if (!mEnableExternal && !isBleAppPresent()) {
+ Slog.i(TAG, "Bluetooth was disabled while enabling BLE, disable BLE now");
+ mEnable = false;
+ mBluetooth.onBrEdrDown();
return;
}
if (isBluetoothPersistedStateOnBluetooth() || !isBleAppPresent()) {