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

Commit bc549c00 authored by Kelly's avatar Kelly
Browse files

Enable icons for switch preference widget and update the gallery.

Test: manually test on device
Bug: 260203533
Change-Id: Ie63c5fef5731f954eaa64120536226ebb85d079d
parent d2712967
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
@@ -32,6 +34,7 @@ import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.wrapOnSwitchWithLog
import com.android.settingslib.spa.widget.ui.SettingsIcon
import com.android.settingslib.spa.widget.ui.SettingsSwitch
import com.android.settingslib.spa.widget.util.EntryHighlight

@@ -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)
                },
            )
        }
    }
}