summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpackages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java3
-rw-r--r--services/core/java/com/android/server/BluetoothManagerService.java15
2 files changed, 16 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java
index 9c5abf3a00dd..26836099c9de 100755
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java
@@ -208,7 +208,7 @@ public final class LocalBluetoothAdapter {
return false;
}
- public void setBluetoothEnabled(boolean enabled) {
+ public boolean setBluetoothEnabled(boolean enabled) {
boolean success = enabled
? mAdapter.enable()
: mAdapter.disable();
@@ -225,6 +225,7 @@ public final class LocalBluetoothAdapter {
syncBluetoothState();
}
+ return success;
}
public BluetoothDevice getRemoteDevice(String address) {
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 0a814ab579d3..5e8687a904c1 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -613,7 +613,20 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
"Need BLUETOOTH ADMIN permission");
if (DBG) {
Slog.d(TAG,"enable(): mBluetooth =" + mBluetooth +
- " mBinding = " + mBinding);
+ " mBinding = " + mBinding + " mState = " + mState);
+ }
+ // We do not honor ON requests when the adapter is already turned ON or in the process of
+ // turning ON.
+ // As a protective mechanism to make sure that the native stack gets cleaned up properly
+ // before turning it back ON we ignore requests while the bluetooth is turning OFF.
+ // Bug: b/28318203
+ if (mState == BluetoothAdapter.STATE_BLE_TURNING_OFF ||
+ mState == BluetoothAdapter.STATE_TURNING_OFF ||
+ mState == BluetoothAdapter.STATE_ON ||
+ mState == BluetoothAdapter.STATE_BLE_ON ||
+ mState == BluetoothAdapter.STATE_TURNING_ON ||
+ mState == BluetoothAdapter.STATE_BLE_TURNING_ON) {
+ return false;
}
synchronized(mReceiver) {