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

Commit 6ff3fea5 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Add HighlightBox for AUTO_DATA_SWITCH_SETTING_R_ID

On Settings.ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS page.

Fix: 411421672
Flag: EXEMPT bug fix
Test: manual test
Test: unit test
Change-Id: I697cab6f4f013fb130fc06543b149d16153e8346
parent 8c067344
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.View
import androidx.annotation.VisibleForTesting
import androidx.preference.Preference
import com.android.settings.R
import com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY
import com.android.settings.SettingsPreferenceFragment
import com.android.settings.dashboard.DashboardFragment
import com.android.settings.flags.Flags
@@ -47,7 +48,10 @@ class MobileNetworkListFragment : DashboardFragment() {
        super.onCreate(icicle)

        if (Flags.isDualSimOnboardingEnabled()) {
            context?.startSpaActivity(NetworkCellularGroupProvider.fileName)
            context?.startSpaActivity(
                destination = NetworkCellularGroupProvider.fileName,
                highlightItemKey = arguments?.getString(EXTRA_FRAGMENT_ARG_KEY),
            )
            finish()
        }
    }
+9 −5
Original line number Diff line number Diff line
@@ -53,11 +53,15 @@ class SpaActivity : BrowseActivity() {
                false
            }

        @JvmStatic
        fun Context.startSpaActivity(destination: String) {
            val intent = Intent(this, SpaActivity::class.java)
                .appendSpaParams(destination = destination)
                .appendSpaParams(sessionName = SESSION_BROWSE)
        @[JvmStatic JvmOverloads]
        fun Context.startSpaActivity(destination: String, highlightItemKey: String? = null) {
            val intent =
                Intent(this, SpaActivity::class.java)
                    .appendSpaParams(
                        destination = destination,
                        highlightItemKey = highlightItemKey,
                        sessionName = SESSION_BROWSE,
                    )
            startActivity(intent)
        }
    }
+40 −0
Original line number Diff line number Diff line
@@ -16,17 +16,57 @@

package com.android.settings.spa.network

import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.android.settings.R
import com.android.settings.network.telephony.MobileDataRepository
import com.android.settings.network.telephony.wificalling.CrossSimCallingViewModel
import com.android.settingslib.spa.framework.compose.HighlightBox
import com.android.settingslib.spa.framework.compose.rememberContext
import com.android.settingslib.spa.widget.preference.SwitchPreference
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

/**
 * ID for AutomaticDataSwitchingPreference.
 *
 * Caution, has external dependencies on this:
 * - frameworks/opt/telephony
 * - frameworks/base/packages/SystemUI
 */
private const val AUTO_DATA_SWITCH_SETTING_R_ID = "auto_data_switch"

@Composable
fun AutomaticDataSwitchingPreference(nonDds: Int) {
    if (!SubscriptionManager.isValidSubscriptionId(nonDds)) return

    val mobileDataRepository = rememberContext(::MobileDataRepository)
    val isAutoDataEnabled by
        remember(nonDds) {
                mobileDataRepository.isMobileDataPolicyEnabledFlow(
                    subId = nonDds,
                    policy = TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH,
                )
            }
            .collectAsStateWithLifecycle(initialValue = null)
    HighlightBox(AUTO_DATA_SWITCH_SETTING_R_ID) {
        AutomaticDataSwitchingPreference(
            isAutoDataEnabled = { isAutoDataEnabled },
            setAutoDataEnabled = { newEnabled ->
                mobileDataRepository.setAutoDataSwitch(nonDds, newEnabled)
            },
        )
    }
}

@Composable
fun AutomaticDataSwitchingPreference(
    isAutoDataEnabled: () -> Boolean?,
+1 −17
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ 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.compose.rememberContext
import com.android.settingslib.spa.search.SearchablePage
import com.android.settingslib.spa.search.SearchablePage.SearchItem
import com.android.settingslib.spa.widget.preference.Preference
@@ -215,25 +214,10 @@ open class NetworkCellularGroupProvider : SettingsPageProvider, SearchablePage {

@Composable
fun MobileDataSectionImpl(mobileDataSelectedId: Int, nonDds: Int) {
    val mobileDataRepository = rememberContext(::MobileDataRepository)

    Category(title = stringResource(id = R.string.mobile_data_settings_title)) {
        MobileDataSwitchPreference(subId = mobileDataSelectedId)

        val isAutoDataEnabled by remember(nonDds) {
            mobileDataRepository.isMobileDataPolicyEnabledFlow(
                subId = nonDds,
                policy = TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH
            )
        }.collectAsStateWithLifecycle(initialValue = null)
        if (SubscriptionManager.isValidSubscriptionId(nonDds)) {
            AutomaticDataSwitchingPreference(
                isAutoDataEnabled = { isAutoDataEnabled },
                setAutoDataEnabled = { newEnabled ->
                    mobileDataRepository.setAutoDataSwitch(nonDds, newEnabled)
                },
            )
        }
        AutomaticDataSwitchingPreference(nonDds)
    }
}

+15 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
import com.android.settings.spa.app.AllAppListPageProvider
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
import com.android.settingslib.spa.framework.util.KEY_DESTINATION
import com.android.settingslib.spa.framework.util.KEY_HIGHLIGHT_ITEM_KEY
import com.google.android.setupcompat.util.WizardManagerHelper
import com.google.common.truth.Truth.assertThat
import org.junit.After
@@ -86,7 +87,7 @@ class SpaActivityTest {

    @Test
    fun startSpaActivity() {
        context.startSpaActivity(DESTINATION)
        context.startSpaActivity(destination = DESTINATION)

        val intent = argumentCaptor<Intent> {
            verify(context).startActivity(capture())
@@ -95,7 +96,20 @@ class SpaActivityTest {
        assertThat(intent.getStringExtra(KEY_DESTINATION)).isEqualTo(DESTINATION)
    }

    @Test
    fun startSpaActivity_withHighlightItemKey() {
        context.startSpaActivity(destination = DESTINATION, highlightItemKey = HIGHLIGHT_ITEM_KEY)

        val intent = argumentCaptor<Intent> {
            verify(context).startActivity(capture())
        }.firstValue
        assertThat(intent.component?.className).isEqualTo(SpaActivity::class.qualifiedName)
        assertThat(intent.getStringExtra(KEY_DESTINATION)).isEqualTo(DESTINATION)
        assertThat(intent.getStringExtra(KEY_HIGHLIGHT_ITEM_KEY)).isEqualTo(HIGHLIGHT_ITEM_KEY)
    }

    private companion object {
        const val DESTINATION = "Destination"
        const val HIGHLIGHT_ITEM_KEY = "highlight_item_key"
    }
}