From a12c37d6d9544b772fb530db69d2ef2cee859829 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 22 Dec 2025 15:25:54 +0100 Subject: [PATCH] misc : add enabled param to ListItemContent.Custom View --- .../shared/blockuser/BlockUserSection.kt | 2 +- .../components/list/ListItemContent.kt | 4 ++-- .../preferences/PreferenceCheckbox.kt | 1 - .../preferences/PreferenceDropdown.kt | 24 +++++++++++++------ .../components/preferences/PreferenceSlide.kt | 1 - .../preferences/PreferenceSwitch.kt | 1 - .../preferences/components/PreferenceIcon.kt | 3 +-- 7 files changed, 21 insertions(+), 15 deletions(-) diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt index 7a73c60e4a..c3caffa7f3 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/blockuser/BlockUserSection.kt @@ -70,7 +70,7 @@ private fun PreferenceBlockUser( isLoading: Boolean, eventSink: (UserProfileEvents) -> Unit, ) { - val loadingCurrentValue = @Composable { + val loadingCurrentValue = @Composable { _: Boolean -> CircularProgressIndicator( modifier = Modifier .progressSemantics() diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/ListItemContent.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/ListItemContent.kt index 022100abe1..e8add0369f 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/ListItemContent.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/ListItemContent.kt @@ -85,7 +85,7 @@ sealed interface ListItemContent { data class Text(val text: String) : ListItemContent /** Displays any custom content. */ - data class Custom(val content: @Composable () -> Unit) : ListItemContent + data class Custom(val content: @Composable (enabled: Boolean) -> Unit) : ListItemContent /** Displays a badge. */ data object Badge : ListItemContent @@ -131,7 +131,7 @@ sealed interface ListItemContent { is Counter -> { CounterAtom(count = count) } - is Custom -> content() + is Custom -> content(isItemEnabled) } } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt index 5277aca1c7..6b4a8e1e0c 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt @@ -43,7 +43,6 @@ fun PreferenceCheckbox( leadingContent = preferenceIcon( icon = icon, iconResourceId = iconResourceId, - enabled = enabled, showIconAreaIfNoIcon = showIconAreaIfNoIcon, ), headlineContent = { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt index 23fdec9942..5fcbcab475 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt @@ -40,7 +40,7 @@ import io.element.android.libraries.designsystem.theme.components.DropdownMenuIt import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.designsystem.toEnabledColor +import io.element.android.libraries.designsystem.toIconSecondaryEnabledColor import io.element.android.libraries.designsystem.toSecondaryEnabledColor import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -64,7 +64,6 @@ fun PreferenceDropdown( leadingContent = preferenceIcon( icon = icon, iconResourceId = iconResourceId, - enabled = enabled, showIconAreaIfNoIcon = showIconAreaIfNoIcon, ), headlineContent = { @@ -72,7 +71,6 @@ fun PreferenceDropdown( style = ElementTheme.typography.fontBodyLgRegular, modifier = Modifier.fillMaxWidth(), text = title, - color = enabled.toEnabledColor(), ) }, supportingContent = supportingText?.let { @@ -80,22 +78,23 @@ fun PreferenceDropdown( Text( style = ElementTheme.typography.fontBodyMdRegular, text = it, - color = enabled.toSecondaryEnabledColor(), ) } }, trailingContent = ListItemContent.Custom( - content = { + content = { enabled -> DropdownTrailingContent( selectedOption = selectedOption, options = options, onSelectOption = onSelectOption, expanded = isDropdownExpanded, onExpandedChange = { isDropdownExpanded = it }, + enabled = enabled, modifier = Modifier.fillMaxSize(0.3f) ) } ), + enabled = enabled, onClick = { isDropdownExpanded = true }.takeIf { !isDropdownExpanded }, ) } @@ -118,6 +117,7 @@ private fun DropdownTrailingContent( expanded: Boolean, onExpandedChange: (Boolean) -> Unit, onSelectOption: (T) -> Unit, + enabled: Boolean, modifier: Modifier = Modifier, ) { Row( @@ -129,7 +129,7 @@ private fun DropdownTrailingContent( text = selectedOption?.getText().orEmpty(), maxLines = 1, style = ElementTheme.typography.fontBodyMdRegular, - color = ElementTheme.colors.textSecondary, + color = enabled.toSecondaryEnabledColor(), overflow = TextOverflow.Ellipsis, textAlign = TextAlign.End, modifier = Modifier.weight(1f), @@ -137,7 +137,7 @@ private fun DropdownTrailingContent( Icon( imageVector = CompoundIcons.ChevronDown(), contentDescription = null, - tint = ElementTheme.colors.iconSecondary, + tint = enabled.toIconSecondaryEnabledColor(), ) DropdownMenu( expanded = expanded, @@ -146,6 +146,7 @@ private fun DropdownTrailingContent( ) { options.forEach { option -> DropdownMenuItem( + enabled = enabled, text = { Text( text = option.getText(), @@ -206,5 +207,14 @@ internal fun PreferenceDropdownPreview() = ElementThemedPreview { options = options, onSelectOption = {}, ) + PreferenceDropdown( + title = "Dropdown", + supportingText = "Options for dropdown", + icon = CompoundIcons.Threads(), + selectedOption = options.first(), + options = options, + onSelectOption = {}, + enabled = false + ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt index a5092609e9..671eb5bf3f 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt @@ -44,7 +44,6 @@ fun PreferenceSlide( leadingContent = preferenceIcon( icon = icon, iconResourceId = iconResourceId, - enabled = enabled, showIconAreaIfNoIcon = showIconAreaIfNoIcon, ), headlineContent = { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt index 404a26737f..4545dbdf3e 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt @@ -42,7 +42,6 @@ fun PreferenceSwitch( leadingContent = preferenceIcon( icon = icon, iconResourceId = iconResourceId, - enabled = enabled, showIconAreaIfNoIcon = showIconAreaIfNoIcon, ), headlineContent = { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt index b3e1227525..59e818c18a 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt @@ -34,11 +34,10 @@ fun preferenceIcon( @DrawableRes iconResourceId: Int? = null, showIconBadge: Boolean = false, tintColor: Color? = null, - enabled: Boolean = true, showIconAreaIfNoIcon: Boolean = false, ): ListItemContent.Custom? { return if (icon != null || iconResourceId != null || showIconAreaIfNoIcon) { - ListItemContent.Custom { + ListItemContent.Custom { enabled -> PreferenceIcon( icon = icon, iconResourceId = iconResourceId,