Merge "Enable icons for switch preference widget and update the gallery."
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 367766a..dab04fd 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.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 @@
SampleNotChangeableSwitchPreference()
}.build()
)
+ entryList.add(
+ SettingsEntryBuilder.create( "SwitchPreference with icon", owner)
+ .setIsAllowSearch(true)
+ .setUiLayoutFn {
+ SampleSwitchPreferenceWithIcon()
+ }.build()
+ )
return entryList
}
@@ -148,6 +158,21 @@
})
}
+@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 2d8a711..b67eb3d 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.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.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
/**
@@ -51,6 +54,14 @@
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 @@
InternalSwitchPreference(
title = model.title,
summary = model.summary,
+ icon = model.icon,
checked = model.checked,
changeable = model.changeable,
onCheckedChange = model.onCheckedChange,
@@ -95,6 +107,7 @@
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 @@
paddingStart = paddingStart,
paddingEnd = paddingEnd,
paddingVertical = paddingVertical,
+ icon = icon,
) {
SettingsSwitch(
checked = checked,
@@ -152,6 +166,15 @@
checked = false.toState(),
onCheckedChange = {},
)
+ InternalSwitchPreference(
+ title = "Use Dark theme",
+ summary = "Summary".toState(),
+ checked = true.toState(),
+ onCheckedChange = {},
+ icon = @Composable {
+ SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive)
+ },
+ )
}
}
}