Merge "Enable icons for switch preference widget and update the gallery."
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user