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

Commit 956894ca authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Fix lateinit property allowedNetworkTypesFlow

Which has not been initialized.

Convert it to factory to fix.

Fix: 317353030
Test: manual - on Mobile Settings
Test: unit test
Change-Id: Ie5f22d47cb3f3fe036c706ba77ed3bdaad0b54a2
parent 5e27df82
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