diff options
author | Marie Janssen <jamuraa@google.com> | 2016-10-25 10:47:51 -0700 |
---|---|---|
committer | gitbuildkicker <android-build@google.com> | 2016-10-26 18:33:02 -0700 |
commit | 75cdae7d00b1fee471bc551675748bfa7982084a (patch) | |
tree | 08daed78f10b85765571338f4327fc77444ff23d | |
parent | 2c30838b8b64bce630e0683bc95c3a573d87dbf1 (diff) | |
download | base-75cdae7d00b1fee471bc551675748bfa7982084a.tar.gz |
Bluetooth: prevent enabling BLE in airplane mode
Enabling BLE in airplane mode puts BluetoothManagerService in an
unexpected state which causes Bluetooth to be on when airplane mode
is disabled.
Also fixes a bug where a crash of a BLE client would trigger a restart
into ON mode.
Test: SL4A BleBackgroundScanTest:test_airplane_mode_disables_ble
Bug: 32140251
Bug: 32140271
Bug: 32369494
Change-Id: Ie65157e65c3a1ca914f567a7a0c631175d1e5835
(cherry picked from commit bd93b7b3dc6141cef6236cf0ca7dcc5acf5bfeed)
(cherry picked from commit a80d745c656f1e09aa9331002f613883220ca029)
-rw-r--r-- | core/java/android/bluetooth/BluetoothAdapter.java | 16 | ||||
-rw-r--r-- | services/core/java/com/android/server/BluetoothManagerService.java | 10 |
2 files changed, 13 insertions, 13 deletions
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 6be5a9725dca..50c8e275ff86 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -765,19 +765,13 @@ public final class BluetoothAdapter { public boolean enableBLE() { if (!isBleScanAlwaysAvailable()) return false; - if (isLeEnabled() == true) { - if (DBG) Log.d(TAG, "enableBLE(): BT is already enabled..!"); - try { - mManagerService.updateBleAppCount(mToken, true); - } catch (RemoteException e) { - Log.e(TAG, "", e); - } - return true; - } - try { - if (DBG) Log.d(TAG, "Calling enableBLE"); mManagerService.updateBleAppCount(mToken, true); + if (isLeEnabled()) { + if (DBG) Log.d(TAG, "enableBLE(): Bluetooth already enabled"); + return true; + } + if (DBG) Log.d(TAG, "enableBLE(): Calling enable"); return mManagerService.enable(); } catch (RemoteException e) { Log.e(TAG, "", e); diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 6757fcce43ce..52be811fad17 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -217,6 +217,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mBluetoothLock.readLock().lock(); if (mBluetooth != null) { mBluetooth.onBrEdrDown(); + mEnable = false; mEnableExternal = false; } } catch (RemoteException e) { @@ -449,14 +450,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub { class ClientDeathRecipient implements IBinder.DeathRecipient { public void binderDied() { - if (DBG) Slog.d(TAG, "Binder is dead - unregister Ble App"); + if (DBG) Slog.d(TAG, "Binder is dead - unregister Ble App"); if (mBleAppCount > 0) --mBleAppCount; if (mBleAppCount == 0) { if (DBG) Slog.d(TAG, "Disabling LE only mode after application crash"); try { mBluetoothLock.readLock().lock(); - if (mBluetooth != null) { + if (mBluetooth != null && + mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) { + mEnable = false; mBluetooth.onBrEdrDown(); } } catch (RemoteException e) { @@ -473,6 +476,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub { @Override public boolean isBleScanAlwaysAvailable() { + if (isAirplaneModeOn() && !mEnable) { + return false; + } try { return (Settings.Global.getInt(mContentResolver, Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE)) != 0; |