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

Commit 4ae174c6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Spa] Make Slider gallery expressive" into main

parents 4167a8ee 6c919f59
Loading
Loading
Loading
Loading
+63 −74
Original line number Diff line number Diff line
@@ -23,32 +23,40 @@ import androidx.compose.material.icons.outlined.MusicNote
import androidx.compose.material.icons.outlined.MusicOff
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
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.theme.SettingsTheme
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SliderPreference
import com.android.settingslib.spa.widget.preference.SliderPreferenceModel
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.Category

private const val TITLE = "Sample Slider"

object SliderPageProvider : SettingsPageProvider {
    override val name = "Slider"
    private val owner = createSettingsPage()

    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
        val entryList = mutableListOf<SettingsEntry>()
        entryList.add(
            SettingsEntryBuilder.create("Simple Slider", owner)
                .setUiLayoutFn {
    @Composable
    override fun Page(arguments: Bundle?) {
        RegularScaffold(TITLE) {
            Category {
                SimpleSlider()
                SliderWithIcon()
                SliderWithChangeableIcon()
                SliderWithSteps()
            }
        }
    }

    @Composable
    private fun SimpleSlider() {
        SliderPreference(
            object : SliderPreferenceModel {
                override val title = "Simple Slider"
@@ -56,39 +64,31 @@ object SliderPageProvider : SettingsPageProvider {
            }
        )
    }
                .build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with icon", owner)
                .setUiLayoutFn {

    @Composable
    private fun SliderWithIcon() {
        SliderPreference(
            object : SliderPreferenceModel {
                override val title = "Slider with icon"
                override val initValue = 30
                            override val onValueChangeFinished = {
                                println("onValueChangeFinished")
                            }
                override val onValueChangeFinished = { println("onValueChangeFinished") }
                override val iconStart = Icons.Outlined.AccessAlarm
            }
        )
    }
                .build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with changeable icon", owner)
                .setUiLayoutFn {

    @Composable
    private fun SliderWithChangeableIcon() {
        val initValue = 0
        var icon by remember { mutableStateOf(Icons.Outlined.MusicOff) }
                    var sliderPosition by remember { mutableStateOf(initValue) }
        var sliderPosition by remember { mutableIntStateOf(initValue) }
        SliderPreference(
            object : SliderPreferenceModel {
                override val title = "Slider with changeable icon"
                override val initValue = initValue
                override val onValueChange = { it: Int ->
                    sliderPosition = it
                                icon =
                                    if (it > 0) Icons.Outlined.MusicNote
                                    else Icons.Outlined.MusicOff
                    icon = if (it > 0) Icons.Outlined.MusicNote else Icons.Outlined.MusicOff
                }
                override val onValueChangeFinished = {
                    println("onValueChangeFinished: the value is $sliderPosition")
@@ -97,11 +97,9 @@ object SliderPageProvider : SettingsPageProvider {
            }
        )
    }
                .build()
        )
        entryList.add(
            SettingsEntryBuilder.create("Slider with steps", owner)
                .setUiLayoutFn {

    @Composable
    private fun SliderWithSteps() {
        SliderPreference(
            object : SliderPreferenceModel {
                override val title = "Slider with steps"
@@ -111,11 +109,6 @@ object SliderPageProvider : SettingsPageProvider {
            }
        )
    }
                .build()
        )

        return entryList
    }

    @Composable
    fun Entry() {
@@ -126,13 +119,9 @@ object SliderPageProvider : SettingsPageProvider {
            }
        )
    }

    override fun getTitle(arguments: Bundle?): String {
        return TITLE
    }
}

@Preview(showBackground = true)
@Preview
@Composable
private fun SliderPagePreview() {
    SettingsTheme { SliderPageProvider.Page(null) }