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

Commit 6d3c58f7 authored by William Escande's avatar William Escande
Browse files

Replace mBinding with hasMessage

We should always have a MESSAGE_TIMEOUT_BIND on the queue if we are
binding

Bug: 286082382
Bug: 262605980
Test: atest ServiceBluetoothTests | this is No-op change
Change-Id: I4b71eb985812c1faf07a45be8dd355365881826b
parent 5fc90712
Loading
Loading
Loading
Loading
+23 −42
Original line number Diff line number Diff line
@@ -210,8 +210,7 @@ class BluetoothManagerService {
    private AdapterBinder mAdapter = null;

    private IBluetoothGatt mBluetoothGatt = null;
    private boolean mBinding = false;
    private boolean mUnbinding = false;

    private List<Integer> mSupportedProfileList = new ArrayList<>();

    private BluetoothModeChangeHelper mBluetoothModeChangeHelper;
@@ -1127,8 +1126,8 @@ class BluetoothManagerService {
                            + packageName
                            + "):  mAdapter="
                            + mAdapter
                            + " mBinding="
                            + mBinding
                            + " isBinding="
                            + isBinding()
                            + " mState="
                            + mState);
        }
@@ -1163,8 +1162,8 @@ class BluetoothManagerService {
                            + packageName
                            + "):  mAdapter="
                            + mAdapter
                            + " mBinding="
                            + mBinding
                            + " isBinding="
                            + isBinding()
                            + " mState="
                            + mState);
        }
@@ -1312,8 +1311,8 @@ class BluetoothManagerService {
                            + packageName
                            + "):  mAdapter="
                            + mAdapter
                            + " mBinding="
                            + mBinding
                            + " isBinding="
                            + isBinding()
                            + " mState="
                            + mState);
        }
