Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29a3a0f4 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix lateinit property allowedNetworkTypesFlow" into main

parents be153867 956894ca
Loading
Loading
Loading
Loading
+10 −21
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.Intent
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 @@ import kotlinx.coroutines.withContext
/**
 * 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 @@ class OpenNetworkSelectPagePreferenceController(context: Context, key: String) :
     */
    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 @@ class OpenNetworkSelectPagePreferenceController(context: Context, key: String) :
    }

    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) {
+8 −10
Original line number Diff line number Diff line
@@ -59,21 +59,19 @@ class OpenNetworkSelectPagePreferenceControllerTest {
    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