Merge changes I99011feb,Ie066077f,I44e631cb into main

* changes:
  [Audiosharing] Handle source remove plus small refactor.
  [Audiosharing] Some UI tweaks (e.g, sort by RSSI)
  [Audiosharing] Add button action in detail page.
diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml
index 1a8ee08..04f248e 100644
--- a/res/xml/network_provider_internet.xml
+++ b/res/xml/network_provider_internet.xml
@@ -52,7 +52,6 @@
         settings:keywords="@string/keywords_more_mobile_networks"
         settings:userRestriction="no_config_mobile_networks"
         settings:isPreferenceVisible="@bool/config_show_sim_info"
-        settings:allowDividerAbove="true"
         settings:useAdminDisabledSummary="true"
         settings:searchable="@bool/config_show_sim_info"/>
 
diff --git a/src/com/android/settings/network/MobileNetworkListFragment.kt b/src/com/android/settings/network/MobileNetworkListFragment.kt
index 09b1150..e722866 100644
--- a/src/com/android/settings/network/MobileNetworkListFragment.kt
+++ b/src/com/android/settings/network/MobileNetworkListFragment.kt
@@ -26,8 +26,11 @@
 import com.android.settings.R
 import com.android.settings.SettingsPreferenceFragment
 import com.android.settings.dashboard.DashboardFragment
+import com.android.settings.flags.Flags
 import com.android.settings.network.telephony.MobileNetworkUtils
 import com.android.settings.search.BaseSearchIndexProvider
+import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
+import com.android.settings.spa.network.NetworkCellularGroupProvider
 import com.android.settingslib.search.SearchIndexable
 import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
 import com.android.settingslib.spaprivileged.framework.common.userManager
@@ -40,6 +43,15 @@
         collectAirplaneModeAndFinishIfOn()
     }
 
+    override fun onCreate(icicle: Bundle?) {
+        super.onCreate(icicle)
+
+        if (Flags.isDualSimOnboardingEnabled()) {
+            context?.startSpaActivity(NetworkCellularGroupProvider.name);
+            finish()
+        }
+    }
+
     override fun onResume() {
         super.onResume()
         // Disable the animation of the preference list
diff --git a/src/com/android/settings/network/SubscriptionInfoListViewModel.kt b/src/com/android/settings/network/SubscriptionInfoListViewModel.kt
index ed930d4..f682002 100644
--- a/src/com/android/settings/network/SubscriptionInfoListViewModel.kt
+++ b/src/com/android/settings/network/SubscriptionInfoListViewModel.kt
@@ -32,7 +32,19 @@
         application.getSystemService(SubscriptionManager::class.java)!!
     private val scope = viewModelScope + Dispatchers.Default
 
+    /**
+     * Getting the active Subscription list
+     */
+    //ToDo: renaming the function name
     val subscriptionInfoListFlow = application.subscriptionsChangedFlow().map {
         SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
     }.stateIn(scope, SharingStarted.Eagerly, initialValue = emptyList())
+
+    /**
+     * Getting the Selectable SubscriptionInfo List from the SubscriptionManager's
+     * getAvailableSubscriptionInfoList
+     */
+    val selectableSubscriptionInfoListFlow = application.subscriptionsChangedFlow().map {
+        SubscriptionUtil.getSelectableSubscriptionInfoList(application)
+    }.stateIn(scope, SharingStarted.Eagerly, initialValue = emptyList())
 }
diff --git a/src/com/android/settings/spa/SettingsSpaEnvironment.kt b/src/com/android/settings/spa/SettingsSpaEnvironment.kt
index ac1af80..41852e5 100644
--- a/src/com/android/settings/spa/SettingsSpaEnvironment.kt
+++ b/src/com/android/settings/spa/SettingsSpaEnvironment.kt
@@ -48,6 +48,7 @@
 import com.android.settings.spa.development.compat.PlatformCompatAppListPageProvider
 import com.android.settings.spa.home.HomePageProvider
 import com.android.settings.spa.network.NetworkAndInternetPageProvider
+import com.android.settings.spa.network.NetworkCellularGroupProvider
 import com.android.settings.spa.network.SimOnboardingPageProvider
 import com.android.settings.spa.notification.AppListNotificationsPageProvider
 import com.android.settings.spa.notification.NotificationMainPageProvider
@@ -118,6 +119,7 @@
         ApnEditPageProvider,
         SimOnboardingPageProvider,
         BatteryOptimizationModeAppListPageProvider,
