Merge "Fix lateinit property allowedNetworkTypesFlow" into main
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.kt b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.kt
index 1d2b73f..84cdec4 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.kt
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.kt
@@ -21,7 +21,6 @@
 import android.provider.Settings
 import android.telephony.ServiceState
 import android.telephony.TelephonyManager
-import androidx.annotation.VisibleForTesting
 import androidx.lifecycle.LifecycleOwner
 import androidx.preference.Preference
 import androidx.preference.PreferenceScreen
@@ -39,13 +38,16 @@
 /**
  * Preference controller for "Open network select"
  */
-class OpenNetworkSelectPagePreferenceController(context: Context, key: String) :
-    TelephonyBasePreferenceController(context, key),
+class OpenNetworkSelectPagePreferenceController @JvmOverloads constructor(
+    context: Context,
+    key: String,
+    private val allowedNetworkTypesFlowFactory: (subId: Int) -> Flow<Long> =
+        context::allowedNetworkTypesFlow,
+    private val serviceStateFlowFactory: (subId: Int) -> Flow<ServiceState> =
+        context::serviceStateFlow,
+) : TelephonyBasePreferenceController(context, key),
     AutoSelectPreferenceController.OnNetworkSelectModeListener {
 
-    private lateinit var allowedNetworkTypesFlow: Flow<Long>
-    private lateinit var serviceStateFlow: Flow<ServiceState>
-
     private var preference: Preference? = null
 
     /**
@@ -53,22 +55,9 @@
      */
     fun init(subId: Int): OpenNetworkSelectPagePreferenceController {
         mSubId = subId
-        allowedNetworkTypesFlow = mContext.allowedNetworkTypesFlow(subId)
-        serviceStateFlow = mContext.serviceStateFlow(subId)
         return this
     }
 
-    @VisibleForTesting
-    fun init(
-        subId: Int,
-        allowedNetworkTypesFlow: Flow<Long>,
-        serviceStateFlow: Flow<ServiceState>,
-    ) {
-        mSubId = subId
-        this.allowedNetworkTypesFlow = allowedNetworkTypesFlow
-        this.serviceStateFlow = serviceStateFlow
-    }
-
     override fun getAvailabilityStatus(subId: Int) =
         if (MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, subId)) AVAILABLE
         else CONDITIONALLY_UNAVAILABLE
@@ -83,13 +72,13 @@
     }
 
     override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) {
-        allowedNetworkTypesFlow.collectLatestWithLifecycle(viewLifecycleOwner) {
+        allowedNetworkTypesFlowFactory(mSubId).collectLatestWithLifecycle(viewLifecycleOwner) {
             preference?.isVisible = withContext(Dispatchers.Default) {
                 MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, mSubId)
             }
         }
 
-        serviceStateFlow
+        serviceStateFlowFactory(mSubId)
             .collectLatestWithLifecycle(viewLifecycleOwner) { serviceState ->
                 preference?.summary = if (serviceState.state == ServiceState.STATE_IN_SERVICE) {
                     withContext(Dispatchers.Default) {
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt
index b749a3a..0deeafb 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt
@@ -59,21 +59,19 @@
     private val preference = Preference(context).apply { key = TEST_KEY }
     private val preferenceScreen = PreferenceManager(context).createPreferenceScreen(context)
 
-    private val controller = OpenNetworkSelectPagePreferenceController(context, TEST_KEY)
-
     private val serviceState = ServiceState()
 
+    private val controller = OpenNetworkSelectPagePreferenceController(
+        context = context,
+        key = TEST_KEY,
+        allowedNetworkTypesFlowFactory = { emptyFlow() },
+        serviceStateFlowFactory = { flowOf(serviceState) },
+    ).init(subId = SUB_ID)
+
     @Before
     fun setUp() {
         preferenceScreen.addPreference(preference)
-        controller.apply {
-            init(
-                subId = SUB_ID,
-                allowedNetworkTypesFlow = emptyFlow(),
-                serviceStateFlow = flowOf(serviceState),
-            )
-            displayPreference(preferenceScreen)
-        }
+        controller.displayPreference(preferenceScreen)
     }
 
     @Test