Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccacaf94 authored by Zhihai Xu's avatar Zhihai Xu Committed by Android Git Automerger
Browse files

am a6433475: am 5c0f3e50: Merge "Cannot enable Bluetooth after using airplane...

am a6433475: am 5c0f3e50: Merge "Cannot enable Bluetooth after using airplane and Bluetooth tethering sequentially" into jb-mr1.1-dev

* commit 'a6433475':
  Cannot enable Bluetooth after using airplane and Bluetooth tethering sequentially
parents 33a8b28f a6433475
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -982,16 +982,11 @@ 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)) {
                if (!isUp && canUnbindBluetoothService()) {
                    sendBluetoothServiceDownCallback();
                    unbindAndFinish();
                }
            }
            }

            //Send broadcast message to everyone else
            Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
@@ -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;
    }
}