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

Commit c79e14a2 authored by Yiyi Shen's avatar Yiyi Shen
Browse files

Move setScanMode to background thread to avoid ANR

Test: atest
Bug: 397951829
Flag: EXEMPT small fix
Change-Id: I6450fc9cef1cfea3bb940e5d37a552df1f75dd23
parent b96eb497
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.IntentFilter;

import androidx.annotation.VisibleForTesting;

import com.android.settingslib.utils.ThreadUtils;

/** Helper class, intended to be used by an Activity, to keep the local Bluetooth adapter in
 *  discoverable mode indefinitely. By default setting the scan mode to
 *  BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE will time out after some time, but some
@@ -55,10 +57,12 @@ public class AlwaysDiscoverable extends BroadcastReceiver {
        mContext.registerReceiver(this, mIntentFilter,
                Context.RECEIVER_EXPORTED_UNAUDITED);
        mStarted = true;
        ThreadUtils.postOnBackgroundThread(() -> {
            if (mBluetoothAdapter.getScanMode()
                    != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
                mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
            }
        });
    }

    public void stop() {
@@ -67,7 +71,8 @@ public class AlwaysDiscoverable extends BroadcastReceiver {
        }
        mContext.unregisterReceiver(this);
        mStarted = false;
        mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
        ThreadUtils.postOnBackgroundThread(
                () -> mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE));
    }

    @Override
@@ -76,9 +81,11 @@ public class AlwaysDiscoverable extends BroadcastReceiver {
        if (action != BluetoothAdapter.ACTION_SCAN_MODE_CHANGED) {
            return;
        }
        ThreadUtils.postOnBackgroundThread(() -> {
            if (mBluetoothAdapter.getScanMode()
                    != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
                mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
            }
        });
    }
}