Loading packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/PreferencePage.kt +13 −3 Original line number Original line Diff line number Diff line Loading @@ -20,13 +20,16 @@ import android.os.Bundle import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DisabledByDefault import androidx.compose.material.icons.outlined.TouchApp import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview Loading @@ -36,6 +39,7 @@ import com.android.settingslib.spa.framework.compose.toState import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.ui.SettingsIcon import kotlinx.coroutines.delay import kotlinx.coroutines.delay object PreferencePageProvider : SettingsPageProvider { object PreferencePageProvider : SettingsPageProvider { Loading Loading @@ -75,14 +79,17 @@ private fun PreferencePage() { } } }) }) var count by remember { mutableStateOf(0) } var count by rememberSaveable { mutableStateOf(0) } Preference(object : PreferenceModel { Preference(object : PreferenceModel { override val title = "Click me" override val title = "Click me" override val summary = derivedStateOf { count.toString() } override val summary = derivedStateOf { count.toString() } override val onClick: (() -> Unit) = { count++ } override val onClick: (() -> Unit) = { count++ } override val icon = @Composable { SettingsIcon(imageVector = Icons.Outlined.TouchApp) } }) }) var ticks by remember { mutableStateOf(0) } var ticks by rememberSaveable { mutableStateOf(0) } LaunchedEffect(ticks) { LaunchedEffect(ticks) { delay(1000L) delay(1000L) ticks++ ticks++ Loading @@ -96,6 +103,9 @@ private fun PreferencePage() { override val title = "Disabled" override val title = "Disabled" override val summary = "Disabled".toState() override val summary = "Disabled".toState() override val enabled = false.toState() override val enabled = false.toState() override val icon = @Composable { SettingsIcon(imageVector = Icons.Outlined.DisabledByDefault) } }) }) } } } } Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt +15 −3 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settingslib.spa.widget.preference import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.State import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.framework.compose.stateOf Loading @@ -37,6 +38,14 @@ interface PreferenceModel { val summary: State<String> val summary: State<String> get() = stateOf("") get() = stateOf("") /** * The icon of this [Preference]. * * Default is `null` which means no icon. */ val icon: (@Composable () -> Unit)? get() = null /** /** * Indicates whether this [Preference] is enabled. * Indicates whether this [Preference] is enabled. * * Loading @@ -61,13 +70,16 @@ interface PreferenceModel { */ */ @Composable @Composable fun Preference(model: PreferenceModel) { fun Preference(model: PreferenceModel) { val modifier = model.onClick?.let { onClick -> val modifier = remember(model.enabled.value, model.onClick) { Modifier.clickable(enabled = model.enabled.value) { onClick() } model.onClick?.let { onClick -> Modifier.clickable(enabled = model.enabled.value, onClick = onClick) } ?: Modifier } ?: Modifier } BasePreference( BasePreference( title = model.title, title = model.title, summary = model.summary, summary = model.summary, modifier = modifier, modifier = modifier, icon = model.icon, enabled = model.enabled, enabled = model.enabled, ) ) } } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -100,7 +100,7 @@ internal fun InternalSwitchPreference( ) { ) { val checkedValue = checked.value val checkedValue = checked.value val indication = LocalIndication.current val indication = LocalIndication.current val modifier = remember(checkedValue) { val modifier = remember(checkedValue, changeable.value) { if (checkedValue != null && onCheckedChange != null) { if (checkedValue != null && onCheckedChange != null) { Modifier.toggleable( Modifier.toggleable( value = checkedValue, value = checkedValue, Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Footer.kt +9 −1 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview Loading @@ -32,7 +35,12 @@ import com.android.settingslib.spa.framework.theme.SettingsTheme fun Footer(footerText: String) { fun Footer(footerText: String) { if (footerText.isEmpty()) return if (footerText.isEmpty()) return Column(Modifier.padding(SettingsDimension.itemPadding)) { Column(Modifier.padding(SettingsDimension.itemPadding)) { SettingsIcon(imageVector = Icons.Outlined.Info, contentDescription = null) Icon( imageVector = Icons.Outlined.Info, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) SettingsBody(footerText) SettingsBody(footerText) } } Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt +2 −5 Original line number Original line Diff line number Diff line Loading @@ -25,13 +25,10 @@ import androidx.compose.ui.graphics.vector.ImageVector import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.theme.SettingsDimension @Composable @Composable fun SettingsIcon( fun SettingsIcon(imageVector: ImageVector) { imageVector: ImageVector, contentDescription: String?, ) { Icon( Icon( imageVector = imageVector, imageVector = imageVector, contentDescription = contentDescription, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), modifier = Modifier.size(SettingsDimension.itemIconSize), tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface, ) ) Loading Loading
packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/PreferencePage.kt +13 −3 Original line number Original line Diff line number Diff line Loading @@ -20,13 +20,16 @@ import android.os.Bundle import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DisabledByDefault import androidx.compose.material.icons.outlined.TouchApp import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview Loading @@ -36,6 +39,7 @@ import com.android.settingslib.spa.framework.compose.toState import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.ui.SettingsIcon import kotlinx.coroutines.delay import kotlinx.coroutines.delay object PreferencePageProvider : SettingsPageProvider { object PreferencePageProvider : SettingsPageProvider { Loading Loading @@ -75,14 +79,17 @@ private fun PreferencePage() { } } }) }) var count by remember { mutableStateOf(0) } var count by rememberSaveable { mutableStateOf(0) } Preference(object : PreferenceModel { Preference(object : PreferenceModel { override val title = "Click me" override val title = "Click me" override val summary = derivedStateOf { count.toString() } override val summary = derivedStateOf { count.toString() } override val onClick: (() -> Unit) = { count++ } override val onClick: (() -> Unit) = { count++ } override val icon = @Composable { SettingsIcon(imageVector = Icons.Outlined.TouchApp) } }) }) var ticks by remember { mutableStateOf(0) } var ticks by rememberSaveable { mutableStateOf(0) } LaunchedEffect(ticks) { LaunchedEffect(ticks) { delay(1000L) delay(1000L) ticks++ ticks++ Loading @@ -96,6 +103,9 @@ private fun PreferencePage() { override val title = "Disabled" override val title = "Disabled" override val summary = "Disabled".toState() override val summary = "Disabled".toState() override val enabled = false.toState() override val enabled = false.toState() override val icon = @Composable { SettingsIcon(imageVector = Icons.Outlined.DisabledByDefault) } }) }) } } } } Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt +15 −3 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settingslib.spa.widget.preference import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.State import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import com.android.settingslib.spa.framework.compose.stateOf import com.android.settingslib.spa.framework.compose.stateOf Loading @@ -37,6 +38,14 @@ interface PreferenceModel { val summary: State<String> val summary: State<String> get() = stateOf("") get() = stateOf("") /** * The icon of this [Preference]. * * Default is `null` which means no icon. */ val icon: (@Composable () -> Unit)? get() = null /** /** * Indicates whether this [Preference] is enabled. * Indicates whether this [Preference] is enabled. * * Loading @@ -61,13 +70,16 @@ interface PreferenceModel { */ */ @Composable @Composable fun Preference(model: PreferenceModel) { fun Preference(model: PreferenceModel) { val modifier = model.onClick?.let { onClick -> val modifier = remember(model.enabled.value, model.onClick) { Modifier.clickable(enabled = model.enabled.value) { onClick() } model.onClick?.let { onClick -> Modifier.clickable(enabled = model.enabled.value, onClick = onClick) } ?: Modifier } ?: Modifier } BasePreference( BasePreference( title = model.title, title = model.title, summary = model.summary, summary = model.summary, modifier = modifier, modifier = modifier, icon = model.icon, enabled = model.enabled, enabled = model.enabled, ) ) } }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/SwitchPreference.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -100,7 +100,7 @@ internal fun InternalSwitchPreference( ) { ) { val checkedValue = checked.value val checkedValue = checked.value val indication = LocalIndication.current val indication = LocalIndication.current val modifier = remember(checkedValue) { val modifier = remember(checkedValue, changeable.value) { if (checkedValue != null && onCheckedChange != null) { if (checkedValue != null && onCheckedChange != null) { Modifier.toggleable( Modifier.toggleable( value = checkedValue, value = checkedValue, Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Footer.kt +9 −1 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview Loading @@ -32,7 +35,12 @@ import com.android.settingslib.spa.framework.theme.SettingsTheme fun Footer(footerText: String) { fun Footer(footerText: String) { if (footerText.isEmpty()) return if (footerText.isEmpty()) return Column(Modifier.padding(SettingsDimension.itemPadding)) { Column(Modifier.padding(SettingsDimension.itemPadding)) { SettingsIcon(imageVector = Icons.Outlined.Info, contentDescription = null) Icon( imageVector = Icons.Outlined.Info, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) Spacer(modifier = Modifier.height(SettingsDimension.itemPaddingVertical)) SettingsBody(footerText) SettingsBody(footerText) } } Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt +2 −5 Original line number Original line Diff line number Diff line Loading @@ -25,13 +25,10 @@ import androidx.compose.ui.graphics.vector.ImageVector import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.theme.SettingsDimension @Composable @Composable fun SettingsIcon( fun SettingsIcon(imageVector: ImageVector) { imageVector: ImageVector, contentDescription: String?, ) { Icon( Icon( imageVector = imageVector, imageVector = imageVector, contentDescription = contentDescription, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), modifier = Modifier.size(SettingsDimension.itemIconSize), tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface, ) ) Loading