diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOption.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOption.kt index 1583744546c..044375a10fc 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOption.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOption.kt @@ -82,6 +82,7 @@ internal fun ChannelInfoOption( internal fun ChannelInfoOptionButton( @DrawableRes icon: Int, text: String, + destructive: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier, ) { @@ -92,11 +93,13 @@ internal fun ChannelInfoOptionButton( Icon( painter = painterResource(icon), contentDescription = null, + tint = if (destructive) ChatTheme.colors.buttonDestructiveText else ChatTheme.colors.textSecondary, ) Text( modifier = Modifier.weight(1f), text = text, style = ChatTheme.typography.bodyDefault, + color = if (destructive) ChatTheme.colors.buttonDestructiveText else ChatTheme.colors.textPrimary, maxLines = 1, overflow = TextOverflow.Ellipsis, ) @@ -172,6 +175,7 @@ private fun ChannelInfoOptionButtonPreview() { ChannelInfoOptionButton( icon = R.drawable.stream_design_ic_delete, text = "Delete", + destructive = true, onClick = {}, ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOptionItem.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOptionItem.kt index 9fe3fc89839..0bb87961e91 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOptionItem.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channel/info/ChannelInfoOptionItem.kt @@ -16,9 +16,7 @@ package io.getstream.chat.android.compose.ui.channel.info -import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -104,23 +102,22 @@ private fun ChannelInfoOptionContent( } is ChannelInfoViewState.Content.Option.BlockUser -> { - CompositionLocalProvider(LocalContentColor.provides(ChatTheme.colors.accentError)) { - ChannelInfoOptionButton( - icon = R.drawable.stream_design_ic_no_sign, - text = if (option.isBlocked) { - stringResource(UiCommonR.string.stream_ui_channel_info_option_unblock_user) + ChannelInfoOptionButton( + icon = R.drawable.stream_design_ic_no_sign, + text = if (option.isBlocked) { + stringResource(UiCommonR.string.stream_ui_channel_info_option_unblock_user) + } else { + stringResource(UiCommonR.string.stream_ui_channel_info_option_block_user) + }, + destructive = false, + onClick = { + if (option.isBlocked) { + onViewAction(ChannelInfoViewAction.UnblockUserClick) } else { - stringResource(UiCommonR.string.stream_ui_channel_info_option_block_user) - }, - onClick = { - if (option.isBlocked) { - onViewAction(ChannelInfoViewAction.UnblockUserClick) - } else { - onViewAction(ChannelInfoViewAction.BlockUserClick) - } - }, - ) - } + onViewAction(ChannelInfoViewAction.BlockUserClick) + } + }, + ) } is ChannelInfoViewState.Content.Option.PinnedMessages -> { @@ -148,31 +145,29 @@ private fun ChannelInfoOptionContent( } is ChannelInfoViewState.Content.Option.LeaveChannel -> { - CompositionLocalProvider(LocalContentColor.provides(ChatTheme.colors.accentError)) { - ChannelInfoOptionButton( - icon = R.drawable.stream_design_ic_leave, - text = if (isGroupChannel) { - stringResource(UiCommonR.string.stream_ui_channel_info_option_leave_group) - } else { - stringResource(UiCommonR.string.stream_ui_channel_info_option_leave_conversation) - }, - onClick = { onViewAction(ChannelInfoViewAction.LeaveChannelClick) }, - ) - } + ChannelInfoOptionButton( + icon = R.drawable.stream_design_ic_leave, + text = if (isGroupChannel) { + stringResource(UiCommonR.string.stream_ui_channel_info_option_leave_group) + } else { + stringResource(UiCommonR.string.stream_ui_channel_info_option_leave_conversation) + }, + destructive = true, + onClick = { onViewAction(ChannelInfoViewAction.LeaveChannelClick) }, + ) } is ChannelInfoViewState.Content.Option.DeleteChannel -> { - CompositionLocalProvider(LocalContentColor.provides(ChatTheme.colors.accentError)) { - ChannelInfoOptionButton( - icon = R.drawable.stream_design_ic_delete, - text = if (isGroupChannel) { - stringResource(UiCommonR.string.stream_ui_channel_info_option_delete_group) - } else { - stringResource(UiCommonR.string.stream_ui_channel_info_option_delete_conversation) - }, - onClick = { onViewAction(ChannelInfoViewAction.DeleteChannelClick) }, - ) - } + ChannelInfoOptionButton( + icon = R.drawable.stream_design_ic_delete, + text = if (isGroupChannel) { + stringResource(UiCommonR.string.stream_ui_channel_info_option_delete_group) + } else { + stringResource(UiCommonR.string.stream_ui_channel_info_option_delete_conversation) + }, + destructive = true, + onClick = { onViewAction(ChannelInfoViewAction.DeleteChannelClick) }, + ) } } } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt index 74c10fb4ffb..a6e167bc295 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt @@ -326,9 +326,7 @@ private fun buildGroupChannelActions( selectedChannel = selectedChannel, viewModel = viewModel, ), - // Owner pattern: if user can delete, show Delete Group (not Leave) - // Member pattern: if user can leave but not delete, show Leave Group - if (optionVisibility.isLeaveChannelVisible && canLeaveChannel && !canDeleteChannel) { + if (optionVisibility.isLeaveChannelVisible && canLeaveChannel) { LeaveGroup( channel = selectedChannel, label = stringResource(id = R.string.stream_compose_selected_channel_menu_leave_group), diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_dark_mode.png index 2905a6013a4..0de69414556 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_dark_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_dark_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_light_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_light_mode.png index 3cfc030f642..21736ccf3f7 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_light_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_direct_channel_info_option_items_in_light_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_dark_mode.png index 1927c881232..e0667609c5c 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_dark_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_dark_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_light_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_light_mode.png index 15111bdbeb9..4ec7047591e 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_light_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_ChannelInfoOptionItemTest_group_channel_info_option_items_in_light_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content.png index 8e7ea48c46f..2cd2ea18abf 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content_in_dark_mode.png index 3360bbd3657..34d7ffa58ea 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content_in_dark_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channel.info_DirectChannelInfoContentTest_content_in_dark_mode.png differ diff --git a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewController.kt b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewController.kt index 8543303c968..3f147975c9a 100644 --- a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewController.kt +++ b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewController.kt @@ -545,10 +545,11 @@ private fun buildChannelOptionList( add(ChannelInfoViewState.Content.Option.PinnedMessages) add(ChannelInfoViewState.Content.Option.MediaAttachments) add(ChannelInfoViewState.Content.Option.FilesAttachments) + if (channelData.ownCapabilities.contains(ChannelCapabilities.LEAVE_CHANNEL)) { + add(ChannelInfoViewState.Content.Option.LeaveChannel) + } if (channelData.ownCapabilities.contains(ChannelCapabilities.DELETE_CHANNEL)) { add(ChannelInfoViewState.Content.Option.DeleteChannel) - } else if (channelData.ownCapabilities.contains(ChannelCapabilities.LEAVE_CHANNEL)) { - add(ChannelInfoViewState.Content.Option.LeaveChannel) } } } diff --git a/stream-chat-android-ui-common/src/test/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewControllerTest.kt b/stream-chat-android-ui-common/src/test/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewControllerTest.kt index aeb188f3918..7e48c9a3433 100644 --- a/stream-chat-android-ui-common/src/test/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewControllerTest.kt +++ b/stream-chat-android-ui-common/src/test/kotlin/io/getstream/chat/android/ui/common/feature/channel/info/ChannelInfoViewControllerTest.kt @@ -406,6 +406,7 @@ internal class ChannelInfoViewControllerTest { ChannelInfoViewState.Content.Option.MediaAttachments, ChannelInfoViewState.Content.Option.FilesAttachments, + ChannelInfoViewState.Content.Option.LeaveChannel, ChannelInfoViewState.Content.Option.DeleteChannel, ), ),