Stop network scan before manual select network
Otherwise device could not connect to network.
Bug: 339226604
Test: manual - Choose network
Change-Id: Ia7e52ad94d5406cab42bd8e7b25ba7e4e13c67fc
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 9455b70..a16f4b5 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -56,6 +56,8 @@
import kotlin.Unit;
+import kotlinx.coroutines.Job;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -96,6 +98,8 @@
private AtomicBoolean mShouldFilterOutSatellitePlmn = new AtomicBoolean();
private NetworkScanRepository mNetworkScanRepository;
+ @Nullable
+ private Job mNetworkScanJob = null;
private NetworkSelectRepository mNetworkSelectRepository;
@@ -213,13 +217,14 @@
private void launchNetworkScan() {
setProgressBarVisible(true);
- mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(), (networkScanResult) -> {
- if (isPreferenceScreenEnabled()) {
- scanResultHandler(networkScanResult);
- }
+ mNetworkScanJob = mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(),
+ (networkScanResult) -> {
+ if (isPreferenceScreenEnabled()) {
+ scanResultHandler(networkScanResult);
+ }
- return Unit.INSTANCE;
- });
+ return Unit.INSTANCE;
+ });
}
/**
@@ -245,6 +250,12 @@
return false;
}
+ // Need stop network scan before manual select network.
+ if (mNetworkScanJob != null) {
+ mNetworkScanJob.cancel(null);
+ mNetworkScanJob = null;
+ }
+
// Refresh the last selected item in case users reselect network.
clearPreferenceSummary();
if (mSelectedPreference != null) {
diff --git a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
index 4ae5842..0e15033 100644
--- a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
+++ b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
@@ -52,9 +52,8 @@
private val telephonyManager = context.telephonyManager(subId)
/** TODO: Move this to UI layer, when UI layer migrated to Kotlin. */
- fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) {
+ fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) =
networkScanFlow().collectLatestWithLifecycle(lifecycleOwner, action = onResult)
- }
data class CellInfoScanKey(
val title: String?,
@@ -101,7 +100,10 @@
callback,
)
- awaitClose { networkScan.stopScan() }
+ awaitClose {
+ networkScan.stopScan()
+ Log.d(TAG, "network scan stopped")
+ }
}.conflate().onEach { Log.d(TAG, "networkScanFlow: $it") }.flowOn(Dispatchers.Default)
/** Create network scan for allowed network types. */