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

Commit 607bdbf7 authored by Kelly Zhang's avatar Kelly Zhang Committed by Android (Google) Code Review
Browse files

Merge "Enable icons for switch preference widget and update the gallery."

parents f8685cc7 bc549c00
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.settingslib.spa.gallery.preference

import android.os.Bundle
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AirplanemodeActive
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
@@ -34,6 +36,7 @@ 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.ui.SettingsIcon
import kotlinx.coroutines.delay

private const val TITLE = "Sample SwitchPreference"
@@ -72,6 +75,13 @@ object SwitchPreferencePageProvider : SettingsPageProvider {
                    SampleNotChangeableSwitchPreference()
                }.build()
        )
        entryList.add(
            SettingsEntryBuilder.create( "SwitchPreference with icon", owner)
                .setIsAllowSearch(true)
                .setUiLayoutFn {
                    SampleSwitchPreferenceWithIcon()
                }.build()
        )

        return entryList
    }
@@ -148,6 +158,21 @@ private fun SampleNotChangeableSwitchPreference() {
    })
}

@Composable
private fun SampleSwitchPreferenceWithIcon() {
    val checked = rememberSaveable { mutableStateOf(true) }
    SwitchPreference(remember {
        object : SwitchPreferenceModel {
            override val title = "SwitchPreference"
            override val checked = checked
            override val onCheckedChange = { newChecked: Boolean -> checked.value = newChecked }
            override val icon = @Composable {
                SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive)
            }
        }
    })
}

@Preview(showBackground = true)
@Composable
private fun SwitchPreferencePagePreview() {
+23 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.selection.toggleable
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AirplanemodeActive
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
@@ -33,6 +35,7 @@ import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.EntryHighlight
import com.android.settingslib.spa.framework.util.wrapOnSwitchWithLog
import com.android.settingslib.spa.widget.ui.SettingsIcon
import com.android.settingslib.spa.widget.ui.SettingsSwitch

/**
@@ -50,6 +53,14 @@ interface SwitchPreferenceModel {
    val summary: State<String>
        get() = stateOf("")

    /**
     * The icon of this [Preference].
     *
     * Default is `null` which means no icon.
     */
    val icon: (@Composable () -> Unit)?
        get() = null

    /**
     * Indicates whether this [SwitchPreference] is checked.
     *
@@ -84,6 +95,7 @@ fun SwitchPreference(model: SwitchPreferenceModel) {
        InternalSwitchPreference(
            title = model.title,
            summary = model.summary,
            icon = model.icon,
            checked = model.checked,
            changeable = model.changeable,
            onCheckedChange = model.onCheckedChange,
@@ -95,6 +107,7 @@ fun SwitchPreference(model: SwitchPreferenceModel) {
internal fun InternalSwitchPreference(
    title: String,
    summary: State<String> = "".toState(),
    icon: @Composable (() -> Unit)? = null,
    checked: State<Boolean?>,
    changeable: State<Boolean> = true.toState(),
    paddingStart: Dp = SettingsDimension.itemPaddingStart,
@@ -125,6 +138,7 @@ internal fun InternalSwitchPreference(
        paddingStart = paddingStart,
        paddingEnd = paddingEnd,
        paddingVertical = paddingVertical,
        icon = icon,
    ) {
        SettingsSwitch(
            checked = checked,
@@ -152,6 +166,15 @@ private fun SwitchPreferencePreview() {
                checked = false.toState(),
                onCheckedChange = {},
            )
            InternalSwitchPreference(
                title = "Use Dark theme",
                summary = "Summary".toState(),
                checked = true.toState(),
                onCheckedChange = {},
                icon = @Composable {
                    SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive)
                },
            )
        }
    }
}