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()) {