am 5c0f3e50: Merge "Cannot enable Bluetooth after using airplane and Bluetooth tethering sequentially" into jb-mr1.1-dev
* commit '5c0f3e5075c8ac8b22bbaeb32bddfada9657577a': Cannot enable Bluetooth after using airplane and Bluetooth tethering sequentially
This commit is contained in:
@@ -982,14 +982,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
sendBluetoothStateCallback(isUp);
|
||||
|
||||
//If Bluetooth is off, send service down event to proxy objects, and unbind
|
||||
if (!isUp) {
|
||||
//Only unbind with mEnable flag not set
|
||||
//For race condition: disable and enable back-to-back
|
||||
//Avoid unbind right after enable due to callback from disable
|
||||
if ((!mEnable) && (mBluetooth != null)) {
|
||||
sendBluetoothServiceDownCallback();
|
||||
unbindAndFinish();
|
||||
}
|
||||
if (!isUp && canUnbindBluetoothService()) {
|
||||
sendBluetoothServiceDownCallback();
|
||||
unbindAndFinish();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1037,4 +1032,22 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
|
||||
Log.e(TAG,"waitForOnOff time out");
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean canUnbindBluetoothService() {
|
||||
synchronized(mConnection) {
|
||||
//Only unbind with mEnable flag not set
|
||||
//For race condition: disable and enable back-to-back
|
||||
//Avoid unbind right after enable due to callback from disable
|
||||
//Only unbind with Bluetooth at OFF state
|
||||
//Only unbind without any MESSAGE_BLUETOOTH_STATE_CHANGE message
|
||||
try {
|
||||
if (mEnable || (mBluetooth == null)) return false;
|
||||
if (mHandler.hasMessages(MESSAGE_BLUETOOTH_STATE_CHANGE)) return false;
|
||||
return (mBluetooth.getState() == BluetoothAdapter.STATE_OFF);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "getState()", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user