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

Commit 90bf9756 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

[Spa] Fix "State<T> as a parameter" of Preference

Bug: 292036686
Test: manual - with Gallery
Test: manual - with Settings
Test: unit tests
Change-Id: I759aefae47e494539d8a15db1eb5e4ffbf72c84e
parent 76f296cc
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
/*
/*
 * Copyright (C) 2022 The Android Open Source Project
 * Copyright (C) 2023 The Android Open Source Project
 *
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -25,7 +25,6 @@ import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.util.getIntArg
import com.android.settingslib.spa.framework.util.getIntArg
import com.android.settingslib.spa.framework.util.getStringArg
import com.android.settingslib.spa.framework.util.getStringArg
import com.android.settingslib.spa.framework.util.navLink
import com.android.settingslib.spa.framework.util.navLink
@@ -110,7 +109,7 @@ class ArgumentPageModel : PageModel() {
    fun genStringParamPreferenceModel(): PreferenceModel {
    fun genStringParamPreferenceModel(): PreferenceModel {
        return object : PreferenceModel {
        return object : PreferenceModel {
            override val title = STRING_PARAM_TITLE
            override val title = STRING_PARAM_TITLE
            override val summary = stateOf(stringParam!!)
            override val summary = { stringParam!! }
        }
        }
    }
    }


@@ -118,7 +117,7 @@ class ArgumentPageModel : PageModel() {
    fun genIntParamPreferenceModel(): PreferenceModel {
    fun genIntParamPreferenceModel(): PreferenceModel {
        return object : PreferenceModel {
        return object : PreferenceModel {
            override val title = INT_PARAM_TITLE
            override val title = INT_PARAM_TITLE
            override val summary = stateOf(intParam!!.toString())
            override val summary = { intParam!!.toString() }
        }
        }
    }
    }


@@ -130,7 +129,7 @@ class ArgumentPageModel : PageModel() {
        )
        )
        return object : PreferenceModel {
        return object : PreferenceModel {
            override val title = PAGE_TITLE
            override val title = PAGE_TITLE
            override val summary = stateOf(summaryArray.joinToString(", "))
            override val summary = { summaryArray.joinToString(", ") }
            override val onClick = navigator(
            override val onClick = navigator(
                SettingsPageProviderEnum.ARGUMENT.name + parameter.navLink(arguments)
                SettingsPageProviderEnum.ARGUMENT.name + parameter.navLink(arguments)
            )
            )
+1 −2
Original line number Original line Diff line number Diff line
@@ -26,7 +26,6 @@ import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.Preference
@@ -50,7 +49,7 @@ object FooterPageProvider : SettingsPageProvider {
                    Preference(remember {
                    Preference(remember {
                        object : PreferenceModel {
                        object : PreferenceModel {
                            override val title = "Some Preference"
                            override val title = "Some Preference"
                            override val summary = stateOf("Some summary")
                            override val summary = { "Some summary" }
                        }
                        }
                    })
                    })
                }.build()
                }.build()
+1 −1
Original line number Original line Diff line number Diff line
@@ -99,7 +99,7 @@ private fun SampleNotChangeableListPreference() {
    ListPreference(remember {
    ListPreference(remember {
        object : ListPreferenceModel {
        object : ListPreferenceModel {
            override val title = "Preferred network type"
            override val title = "Preferred network type"
            override val enabled = enabled
            override val enabled = { enabled.value }
            override val options = listOf(
            override val options = listOf(
                ListPreferenceOption(id = 1, text = "5G (recommended)"),
                ListPreferenceOption(id = 1, text = "5G (recommended)"),
                ListPreferenceOption(id = 2, text = "LTE"),
                ListPreferenceOption(id = 2, text = "LTE"),
+10 −9
Original line number Original line Diff line number Diff line
/*
/*
 * Copyright (C) 2022 The Android Open Source Project
 * Copyright (C) 2023 The Android Open Source Project
 *
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@ import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.createIntent
import com.android.settingslib.spa.framework.util.createIntent
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.gallery.R
@@ -136,8 +135,8 @@ object PreferencePageProvider : SettingsPageProvider {
                    Preference(
                    Preference(
                        object : PreferenceModel {
                        object : PreferenceModel {
                            override val title = ASYNC_PREFERENCE_TITLE
                            override val title = ASYNC_PREFERENCE_TITLE
                            override val summary = model.asyncSummary
                            override val summary = { model.asyncSummary.value }
                            override val enabled = model.asyncEnable
                            override val enabled = { model.asyncEnable.value }
                        }
                        }
                    )
                    )
                }
                }
@@ -170,7 +169,7 @@ object PreferencePageProvider : SettingsPageProvider {
                    Preference(
                    Preference(
                        object : PreferenceModel {
                        object : PreferenceModel {
                            override val title = MANUAL_UPDATE_PREFERENCE_TITLE
                            override val title = MANUAL_UPDATE_PREFERENCE_TITLE
                            override val summary = manualUpdaterSummary
                            override val summary = { manualUpdaterSummary.value }
                            override val onClick = { model.manualUpdaterOnClick() }
                            override val onClick = { model.manualUpdaterOnClick() }
                            override val icon = @Composable {
                            override val icon = @Composable {
                                SettingsIcon(imageVector = Icons.Outlined.TouchApp)
                                SettingsIcon(imageVector = Icons.Outlined.TouchApp)
@@ -205,11 +204,13 @@ object PreferencePageProvider : SettingsPageProvider {
            createEntry(EntryEnum.AUTO_UPDATE_PREFERENCE)
            createEntry(EntryEnum.AUTO_UPDATE_PREFERENCE)
                .setUiLayoutFn {
                .setUiLayoutFn {
                    val model = PreferencePageModel.create()
                    val model = PreferencePageModel.create()
                    val autoUpdaterSummary = remember { model.getAutoUpdaterSummary() }
                    val autoUpdaterSummary = remember {
                        model.getAutoUpdaterSummary()
                    }.observeAsState(" ")
                    Preference(
                    Preference(
                        object : PreferenceModel {
                        object : PreferenceModel {
                            override val title = AUTO_UPDATE_PREFERENCE_TITLE
                            override val title = AUTO_UPDATE_PREFERENCE_TITLE
                            override val summary = autoUpdaterSummary.observeAsState(" ")
                            override val summary = { autoUpdaterSummary.value }
                            override val icon = @Composable {
                            override val icon = @Composable {
                                SettingsIcon(imageVector = Icons.Outlined.Autorenew)
                                SettingsIcon(imageVector = Icons.Outlined.Autorenew)
                            }
                            }
@@ -250,12 +251,12 @@ object PreferencePageProvider : SettingsPageProvider {


    private fun singleLineSummaryEntry() = createEntry(EntryEnum.SINGLE_LINE_SUMMARY_PREFERENCE)
    private fun singleLineSummaryEntry() = createEntry(EntryEnum.SINGLE_LINE_SUMMARY_PREFERENCE)
        .setUiLayoutFn {
        .setUiLayoutFn {
            val summary = stringResource(R.string.single_line_summary_preference_summary)
            Preference(
            Preference(
                model = object : PreferenceModel {
                model = object : PreferenceModel {
                    override val title: String =
                    override val title: String =
                        stringResource(R.string.single_line_summary_preference_title)
                        stringResource(R.string.single_line_summary_preference_title)
                    override val summary =
                    override val summary = { summary }
                        stringResource(R.string.single_line_summary_preference_summary).toState()
                },
                },
                singleLineSummary = true,
                singleLineSummary = true,
            )
            )
+4 −4
Original line number Original line Diff line number Diff line
/*
/*
 * Copyright (C) 2022 The Android Open Source Project
 * Copyright (C) 2023 The Android Open Source Project
 *
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -114,7 +114,7 @@ private fun SampleSwitchPreferenceWithSummary() {
    SwitchPreference(remember {
    SwitchPreference(remember {
        object : SwitchPreferenceModel {
        object : SwitchPreferenceModel {
            override val title = "SwitchPreference"
            override val title = "SwitchPreference"
            override val summary = stateOf("With summary")
            override val summary = { "With summary" }
            override val checked = checked
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
        }
@@ -131,7 +131,7 @@ private fun SampleSwitchPreferenceWithAsyncSummary() {
    SwitchPreference(remember {
    SwitchPreference(remember {
        object : SwitchPreferenceModel {
        object : SwitchPreferenceModel {
            override val title = "SwitchPreference"
            override val title = "SwitchPreference"
            override val summary = summary
            override val summary = { summary.value }
            override val checked = checked
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
        }
        }
@@ -144,7 +144,7 @@ private fun SampleNotChangeableSwitchPreference() {
    SwitchPreference(remember {
    SwitchPreference(remember {
        object : SwitchPreferenceModel {
        object : SwitchPreferenceModel {
            override val title = "SwitchPreference"
            override val title = "SwitchPreference"
            override val summary = stateOf("Not changeable")
            override val summary = { "Not changeable" }
            override val changeable = stateOf(false)
            override val changeable = stateOf(false)
            override val checked = checked
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
Loading