diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index 92f1c83c892e5..7cb5294336521 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -571,7 +571,7 @@ public final class ShutdownThread extends Thread { Thread t = new Thread() { public void run() { boolean nfcOff; - boolean bluetoothOff; + boolean bluetoothReadyForShutdown; boolean radioOff; final INfcAdapter nfc = @@ -595,15 +595,15 @@ public final class ShutdownThread extends Thread { } try { - bluetoothOff = bluetooth == null || + bluetoothReadyForShutdown = bluetooth == null || bluetooth.getState() == BluetoothAdapter.STATE_OFF; - if (!bluetoothOff) { + if (!bluetoothReadyForShutdown) { Log.w(TAG, "Disabling Bluetooth..."); bluetooth.disable(mContext.getPackageName(), false); // disable but don't persist new state } } catch (RemoteException ex) { Log.e(TAG, "RemoteException during bluetooth shutdown", ex); - bluetoothOff = true; + bluetoothReadyForShutdown = true; } try { @@ -628,14 +628,19 @@ public final class ShutdownThread extends Thread { sInstance.setRebootProgress(status, null); } - if (!bluetoothOff) { + if (!bluetoothReadyForShutdown) { try { - bluetoothOff = bluetooth.getState() == BluetoothAdapter.STATE_OFF; + // BLE only mode can happen when BT is turned off + // We will continue shutting down in such case + bluetoothReadyForShutdown = + bluetooth.getState() == BluetoothAdapter.STATE_OFF || + bluetooth.getState() == BluetoothAdapter.STATE_BLE_TURNING_OFF || + bluetooth.getState() == BluetoothAdapter.STATE_BLE_ON; } catch (RemoteException ex) { Log.e(TAG, "RemoteException during bluetooth shutdown", ex); - bluetoothOff = true; + bluetoothReadyForShutdown = true; } - if (bluetoothOff) { + if (bluetoothReadyForShutdown) { Log.i(TAG, "Bluetooth turned off."); } } @@ -662,7 +667,7 @@ public final class ShutdownThread extends Thread { } } - if (radioOff && bluetoothOff && nfcOff) { + if (radioOff && bluetoothReadyForShutdown && nfcOff) { Log.i(TAG, "NFC, Radio and Bluetooth shutdown complete."); done[0] = true; break;