diff options
| author | 2022-11-25 13:48:37 +0800 | |
|---|---|---|
| committer | 2022-11-25 14:10:19 +0800 | |
| commit | bc549c001886bc9bd46c7f928d6ca007044c40e4 (patch) | |
| tree | f4bf818bf18bc19adff24236cd9b3a92267c51a9 | |
| parent | d271296756e37f7abb4b303bfa322ddd1d68997d (diff) | |
Enable icons for switch preference widget and update the gallery.
Test: manually test on device
Bug: 260203533
Change-Id: Ie63c5fef5731f954eaa64120536226ebb85d079d
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) + }, + ) } } } |