Fix for Bluetooth not restarting on User Switch

The flag that keeps track of the Bluetooth adapter status(mEnable) is
not guarded correctly and could go out of sync with the adapter status.
This causes User Switch handling to not function correctly since it
checks for the status of the mEnable flag before restarting Bluetooth.
This fix queries the Bluetooth Adapter for the status instead of using
the mEnable flag.

Bug: b/37648701
Test: Tested switching users multiple times in both phone and carkit.
Also tested pairing and connection for sanity.

Change-Id: I17facecf8e1de90df11c11d5b0a184f48a0356e4
(cherry picked from commit 7d1203a2f4)
This commit is contained in:
Ram Periathiruvadi
2017-05-03 19:11:20 -07:00
committed by Andre Eisenbach
parent a40bb1ed4a
commit 88256d1a8a

View File

@@ -1697,7 +1697,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
mHandler.removeMessages(MESSAGE_USER_SWITCHED);
/* disable and enable BT when detect a user switch */
if (mEnable && mBluetooth != null) {
if (mBluetooth != null && isEnabled()) {
try {
mBluetoothLock.readLock().lock();
if (mBluetooth != null) {
@@ -1766,6 +1766,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
mState = BluetoothAdapter.STATE_OFF;
// enable
addActiveLog(REASON_USER_SWITCH, true);
// mEnable flag could have been reset on disableBLE. Reenable it.
mEnable = true;
handleEnable(mQuietEnable);
} else if (mBinding || mBluetooth != null) {
Message userMsg = mHandler.obtainMessage(MESSAGE_USER_SWITCHED);