summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/SwitchPreferencePage.kt25
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt23
2 files changed, 48 insertions, 0 deletions
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/SwitchPreferencePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/SwitchPreferencePage.kt
index 367766a34a3c..dab04fdf740a 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/SwitchPreferencePage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/SwitchPreferencePage.kt
@@ -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() {
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt
index 2d606193872d..e3f096ed53d9 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt
@@ -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
@@ -51,6 +54,14 @@ interface SwitchPreferenceModel {
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.
*
* This can be `null` during the data loading before the data is available.
@@ -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)
+ },
+ )
}
}
}