@@ -1366,8 +1365,8 @@ class BluetoothManagerService {
                            + mAdapter
                            + ", persist="
                            + persist
                            + ", mBinding="
                            + mBinding);
                            + ", isBinding="
                            + isBinding());
        }

        synchronized (mReceiver) {
@@ -1392,22 +1391,11 @@ class BluetoothManagerService {
    @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED)
    void unbindAndFinish() {
        if (DBG) {
            Log.d(
                    TAG,
                    "unbindAndFinish(): mAdapter="
                            + mAdapter
                            + " mBinding="
                            + mBinding
                            + " mUnbinding="
                            + mUnbinding);
            Log.d(TAG, "unbindAndFinish(): mAdapter=" + mAdapter + " isBinding=" + isBinding());
        }

        mAdapterLock.writeLock().lock();
        try {
            if (mUnbinding) {
                return;
            }
            mUnbinding = true;
            mHandler.removeMessages(MESSAGE_BLUETOOTH_STATE_CHANGE);
            mHandler.removeMessages(MESSAGE_BIND_PROFILE_SERVICE);
            if (mAdapter != null) {
@@ -1420,10 +1408,7 @@ class BluetoothManagerService {
                }
                mAdapter = null;
                mContext.unbindService(mConnection);
                mUnbinding = false;
                mBinding = false;
            } else {
                mUnbinding = false;
                mHandler.removeMessages(MESSAGE_TIMEOUT_BIND);
            }
            mBluetoothGatt = null;
        } finally {
@@ -1916,7 +1901,7 @@ class BluetoothManagerService {
                    }
                    mAdapterLock.writeLock().lock();
                    try {
                        if (mAdapter == null && !mBinding) {
                        if (mAdapter == null && !isBinding()) {
                            if (DBG) {
                                Log.d(TAG, "Binding to service to get name and address");
                            }
@@ -1929,8 +1914,6 @@ class BluetoothManagerService {
                                    Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT,
                                    UserHandle.CURRENT)) {
                                mHandler.removeMessages(MESSAGE_TIMEOUT_BIND);
                            } else {
                                mBinding = true;
                            }
                        } else if (mAdapter != null) {
                            try {
@@ -2036,7 +2019,7 @@ class BluetoothManagerService {

                case MESSAGE_DISABLE:
                    if (mHandler.hasMessages(MESSAGE_HANDLE_DISABLE_DELAYED)
                            || mBinding
                            || isBinding()
                            || mHandler.hasMessages(MESSAGE_HANDLE_ENABLE_DELAYED)) {
                        // We are handling enable or disable right now, wait for it.
                        mHandler.sendEmptyMessageDelayed(MESSAGE_DISABLE, ENABLE_DISABLE_DELAY_MS);
@@ -2044,9 +2027,7 @@ class BluetoothManagerService {
                    }

                    if (DBG) {
                        Log.d(
                                TAG,
                                "MESSAGE_DISABLE: mAdapter=" + mAdapter + ", mBinding=" + mBinding);
                        Log.d(TAG, "MESSAGE_DISABLE: mAdapter=" + mAdapter);
                    }
                    mHandler.removeMessages(MESSAGE_RESTART_BLUETOOTH_SERVICE);

@@ -2200,7 +2181,6 @@ class BluetoothManagerService {
                        // Remove timeout
                        mHandler.removeMessages(MESSAGE_TIMEOUT_BIND);

                        mBinding = false;
                        mAdapter = BluetoothServerProxy.getInstance().createAdapterBinder(service);

                        int foregroundUserId = ActivityManager.getCurrentUser();
@@ -2379,9 +2359,8 @@ class BluetoothManagerService {

                case MESSAGE_TIMEOUT_BIND:
                    Log.e(TAG, "MESSAGE_TIMEOUT_BIND");
                    mAdapterLock.writeLock().lock();
                    mBinding = false;
                    mAdapterLock.writeLock().unlock();
                    // TODO(b/286082382): Timeout should be more than a log. We should at least call
                    // context.unbindService, eventually log a metric with it
                    break;

                case MESSAGE_USER_SWITCHED:
@@ -2394,7 +2373,7 @@ class BluetoothManagerService {
                    /* disable and enable BT when detect a user switch */
                    if (mAdapter != null && isEnabled()) {
                        restartForReason(BluetoothProtoEnums.ENABLE_DISABLE_REASON_USER_SWITCH);
                    } else if (mBinding || mAdapter != null) {
                    } else if (isBinding() || mAdapter != null) {
                        Message userMsg = mHandler.obtainMessage(MESSAGE_USER_SWITCHED);
                        userMsg.arg2 = 1 + msg.arg2;
                        // if user is switched when service is binding retry after a delay
@@ -2411,7 +2390,7 @@ class BluetoothManagerService {
                    }
                    mHandler.removeMessages(MESSAGE_USER_SWITCHED);

                    if (mEnable && !mBinding && (mAdapter == null)) {
                    if (mEnable && !isBinding() && (mAdapter == null)) {
                        // We should be connected, but we gave up for some
                        // reason; maybe the Bluetooth service wasn't encryption
                        // aware, so try binding again.
@@ -2490,13 +2469,17 @@ class BluetoothManagerService {
        }
    }

    private boolean isBinding() {
        return mHandler.hasMessages(MESSAGE_TIMEOUT_BIND);
    }

    @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
    private void handleEnable(boolean quietMode) {
        mQuietEnable = quietMode;

        mAdapterLock.writeLock().lock();
        try {
            if (mAdapter == null && !mBinding) {
            if (mAdapter == null && !isBinding()) {
                Log.d(TAG, "binding Bluetooth service");
                // Start bind timeout and bind
                mHandler.sendEmptyMessageDelayed(MESSAGE_TIMEOUT_BIND, TIMEOUT_BIND_MS);
@@ -2507,8 +2490,6 @@ class BluetoothManagerService {
                        Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT,
                        UserHandle.CURRENT)) {
                    mHandler.removeMessages(MESSAGE_TIMEOUT_BIND);
                } else {
                    mBinding = true;
                }
            } else if (mAdapter != null) {
                // Enable bluetooth