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. */