Merge "Move setScanMode to background thread to avoid ANR" into main

This commit is contained in:
Yiyi Shen
2025-03-17 02:58:02 -07:00
committed by Android (Google) Code Review

View File

@@ -24,6 +24,8 @@ import android.content.IntentFilter;
import androidx.annotation.VisibleForTesting; 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 /** 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 * discoverable mode indefinitely. By default setting the scan mode to
* BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE will time out after some time, but some * 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, mContext.registerReceiver(this, mIntentFilter,
Context.RECEIVER_EXPORTED_UNAUDITED); Context.RECEIVER_EXPORTED_UNAUDITED);
mStarted = true; mStarted = true;
if (mBluetoothAdapter.getScanMode() ThreadUtils.postOnBackgroundThread(() -> {
!= BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { if (mBluetoothAdapter.getScanMode()
mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE); != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
} mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
}
});
} }
public void stop() { public void stop() {
@@ -67,7 +71,8 @@ public class AlwaysDiscoverable extends BroadcastReceiver {
} }
mContext.unregisterReceiver(this); mContext.unregisterReceiver(this);
mStarted = false; mStarted = false;
mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE); ThreadUtils.postOnBackgroundThread(
() -> mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE));
} }
@Override @Override
@@ -76,9 +81,11 @@ public class AlwaysDiscoverable extends BroadcastReceiver {
if (action != BluetoothAdapter.ACTION_SCAN_MODE_CHANGED) { if (action != BluetoothAdapter.ACTION_SCAN_MODE_CHANGED) {
return; return;
} }
if (mBluetoothAdapter.getScanMode() ThreadUtils.postOnBackgroundThread(() -> {
!= BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { if (mBluetoothAdapter.getScanMode()
mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE); != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
} mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
}
});
} }
} }