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

This commit is contained in:
Kelly Zhang
2022-11-27 10:27:42 +00:00
committed by Android (Google) Code Review
2 changed files with 48 additions and 0 deletions

View File

@@ -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() {

View File

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