+        NetworkCellularGroupProvider,
     )
 
     override val logger = if (FeatureFlagUtils.isEnabled(
diff --git a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt
new file mode 100644
index 0000000..e746d4a
--- /dev/null
+++ b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt
@@ -0,0 +1,465 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.spa.network
+
+import android.app.Application
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.os.Bundle
+import android.os.UserManager
+import android.telephony.SubscriptionInfo
+import android.telephony.SubscriptionManager
+import android.telephony.TelephonyManager
+import android.telephony.euicc.EuiccManager
+import android.util.Log
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.outlined.Message
+import androidx.compose.material.icons.outlined.Add
+import androidx.compose.material.icons.outlined.DataUsage
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableIntState
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.toMutableStateList
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
+import com.android.settings.R
+import com.android.settings.network.SubscriptionInfoListViewModel
+import com.android.settings.network.SubscriptionUtil
+import com.android.settings.network.telephony.MobileNetworkUtils
+import com.android.settings.wifi.WifiPickerTrackerHelper
+import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
+import com.android.settingslib.spa.framework.common.SettingsPageProvider
+import com.android.settingslib.spa.framework.common.createSettingsPage
+import com.android.settingslib.spa.framework.compose.navigator
+import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
+import com.android.settingslib.spa.widget.preference.ListPreferenceOption
+import com.android.settingslib.spa.widget.preference.Preference
+import com.android.settingslib.spa.widget.preference.PreferenceModel
+import com.android.settingslib.spa.widget.preference.SwitchPreference
+import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
+import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
+import com.android.settingslib.spa.widget.scaffold.RegularScaffold
+import com.android.settingslib.spa.widget.ui.Category
+import com.android.settingslib.spa.widget.ui.SettingsIcon
+import com.android.settingslib.spaprivileged.framework.common.broadcastReceiverFlow
+
+import com.android.settingslib.spaprivileged.model.enterprise.Restrictions
+import com.android.settingslib.spaprivileged.template.preference.RestrictedPreference
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.merge
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Showing the sim onboarding which is the process flow of sim switching on.
+ */
+object NetworkCellularGroupProvider : SettingsPageProvider {
+    override val name = "NetworkCellularGroupProvider"
+
+    private lateinit var subscriptionViewModel: SubscriptionInfoListViewModel
+    private val owner = createSettingsPage()
+
+    var selectableSubscriptionInfoList: List<SubscriptionInfo> = listOf()
+    var defaultVoiceSubId: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+    var defaultSmsSubId: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+    var defaultDataSubId: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+    var nonDds: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+
+    fun buildInjectEntry() = SettingsEntryBuilder.createInject(owner = owner)
+            .setUiLayoutFn {
+                // never using
+                Preference(object : PreferenceModel {
+                    override val title = name
+                    override val onClick = navigator(name)
+                })
+            }
+
+    @Composable
+    override fun Page(arguments: Bundle?) {
+        val context = LocalContext.current
+        var selectableSubscriptionInfoListRemember = remember {
+            mutableListOf<SubscriptionInfo>().toMutableStateList()
+        }
+        var callsSelectedId = rememberSaveable {
+            mutableIntStateOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+        }
+        var textsSelectedId = rememberSaveable {
+            mutableIntStateOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+        }
+        var mobileDataSelectedId = rememberSaveable {
+            mutableIntStateOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+        }
+        var nonDdsRemember = rememberSaveable {
+            mutableIntStateOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+        }
+
+        subscriptionViewModel = SubscriptionInfoListViewModel(
+                context.applicationContext as Application)
+
+        allOfFlows(context, subscriptionViewModel.selectableSubscriptionInfoListFlow)
+                .collectLatestWithLifecycle(LocalLifecycleOwner.current) {
+                    selectableSubscriptionInfoListRemember.clear()
+                    selectableSubscriptionInfoListRemember.addAll(selectableSubscriptionInfoList)
+                    callsSelectedId.intValue = defaultVoiceSubId
+                    textsSelectedId.intValue = defaultSmsSubId
+                    mobileDataSelectedId.intValue = defaultDataSubId
+                    nonDdsRemember.intValue = nonDds
+                }
+
+        PageImpl(selectableSubscriptionInfoListRemember,
+                callsSelectedId,
+                textsSelectedId,
+                mobileDataSelectedId,
+                nonDdsRemember)
+    }
+
+    private fun allOfFlows(context: Context,
+                           selectableSubscriptionInfoListFlow: Flow<List<SubscriptionInfo>>) =
+            combine(
+                    selectableSubscriptionInfoListFlow,
+                    context.defaultVoiceSubscriptionFlow(),
+                    context.defaultSmsSubscriptionFlow(),
+                    context.defaultDefaultDataSubscriptionFlow(),
+                    NetworkCellularGroupProvider::refreshUiStates,
+            ).flowOn(Dispatchers.Default)
+
+    fun refreshUiStates(
+            inputSelectableSubscriptionInfoList: List<SubscriptionInfo>,
+            inputDefaultVoiceSubId: Int,
+            inputDefaultSmsSubId: Int,
+            inputDefaultDateSubId: Int
+    ): Unit {
+        selectableSubscriptionInfoList = inputSelectableSubscriptionInfoList
+        defaultVoiceSubId = inputDefaultVoiceSubId
+        defaultSmsSubId = inputDefaultSmsSubId
+        defaultDataSubId = inputDefaultDateSubId
+        nonDds = if (defaultDataSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            SubscriptionManager.INVALID_SUBSCRIPTION_ID
+        } else {
+            selectableSubscriptionInfoList
+                    .filter { info ->
+                        (info.simSlotIndex != -1) && (info.subscriptionId != defaultDataSubId)
+                    }
+                    .map { it.subscriptionId }
+                    .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID
+        }
+    }
+}
+
+@Composable
+fun PageImpl(selectableSubscriptionInfoList: List<SubscriptionInfo>,
+             defaultVoiceSubId: MutableIntState,
+             defaultSmsSubId: MutableIntState,
+             defaultDataSubId: MutableIntState,
+             nonDds: MutableIntState) {
+    val context = LocalContext.current
+    var activeSubscriptionInfoList: List<SubscriptionInfo> =
+            selectableSubscriptionInfoList.filter { subscriptionInfo ->
+                subscriptionInfo.simSlotIndex != -1
+            }
+    var subscriptionManager = context.getSystemService(SubscriptionManager::class.java)
+
+    val stringSims = stringResource(R.string.provider_network_settings_title)
+    RegularScaffold(title = stringSims) {
+        SimsSectionImpl(
+                context,
+                subscriptionManager,
+                selectableSubscriptionInfoList
+        )
+        PrimarySimSectionImpl(
+                subscriptionManager,
+                activeSubscriptionInfoList,
+                defaultVoiceSubId,
+                defaultSmsSubId,
+                defaultDataSubId,
+                nonDds
+        )
+    }
+}
+
+@Composable
+fun SimsSectionImpl(
+        context: Context,
+        subscriptionManager: SubscriptionManager?,
+        subscriptionInfoList: List<SubscriptionInfo>
+) {
+    val coroutineScope = rememberCoroutineScope()
+    for (subInfo in subscriptionInfoList) {
+        val checked = rememberSaveable() {
+            mutableStateOf(false)
+        }
+        //TODO: Add the Restricted TwoTargetSwitchPreference in SPA
+        TwoTargetSwitchPreference(remember {
+            object : SwitchPreferenceModel {
+                override val title = subInfo.displayName.toString()
+                override val summary = { subInfo.number }
+                override val checked = {
+                    coroutineScope.launch {
+                        withContext(Dispatchers.Default) {
+                            checked.value = subscriptionManager?.isSubscriptionEnabled(
+                                    subInfo.subscriptionId)?:false
+                        }
+                    }
+                    checked.value
+                }
+                override val onCheckedChange = { newChecked: Boolean ->
+                    startToggleSubscriptionDialog(context, subInfo, newChecked)
+                }
+            }
+        }) {
+            startMobileNetworkSettings(context, subInfo)
+        }
+    }
+
+    // + add sim
+    if (showEuiccSettings(context)) {
+        RestrictedPreference(
+                model = object : PreferenceModel {
+                    override val title = stringResource(id = R.string.mobile_network_list_add_more)
+                    override val icon = @Composable { SettingsIcon(Icons.Outlined.Add) }
+                    override val onClick = {
+                        startAddSimFlow(context)
+                    }
+                },
+                restrictions = Restrictions(keys =
+                        listOf(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)),
+        )
+    }
+}
+
+@Composable
+fun PrimarySimSectionImpl(
+        subscriptionManager: SubscriptionManager?,
+        activeSubscriptionInfoList: List<SubscriptionInfo>,
+        callsSelectedId: MutableIntState,
+        textsSelectedId: MutableIntState,
+        mobileDataSelectedId: MutableIntState,
+        nonDds: MutableIntState
+) {
+    var state = rememberSaveable { mutableStateOf(false) }
+    var callsAndSmsList = remember {
+        mutableListOf(ListPreferenceOption(id = -1, text = "Loading"))
+    }
+    var dataList = remember {
+        mutableListOf(ListPreferenceOption(id = -1, text = "Loading"))
+    }
+
+    if (activeSubscriptionInfoList.size >= 2) {
+        state.value = true
+        callsAndSmsList.clear()
+        dataList.clear()
+        for (info in activeSubscriptionInfoList) {
+            var item = ListPreferenceOption(
+                    id = info.subscriptionId,
+                    text = "${info.displayName}"
+            )
+            callsAndSmsList.add(item)
+            dataList.add(item)
+        }
+        callsAndSmsList.add(ListPreferenceOption(
+                id = SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+                text = stringResource(id = R.string.sim_calls_ask_first_prefs_title)
+        ))
+    } else {
+        // hide the primary sim
+        state.value = false
+        Log.d("NetworkCellularGroupProvider", "Hide primary sim")
+    }
+
+    if (state.value) {
+        val coroutineScope = rememberCoroutineScope()
+        var context = LocalContext.current
+        val telephonyManagerForNonDds: TelephonyManager? =
+                context.getSystemService(TelephonyManager::class.java)
+                        ?.createForSubscriptionId(nonDds.intValue)
+        val automaticDataChecked = rememberSaveable() {
+            mutableStateOf(false)
+        }
+
+        Category(title = stringResource(id = R.string.primary_sim_title)) {
+            createPrimarySimListPreference(
+                    stringResource(id = R.string.primary_sim_calls_title),
+                    callsAndSmsList,
+                    callsSelectedId,
+                    ImageVector.vectorResource(R.drawable.ic_phone),
+            ) {
+                callsSelectedId.intValue = it
+                coroutineScope.launch {
+                    setDefaultVoice(subscriptionManager, it)
+                }
+            }
+            createPrimarySimListPreference(
+                    stringResource(id = R.string.primary_sim_texts_title),
+                    callsAndSmsList,
+                    textsSelectedId,
+                    Icons.AutoMirrored.Outlined.Message,
+            ) {
+                textsSelectedId.intValue = it
+                coroutineScope.launch {
+                    setDefaultSms(subscriptionManager, it)
+                }
+            }
+            createPrimarySimListPreference(
+                    stringResource(id = R.string.mobile_data_settings_title),
+                    dataList,
+                    mobileDataSelectedId,
+                    Icons.Outlined.DataUsage,
+            ) {
+                mobileDataSelectedId.intValue = it
+                coroutineScope.launch {
+                    // TODO: to fix the WifiPickerTracker crash when create
+                    //       the wifiPickerTrackerHelper
+                    setDefaultData(context,
+                            subscriptionManager,
+                            null/*wifiPickerTrackerHelper*/,
+                            it)
+                }
+            }
+        }
+
+        val autoDataTitle = stringResource(id = R.string.primary_sim_automatic_data_title)
+        val autoDataSummary = stringResource(id = R.string.primary_sim_automatic_data_msg)
+        SwitchPreference(remember {
+            object : SwitchPreferenceModel {
+                override val title = autoDataTitle
+                override val summary = { autoDataSummary }
+                override val changeable: () -> Boolean = {
+                    nonDds.intValue != SubscriptionManager.INVALID_SUBSCRIPTION_ID
+                }
+                override val checked = {
+                    coroutineScope.launch {
+                        withContext(Dispatchers.Default) {
+                            automaticDataChecked.value = telephonyManagerForNonDds != null
+                                    && telephonyManagerForNonDds.isMobileDataPolicyEnabled(
+                                    TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+                        }
+                    }
+                    automaticDataChecked.value
+                }
+                override val onCheckedChange: ((Boolean) -> Unit)? =
+                        { newChecked: Boolean ->
+                            coroutineScope.launch {
+                                setAutomaticData(telephonyManagerForNonDds, newChecked)
+                            }
+                        }
+            }
+        })
+    }
+}
+
+private fun Context.defaultVoiceSubscriptionFlow(): Flow<Int> =
+        merge(
+                flowOf(null), // kick an initial value
+                broadcastReceiverFlow(
+                        IntentFilter(TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED)
+                ),
+        ).map { SubscriptionManager.getDefaultVoiceSubscriptionId() }
+                .conflate().flowOn(Dispatchers.Default)
+
+private fun Context.defaultSmsSubscriptionFlow(): Flow<Int> =
+        merge(
+                flowOf(null), // kick an initial value
+                broadcastReceiverFlow(
+                        IntentFilter(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED)
+                ),
+        ).map { SubscriptionManager.getDefaultSmsSubscriptionId() }
+                .conflate().flowOn(Dispatchers.Default)
+
+private fun Context.defaultDefaultDataSubscriptionFlow(): Flow<Int> =
+        merge(
+                flowOf(null), // kick an initial value
+                broadcastReceiverFlow(
+                        IntentFilter(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)
+                ),
+        ).map { SubscriptionManager.getDefaultDataSubscriptionId() }
+                .conflate().flowOn(Dispatchers.Default)
+
+private fun startToggleSubscriptionDialog(
+        context: Context,
+        subInfo: SubscriptionInfo,
+        newStatus: Boolean
+) {
+    SubscriptionUtil.startToggleSubscriptionDialogActivity(
+            context,
+            subInfo.subscriptionId,
+            newStatus
+    )
+}
+
+private fun startMobileNetworkSettings(context: Context, subInfo: SubscriptionInfo) {
+    MobileNetworkUtils.launchMobileNetworkSettings(context, subInfo)
+}
+
+private fun startAddSimFlow(context: Context) {
+    val intent = Intent(EuiccManager.ACTION_PROVISION_EMBEDDED_SUBSCRIPTION)
+    intent.putExtra(EuiccManager.EXTRA_FORCE_PROVISION, true)
+    context.startActivity(intent)
+}
+
+private fun showEuiccSettings(context: Context): Boolean {
+    return MobileNetworkUtils.showEuiccSettings(context)
+}
+
+private suspend fun setDefaultVoice(
+        subscriptionManager: SubscriptionManager?,
+        subId: Int): Unit = withContext(Dispatchers.Default) {
+    subscriptionManager?.setDefaultVoiceSubscriptionId(subId)
+}
+
+private suspend fun setDefaultSms(
+        subscriptionManager: SubscriptionManager?,
+        subId: Int): Unit = withContext(Dispatchers.Default) {
+    subscriptionManager?.setDefaultSmsSubId(subId)
+}
+
+private suspend fun setDefaultData(context: Context,
+                                   subscriptionManager: SubscriptionManager?,
+                                   wifiPickerTrackerHelper: WifiPickerTrackerHelper?,
+                                   subId: Int): Unit = withContext(Dispatchers.Default) {
+    subscriptionManager?.setDefaultDataSubId(subId)
+    MobileNetworkUtils.setMobileDataEnabled(
+            context,
+            subId,
+            true /* enabled */,
+            true /* disableOtherSubscriptions */)
+    if (wifiPickerTrackerHelper != null
+            && !wifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(subId)) {
+        wifiPickerTrackerHelper.setCarrierNetworkEnabled(true)
+    }
+}
+
+private suspend fun setAutomaticData(telephonyManager: TelephonyManager?, newState: Boolean): Unit =
+        withContext(Dispatchers.Default) {
+            telephonyManager?.setMobileDataPolicyEnabled(
+                    TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH,
+                    newState)
+            //TODO: setup backup calling
+        }
\ No newline at end of file
diff --git a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
index 7704f84..5752a4f 100644
--- a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
+++ b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt
@@ -108,21 +108,22 @@
         list,
         callsSelectedId,
         ImageVector.vectorResource(R.drawable.ic_phone),
-        true
+        onIdSelected = { callsSelectedId.intValue = it }
     )
     createPrimarySimListPreference(
         stringResource(id = R.string.primary_sim_texts_title),
         list,
         textsSelectedId,
         Icons.AutoMirrored.Outlined.Message,
-        true
+        onIdSelected = { textsSelectedId.intValue = it }
     )
+
     createPrimarySimListPreference(
-        stringResource(id = R.string.mobile_data_settings_title),
-        list,
-        mobileDataSelectedId,
+            stringResource(id = R.string.mobile_data_settings_title),
+            list,
+            mobileDataSelectedId,
         Icons.Outlined.DataUsage,
-        true
+            onIdSelected = { mobileDataSelectedId.intValue = it }
     )
 
     val autoDataTitle = stringResource(id = R.string.primary_sim_automatic_data_title)
@@ -140,17 +141,18 @@
 
 @Composable
 fun createPrimarySimListPreference(
-    title: String,
-    list: List<ListPreferenceOption>,
-    selectedId: MutableIntState,
-    icon: ImageVector,
-    enable: Boolean
+        title: String,
+        list: List<ListPreferenceOption>,
+        selectedId: MutableIntState,
+        icon: ImageVector,
+        enable: Boolean = true,
+        onIdSelected: (id: Int) -> Unit
 ) = ListPreference(remember {
     object : ListPreferenceModel {
         override val title = title
         override val options = list
         override val selectedId = selectedId
-        override val onIdSelected: (id: Int) -> Unit = { selectedId.intValue = it }
+        override val onIdSelected = onIdSelected
         override val icon = @Composable {
             SettingsIcon(icon)
         }