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

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

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

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

* commit 'ccacaf94':
  Cannot enable Bluetooth after using airplane and Bluetooth tethering sequentially
parents ce4a9a34 ccacaf94
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;
    }
}