Stop network scan before manual select network

Otherwise device could not connect to network.

Bug: 339226604
Test: manual - Choose network
Change-Id: Ia7e52ad94d5406cab42bd8e7b25ba7e4e13c67fc
This commit is contained in:
Chaohui Wang
2024-06-05 17:26:42 +08:00
parent 665b2a586e
commit 39dfb52c6f
2 changed files with 22 additions and 9 deletions

View File

@@ -56,6 +56,8 @@ import com.google.common.collect.ImmutableList;
import kotlin.Unit;
import kotlinx.coroutines.Job;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -96,6 +98,8 @@ public class NetworkSelectSettings extends DashboardFragment {
private AtomicBoolean mShouldFilterOutSatellitePlmn = new AtomicBoolean();
private NetworkScanRepository mNetworkScanRepository;
@Nullable
private Job mNetworkScanJob = null;
private NetworkSelectRepository mNetworkSelectRepository;
@@ -213,13 +217,14 @@ public class NetworkSelectSettings extends DashboardFragment {
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 @@ public class NetworkSelectSettings extends DashboardFragment {
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) {

View File

@@ -52,9 +52,8 @@ class NetworkScanRepository(private val context: Context, subId: Int) {
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 @@ class NetworkScanRepository(private val context: Context, subId: Int) {
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. */