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
This commit is contained in:
Ram Periathiruvadi
2017-05-03 19:11:20 -07:00
committed by Andre Eisenbach
parent 73818566d6
commit 7d1203a2f4

View File

@@ -1699,7 +1699,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) {
@@ -1768,6 +1768,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);