diff --git a/stream-chat-android-compose-sample/src/demo/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt b/stream-chat-android-compose-sample/src/demo/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt index 4367f0caa76..33ea4e7df85 100644 --- a/stream-chat-android-compose-sample/src/demo/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt +++ b/stream-chat-android-compose-sample/src/demo/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt @@ -27,6 +27,7 @@ import io.getstream.chat.android.compose.sample.BuildConfig import io.getstream.chat.android.compose.sample.ChatApp import io.getstream.chat.android.compose.sample.data.customSettings import io.getstream.chat.android.compose.sample.feature.channel.list.ChannelsActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.sample.ui.chats.ChatsActivity import io.getstream.chat.android.compose.sample.ui.login.UserLoginActivity import io.getstream.chat.android.models.InitializationState @@ -74,7 +75,7 @@ class StartupActivity : AppCompatActivity() { TaskStackBuilder.create(applicationContext) .addNextIntent(ChannelsActivity.createIntent(applicationContext)) .addNextIntent( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = applicationContext, channelId = channelId, messageId = messageId, diff --git a/stream-chat-android-compose-sample/src/main/AndroidManifest.xml b/stream-chat-android-compose-sample/src/main/AndroidManifest.xml index 59b1a5ea290..7b986641e90 100644 --- a/stream-chat-android-compose-sample/src/main/AndroidManifest.xml +++ b/stream-chat-android-compose-sample/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ android:exported="false" /> diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/AddChannelActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/AddChannelActivity.kt index bfd4974af8b..38a93c33303 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/AddChannelActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/AddChannelActivity.kt @@ -27,7 +27,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import io.getstream.chat.android.compose.sample.R import io.getstream.chat.android.compose.sample.feature.channel.add.group.AddGroupChannelActivity -import io.getstream.chat.android.compose.sample.ui.MessagesActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.ui.theme.ChatComponentFactory import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.ui.theme.MessageComposerLeadingContentParams @@ -82,7 +82,7 @@ class AddChannelActivity : ComponentActivity() { } private fun openChannel(cid: String) { - val intent = MessagesActivity.createIntent(this, cid) + val intent = ChannelActivity.createIntent(this, cid) startActivity(intent) finish() } diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/group/AddGroupChannelActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/group/AddGroupChannelActivity.kt index 46552f46332..3e36ecb74d4 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/group/AddGroupChannelActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/add/group/AddGroupChannelActivity.kt @@ -24,7 +24,7 @@ import androidx.activity.viewModels import androidx.compose.runtime.LaunchedEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import io.getstream.chat.android.compose.sample.R -import io.getstream.chat.android.compose.sample.ui.MessagesActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.ui.theme.ChatTheme import kotlinx.coroutines.flow.collectLatest @@ -76,7 +76,7 @@ class AddGroupChannelActivity : ComponentActivity() { } private fun openChannel(cid: String) { - val intent = MessagesActivity.createIntent(this, cid) + val intent = ChannelActivity.createIntent(this, cid) startActivity(intent) finish() } diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/draft/DraftChannelActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/draft/DraftChannelActivity.kt index f2fb5b8bb18..7f080e6e3f7 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/draft/DraftChannelActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/draft/DraftChannelActivity.kt @@ -27,7 +27,7 @@ import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import io.getstream.chat.android.compose.sample.R -import io.getstream.chat.android.compose.sample.ui.MessagesActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.ui.theme.ChatTheme import kotlinx.coroutines.flow.collectLatest @@ -68,7 +68,7 @@ class DraftChannelActivity : ComponentActivity() { when (event) { is DraftChannelViewEvent.NavigateToChannel -> { startActivity( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = applicationContext, channelId = event.cid, ), diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt index 44475d2c963..a074891365d 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt @@ -66,8 +66,8 @@ import io.getstream.chat.android.compose.sample.feature.channel.add.AddChannelAc import io.getstream.chat.android.compose.sample.feature.channel.add.group.AddGroupChannelActivity import io.getstream.chat.android.compose.sample.feature.channel.isGroupChannel import io.getstream.chat.android.compose.sample.feature.reminders.MessageRemindersActivity -import io.getstream.chat.android.compose.sample.ui.MessagesActivity import io.getstream.chat.android.compose.sample.ui.SampleChatTheme +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.sample.ui.channel.DirectChannelInfoActivity import io.getstream.chat.android.compose.sample.ui.channel.GroupChannelInfoActivity import io.getstream.chat.android.compose.sample.ui.component.AppBottomBar @@ -359,7 +359,7 @@ class ChannelsActivity : ComponentActivity() { private fun openMessages(channel: Channel) { startActivity( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = this, channelId = channel.cid, messageId = null, @@ -370,7 +370,7 @@ class ChannelsActivity : ComponentActivity() { private fun openMessages(message: Message) { startActivity( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = this, channelId = message.cid, messageId = message.id, @@ -381,7 +381,7 @@ class ChannelsActivity : ComponentActivity() { private fun openThread(thread: Thread) { startActivity( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = this, channelId = thread.parentMessage.cid, parentMessageId = thread.parentMessageId, diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/reminders/MessageRemindersActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/reminders/MessageRemindersActivity.kt index 553293d765e..8dfe52286be 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/reminders/MessageRemindersActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/reminders/MessageRemindersActivity.kt @@ -21,7 +21,7 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.ui.Modifier -import io.getstream.chat.android.compose.sample.ui.MessagesActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.models.Message @@ -47,7 +47,7 @@ class MessageRemindersActivity : ComponentActivity() { private fun openMessages(message: Message) { startActivity( - MessagesActivity.createIntent( + ChannelActivity.createIntent( context = this, channelId = message.cid, messageId = message.id, diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/MessagesActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/ChannelActivity.kt similarity index 90% rename from stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/MessagesActivity.kt rename to stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/ChannelActivity.kt index 81f551cb8c5..793594c8606 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/MessagesActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/ChannelActivity.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.getstream.chat.android.compose.sample.ui +package io.getstream.chat.android.compose.sample.ui.channel import android.content.Context import android.content.Intent @@ -23,10 +23,11 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import io.getstream.chat.android.compose.sample.R import io.getstream.chat.android.compose.sample.data.customSettings import io.getstream.chat.android.compose.sample.feature.channel.isGroupChannel -import io.getstream.chat.android.compose.sample.ui.channel.DirectChannelInfoActivity -import io.getstream.chat.android.compose.sample.ui.channel.GroupChannelInfoActivity +import io.getstream.chat.android.compose.sample.ui.SampleChatTheme import io.getstream.chat.android.compose.ui.messages.ChannelScreen import io.getstream.chat.android.compose.ui.theme.AttachmentPickerConfig import io.getstream.chat.android.compose.ui.theme.ChatUiConfig @@ -35,7 +36,7 @@ import io.getstream.chat.android.compose.viewmodel.messages.ChannelViewModelFact import io.getstream.chat.android.compose.viewmodel.messages.ComposerOptions import io.getstream.chat.android.models.Channel -class MessagesActivity : ComponentActivity() { +class ChannelActivity : ComponentActivity() { private val settings by lazy { customSettings() } @@ -90,6 +91,7 @@ class MessagesActivity : ComponentActivity() { viewModelFactory = factory, onBackPressed = { finish() }, onChannelAvatarClick = ::openChannelInfo, + onChannelAvatarClickLabel = stringResource(R.string.channel_open_info), ) } @@ -113,7 +115,7 @@ class MessagesActivity : ComponentActivity() { messageId: String? = null, parentMessageId: String? = null, ): Intent { - return Intent(context, MessagesActivity::class.java).apply { + return Intent(context, ChannelActivity::class.java).apply { putExtra(KEY_CHANNEL_ID, channelId) putExtra(KEY_MESSAGE_ID, messageId) putExtra(KEY_PARENT_MESSAGE_ID, parentMessageId) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/GroupChannelInfoActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/GroupChannelInfoActivity.kt index e3c95c098c7..fcf10fd14ab 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/GroupChannelInfoActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/channel/GroupChannelInfoActivity.kt @@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import io.getstream.chat.android.compose.sample.feature.channel.draft.DraftChannelActivity -import io.getstream.chat.android.compose.sample.ui.MessagesActivity import io.getstream.chat.android.compose.sample.ui.channel.attachments.ChannelFilesAttachmentsActivity import io.getstream.chat.android.compose.sample.ui.channel.attachments.ChannelMediaAttachmentsActivity import io.getstream.chat.android.compose.sample.ui.pinned.PinnedMessagesActivity @@ -111,7 +110,7 @@ class GroupChannelInfoActivity : ComponentActivity() { openFilesAttachments() is ChannelInfoViewEvent.NavigateToChannel -> - startActivity(MessagesActivity.createIntent(context = this, channelId = event.cid)) + startActivity(ChannelActivity.createIntent(context = this, channelId = event.cid)) is ChannelInfoViewEvent.NavigateToDraftChannel -> startActivity(DraftChannelActivity.createIntent(context = this, memberIds = listOf(event.memberId))) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/pinned/PinnedMessagesActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/pinned/PinnedMessagesActivity.kt index b6707ab4f0b..04f64976719 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/pinned/PinnedMessagesActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/pinned/PinnedMessagesActivity.kt @@ -24,7 +24,7 @@ import androidx.activity.compose.setContent import androidx.activity.viewModels import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.ui.Modifier -import io.getstream.chat.android.compose.sample.ui.MessagesActivity +import io.getstream.chat.android.compose.sample.ui.channel.ChannelActivity import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.viewmodel.pinned.PinnedMessageListViewModel import io.getstream.chat.android.compose.viewmodel.pinned.PinnedMessageListViewModelFactory @@ -71,7 +71,7 @@ class PinnedMessagesActivity : ComponentActivity() { } private fun openMessage(message: Message) { - val intent = MessagesActivity.createIntent( + val intent = ChannelActivity.createIntent( context = applicationContext, channelId = message.cid, messageId = message.id, diff --git a/stream-chat-android-compose-sample/src/main/res/values/strings.xml b/stream-chat-android-compose-sample/src/main/res/values/strings.xml index 58d006c48f3..6ff49a951e7 100644 --- a/stream-chat-android-compose-sample/src/main/res/values/strings.xml +++ b/stream-chat-android-compose-sample/src/main/res/values/strings.xml @@ -127,5 +127,7 @@ Failed to load more media attachments Failed to load more files attachments + + Open channel info diff --git a/stream-chat-android-compose/api/stream-chat-android-compose.api b/stream-chat-android-compose/api/stream-chat-android-compose.api index 67ec9635600..be6ab571f78 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -1745,7 +1745,7 @@ public final class io/getstream/chat/android/compose/ui/mentions/MentionListKt { } public final class io/getstream/chat/android/compose/ui/messages/ChannelScreenKt { - public static final fun ChannelScreen (Lio/getstream/chat/android/compose/viewmodel/messages/ChannelViewModelFactory;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V + public static final fun ChannelScreen (Lio/getstream/chat/android/compose/viewmodel/messages/ChannelViewModelFactory;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ZZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V public static final fun MessageDialogs (Lio/getstream/chat/android/compose/viewmodel/messages/MessageListViewModel;Landroidx/compose/runtime/Composer;I)V public static final fun MessageMenus (Landroidx/compose/foundation/layout/BoxScope;Lio/getstream/chat/android/compose/viewmodel/messages/MessageListViewModel;Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;ZZLandroidx/compose/runtime/Composer;I)V public static final fun MessageModerationDialog (Lio/getstream/chat/android/compose/viewmodel/messages/MessageListViewModel;Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;ZZLandroidx/compose/runtime/Composer;I)V @@ -2099,17 +2099,18 @@ public final class io/getstream/chat/android/compose/ui/messages/composer/intern } public final class io/getstream/chat/android/compose/ui/messages/header/ChannelHeaderKt { - public static final fun ChannelHeader (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun ChannelHeader (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V } public final class io/getstream/chat/android/compose/ui/messages/header/ComposableSingletons$ChannelHeaderKt { public static final field INSTANCE Lio/getstream/chat/android/compose/ui/messages/header/ComposableSingletons$ChannelHeaderKt; public fun ()V public final fun getLambda$-1151753628$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$-145224249$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$1045527387$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$135791923$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$1656639282$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$2106788621$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; - public final fun getLambda$957576860$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; } public final class io/getstream/chat/android/compose/ui/messages/list/ComposableSingletons$MessageItemKt { @@ -2627,8 +2628,8 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelFilesAttach public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/ConnectionState; public final fun component3 ()Landroidx/compose/ui/Modifier; @@ -2636,8 +2637,9 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderCente public final fun component5 ()Ljava/util/List; public final fun component6 ()Lio/getstream/chat/android/ui/common/state/messages/MessageMode; public final fun component7 ()Lkotlin/jvm/functions/Function1; - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams; + public final fun component8 ()Ljava/lang/String; + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderCenterContentParams; public fun equals (Ljava/lang/Object;)Z public final fun getChannel ()Lio/getstream/chat/android/models/Channel; public final fun getConnectionState ()Lio/getstream/chat/android/models/ConnectionState; @@ -2645,6 +2647,7 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderCente public final fun getMessageMode ()Lio/getstream/chat/android/ui/common/state/messages/MessageMode; public final fun getModifier ()Landroidx/compose/ui/Modifier; public final fun getOnClick ()Lkotlin/jvm/functions/Function1; + public final fun getOnClickLabel ()Ljava/lang/String; public final fun getTypingUsers ()Ljava/util/List; public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -2664,9 +2667,11 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderLeadi public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; + public final fun component10 ()Lkotlin/jvm/functions/Function1; + public final fun component11 ()Ljava/lang/String; public final fun component2 ()Lio/getstream/chat/android/models/ConnectionState; public final fun component3 ()Landroidx/compose/ui/Modifier; public final fun component4 ()Lio/getstream/chat/android/models/User; @@ -2674,9 +2679,9 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderParam public final fun component6 ()Lio/getstream/chat/android/ui/common/state/messages/MessageMode; public final fun component7 ()Lkotlin/jvm/functions/Function0; public final fun component8 ()Lkotlin/jvm/functions/Function1; - public final fun component9 ()Lkotlin/jvm/functions/Function1; - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams; + public final fun component9 ()Ljava/lang/String; + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Lio/getstream/chat/android/models/User;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderParams; public fun equals (Ljava/lang/Object;)Z public final fun getChannel ()Lio/getstream/chat/android/models/Channel; public final fun getConnectionState ()Lio/getstream/chat/android/models/ConnectionState; @@ -2685,7 +2690,9 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderParam public final fun getModifier ()Landroidx/compose/ui/Modifier; public final fun getOnBackPressed ()Lkotlin/jvm/functions/Function0; public final fun getOnChannelAvatarClick ()Lkotlin/jvm/functions/Function1; + public final fun getOnChannelAvatarClickLabel ()Ljava/lang/String; public final fun getOnHeaderTitleClick ()Lkotlin/jvm/functions/Function1; + public final fun getOnHeaderTitleClickLabel ()Ljava/lang/String; public final fun getTypingUsers ()Ljava/util/List; public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -2693,17 +2700,19 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderParam public final class io/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/User; public final fun component3 ()Lkotlin/jvm/functions/Function1; - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelHeaderTrailingContentParams; public fun equals (Ljava/lang/Object;)Z public final fun getChannel ()Lio/getstream/chat/android/models/Channel; public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; public final fun getOnClick ()Lkotlin/jvm/functions/Function1; + public final fun getOnClickLabel ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/ChannelScreen.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/ChannelScreen.kt index 720102be9fe..f757ba0a4f0 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/ChannelScreen.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/ChannelScreen.kt @@ -111,7 +111,9 @@ import kotlinx.coroutines.launch * @param onBackPressed Handler for when the user taps on the Back button and/or the system * back button. * @param onHeaderTitleClick Handler for when the user taps on the header section. + * @param onHeaderTitleClickLabel Semantic / accessibility label for [onHeaderTitleClick]. * @param onChannelAvatarClick Handler called when the user taps on the channel avatar. + * @param onChannelAvatarClickLabel Semantic / accessibility label for [onChannelAvatarClick]. * @param skipPushNotification If new messages should skip triggering a push notification when sent. False by default. * @param skipEnrichUrl If new messages being sent, or existing ones being updated should skip enriching the URL. * If URL is not enriched, it will not be displayed as a link attachment. False by default. @@ -128,7 +130,9 @@ public fun ChannelScreen( viewModelFactory: ChannelViewModelFactory, onBackPressed: () -> Unit = {}, onHeaderTitleClick: ((channel: Channel) -> Unit)? = null, + onHeaderTitleClickLabel: String? = null, onChannelAvatarClick: ((Channel) -> Unit)? = null, + onChannelAvatarClickLabel: String? = null, skipPushNotification: Boolean = false, skipEnrichUrl: Boolean = false, verticalArrangement: Arrangement.Vertical = Arrangement.Bottom, @@ -138,7 +142,9 @@ public fun ChannelScreen( viewModelFactory = viewModelFactory, backAction = it, onHeaderTitleClick = onHeaderTitleClick, + onHeaderTitleClickLabel = onHeaderTitleClickLabel, onChannelAvatarClick = onChannelAvatarClick, + onChannelAvatarClickLabel = onChannelAvatarClickLabel, ) }, bottomBarContent: @Composable () -> Unit = { @@ -331,6 +337,8 @@ internal fun DefaultTopBarContent( backAction: BackAction, onHeaderTitleClick: ((channel: Channel) -> Unit)?, onChannelAvatarClick: ((Channel) -> Unit)?, + onHeaderTitleClickLabel: String? = null, + onChannelAvatarClickLabel: String? = null, ) { val listViewModel = viewModel(MessageListViewModel::class.java, factory = viewModelFactory) @@ -347,7 +355,9 @@ internal fun DefaultTopBarContent( messageMode = messageMode, onBackPressed = backAction, onHeaderTitleClick = onHeaderTitleClick, + onHeaderTitleClickLabel = onHeaderTitleClickLabel, onChannelAvatarClick = onChannelAvatarClick, + onChannelAvatarClickLabel = onChannelAvatarClickLabel, modifier = Modifier.defaultMinSize(minHeight = 72.dp), ), ) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt index 57ab982d2b0..9321942a3f3 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -51,6 +52,7 @@ import io.getstream.chat.android.models.Channel import io.getstream.chat.android.models.ConnectionState import io.getstream.chat.android.models.User import io.getstream.chat.android.previewdata.PreviewChannelData +import io.getstream.chat.android.previewdata.PreviewMessageData import io.getstream.chat.android.previewdata.PreviewUserData import io.getstream.chat.android.ui.common.state.messages.MessageMode @@ -67,7 +69,9 @@ import io.getstream.chat.android.ui.common.state.messages.MessageMode * @param messageMode The current message mode, that changes the header content, if we're in a Thread. * @param onBackPressed Handler that propagates the back button click event. * @param onHeaderTitleClick Action handler when the user taps on the header title section. + * @param onHeaderTitleClickLabel Semantic / accessibility label for [onHeaderTitleClick]. * @param onChannelAvatarClick Action handler called when the user taps on the channel avatar. + * @param onChannelAvatarClickLabel Semantic / accessibility label for [onChannelAvatarClick]. * @param leadingContent The content shown at the start of the header, by default a [BackButton]. * @param centerContent The content shown in the middle of the header and represents the core information, by default * [DefaultChannelHeaderCenterContent]. @@ -83,7 +87,9 @@ public fun ChannelHeader( messageMode: MessageMode = MessageMode.Normal, onBackPressed: () -> Unit = {}, onHeaderTitleClick: ((Channel) -> Unit)? = null, + onHeaderTitleClickLabel: String? = null, onChannelAvatarClick: ((Channel) -> Unit)? = null, + onChannelAvatarClickLabel: String? = null, leadingContent: @Composable RowScope.() -> Unit = { with(ChatTheme.componentFactory) { ChannelHeaderLeadingContent( @@ -104,6 +110,7 @@ public fun ChannelHeader( typingUsers = typingUsers, messageMode = messageMode, onClick = onHeaderTitleClick, + onClickLabel = onHeaderTitleClickLabel, ), ) } @@ -115,6 +122,7 @@ public fun ChannelHeader( channel = channel, currentUser = currentUser, onClick = onChannelAvatarClick, + onClickLabel = onChannelAvatarClickLabel, ), ) } @@ -151,6 +159,7 @@ internal fun DefaultChannelHeaderLeadingContent(onBackPressed: () -> Unit) { * @param modifier Modifier for styling. * @param messageMode Currently active message mode, used to define the title information. * @param onHeaderTitleClick Handler for when the user taps on the header title section. + * @param onHeaderTitleClickLabel Semantic / accessibility label for [onHeaderTitleClick]. */ @Suppress("LongMethod") @Composable @@ -161,6 +170,7 @@ internal fun DefaultChannelHeaderCenterContent( modifier: Modifier = Modifier, messageMode: MessageMode = MessageMode.Normal, onHeaderTitleClick: ((Channel) -> Unit)? = null, + onHeaderTitleClickLabel: String? = null, ) { val title = when (messageMode) { MessageMode.Normal -> ChatTheme.channelNameFormatter.formatChannelName(channel, currentUser) @@ -182,12 +192,11 @@ internal fun DefaultChannelHeaderCenterContent( Column( modifier = modifier .height(IntrinsicSize.Max) - .run { - if (onHeaderTitleClick != null) { - clickable { onHeaderTitleClick(channel) } - } else { - this - } + .ifNotNull(onHeaderTitleClick) { callback -> + clickable( + onClickLabel = onHeaderTitleClickLabel, + role = Role.Button, + ) { callback(channel) } }, horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -256,19 +265,25 @@ internal fun DefaultChannelHeaderSubtitle( * @param channel The channel used to display the avatar. * @param currentUser The current user. Used for choosing which avatar to display. * @param onClick The handler called when the user taps on the channel avatar. + * @param onClickLabel Semantic / accessibility label for [onClick]. */ @Composable internal fun DefaultChannelHeaderTrailingContent( channel: Channel, currentUser: User?, onClick: ((Channel) -> Unit)?, + onClickLabel: String? = null, ) { ChatTheme.componentFactory.ChannelAvatar( params = ChannelAvatarParams( modifier = Modifier .size(40.dp) .ifNotNull(onClick) { callback -> - clickable(bounded = false) { callback(channel) } + clickable( + bounded = false, + onClickLabel = onClickLabel, + role = Role.Button, + ) { callback(channel) } }, channel = channel, currentUser = currentUser, @@ -276,78 +291,126 @@ internal fun DefaultChannelHeaderTrailingContent( ) } -@Preview(name = "ChannelHeader Preview (Connected)") +@Preview @Composable private fun ChannelHeaderConnectedPreview() { ChatTheme { - ChannelHeader( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight(), - channel = PreviewChannelData.channelWithImage, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Connected, - ) + ChannelHeaderConnected() } } -@Preview(name = "ChannelHeader Preview (Connecting)") +@Composable +internal fun ChannelHeaderConnected() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithImage, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Connected, + ) +} + +@Preview @Composable private fun ChannelHeaderConnectingPreview() { ChatTheme { - ChannelHeader( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight(), - channel = PreviewChannelData.channelWithImage, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Connecting, - ) + ChannelHeaderConnecting() } } -@Preview(name = "ChannelHeader Preview (Offline)") +@Composable +internal fun ChannelHeaderConnecting() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithImage, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Connecting, + ) +} + +@Preview @Composable private fun ChannelHeaderOfflinePreview() { ChatTheme { - ChannelHeader( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight(), - channel = PreviewChannelData.channelWithImage, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Offline, - ) + ChannelHeaderOffline() } } -@Preview(name = "ChannelHeader Preview (User Typing)") @Composable -private fun ChannelHeaderUserTypingPreview() { +internal fun ChannelHeaderOffline() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithImage, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Offline, + ) +} + +@Preview +@Composable +private fun ChannelHeaderManyMembersPreview() { ChatTheme { - ChannelHeader( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight(), - channel = PreviewChannelData.channelWithImage, - currentUser = PreviewUserData.user1, - typingUsers = listOf(PreviewUserData.user2), - connectionState = ConnectionState.Connected, - ) + ChannelHeaderManyMembers() } } -@Preview(name = "ChannelHeader Preview (Many Members)") @Composable -private fun ChannelHeaderManyMembersPreview() { +internal fun ChannelHeaderManyMembers() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithManyMembers, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Connected, + ) +} + +@Preview +@Composable +private fun ChannelHeaderFewMembersPreview() { ChatTheme { - ChannelHeader( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight(), - channel = PreviewChannelData.channelWithManyMembers, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Connected, - ) + ChannelHeaderFewMembers() } } + +@Composable +internal fun ChannelHeaderFewMembers() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithFewMembers, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Connected, + ) +} + +@Preview +@Composable +private fun ChannelHeaderThreadModePreview() { + ChatTheme { + ChannelHeaderThreadMode() + } +} + +@Composable +internal fun ChannelHeaderThreadMode() { + ChannelHeader( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + channel = PreviewChannelData.channelWithImage, + currentUser = PreviewUserData.user1, + connectionState = ConnectionState.Connected, + messageMode = MessageMode.MessageThread( + parentMessage = PreviewMessageData.message1, + threadState = null, + ), + ) +} diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt index 3dbc3c76522..7f222042062 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt @@ -633,7 +633,9 @@ public interface ChatComponentFactory { messageMode = params.messageMode, onBackPressed = params.onBackPressed, onHeaderTitleClick = params.onHeaderTitleClick, + onHeaderTitleClickLabel = params.onHeaderTitleClickLabel, onChannelAvatarClick = params.onChannelAvatarClick, + onChannelAvatarClickLabel = params.onChannelAvatarClickLabel, ) } @@ -663,6 +665,7 @@ public interface ChatComponentFactory { connectionState = params.connectionState, messageMode = params.messageMode, onHeaderTitleClick = params.onClick, + onHeaderTitleClickLabel = params.onClickLabel, ) } @@ -677,6 +680,7 @@ public interface ChatComponentFactory { channel = params.channel, currentUser = params.currentUser, onClick = params.onClick, + onClickLabel = params.onClickLabel, ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt index 7e52eeaa646..355e1587c85 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt @@ -394,7 +394,9 @@ public data class SearchResultItemTrailingContentParams( * @param messageMode The current message mode. * @param onBackPressed Action invoked when the back button is pressed. * @param onHeaderTitleClick Action invoked when the header title is clicked. + * @param onHeaderTitleClickLabel Semantic / accessibility label for [onHeaderTitleClick]. * @param onChannelAvatarClick Action invoked when the channel avatar is clicked. + * @param onChannelAvatarClickLabel Semantic / accessibility label for [onChannelAvatarClick]. */ public data class ChannelHeaderParams( val channel: Channel, @@ -405,7 +407,9 @@ public data class ChannelHeaderParams( val messageMode: MessageMode = MessageMode.Normal, val onBackPressed: () -> Unit = {}, val onHeaderTitleClick: ((Channel) -> Unit)? = null, + val onHeaderTitleClickLabel: String? = null, val onChannelAvatarClick: ((Channel) -> Unit)? = null, + val onChannelAvatarClickLabel: String? = null, ) /** @@ -427,6 +431,7 @@ public data class ChannelHeaderLeadingContentParams( * @param typingUsers The list of users currently typing. * @param messageMode The current message mode. * @param onClick Action invoked when the header is clicked. + * @param onClickLabel Semantic / accessibility label for [onClick]. */ public data class ChannelHeaderCenterContentParams( val channel: Channel, @@ -436,6 +441,7 @@ public data class ChannelHeaderCenterContentParams( val typingUsers: List = emptyList(), val messageMode: MessageMode = MessageMode.Normal, val onClick: ((Channel) -> Unit)? = null, + val onClickLabel: String? = null, ) /** @@ -444,11 +450,13 @@ public data class ChannelHeaderCenterContentParams( * @param channel The channel to display. * @param currentUser The currently logged in user. * @param onClick Action invoked when the trailing content is clicked. + * @param onClickLabel Semantic / accessibility label for [onClick]. */ public data class ChannelHeaderTrailingContentParams( val channel: Channel, val currentUser: User?, val onClick: ((Channel) -> Unit)? = null, + val onClickLabel: String? = null, ) /** diff --git a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/ChannelHeaderTest.kt b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/ChannelHeaderTest.kt deleted file mode 100644 index 7a12a06c0f8..00000000000 --- a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/ChannelHeaderTest.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2014-2026 Stream.io Inc. All rights reserved. - * - * Licensed under the Stream License; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://github.com/GetStream/stream-chat-android/blob/main/LICENSE - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.getstream.chat.android.compose.ui.messages - -import app.cash.paparazzi.DeviceConfig -import app.cash.paparazzi.Paparazzi -import io.getstream.chat.android.compose.ui.PaparazziComposeTest -import io.getstream.chat.android.compose.ui.messages.header.ChannelHeader -import io.getstream.chat.android.models.ConnectionState -import io.getstream.chat.android.previewdata.PreviewChannelData -import io.getstream.chat.android.previewdata.PreviewMessageData -import io.getstream.chat.android.previewdata.PreviewUserData -import io.getstream.chat.android.ui.common.state.messages.MessageMode -import org.junit.Rule -import org.junit.Test - -internal class ChannelHeaderTest : PaparazziComposeTest { - - @get:Rule - override val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_2) - - @Test - fun `connected state`() { - snapshotWithDarkMode { - ChannelHeader( - channel = PreviewChannelData.channelWithFewMembers, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Connected, - ) - } - } - - @Test - fun `offline state`() { - snapshotWithDarkMode { - ChannelHeader( - channel = PreviewChannelData.channelWithFewMembers, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Offline, - ) - } - } - - @Test - fun `thread mode`() { - snapshotWithDarkMode { - ChannelHeader( - channel = PreviewChannelData.channelWithFewMembers, - currentUser = PreviewUserData.user1, - connectionState = ConnectionState.Connected, - messageMode = MessageMode.MessageThread( - parentMessage = PreviewMessageData.message1, - threadState = null, - ), - ) - } - } -} diff --git a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/header/ChannelHeaderTest.kt b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/header/ChannelHeaderTest.kt new file mode 100644 index 00000000000..cdd8da00051 --- /dev/null +++ b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/messages/header/ChannelHeaderTest.kt @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2014-2026 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-chat-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.getstream.chat.android.compose.ui.messages.header + +import app.cash.paparazzi.DeviceConfig +import app.cash.paparazzi.Paparazzi +import io.getstream.chat.android.compose.ui.PaparazziComposeTest +import org.junit.Rule +import org.junit.Test + +internal class ChannelHeaderTest : PaparazziComposeTest { + + @get:Rule + override val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_2) + + @Test + fun connected() { + snapshotWithDarkMode { + ChannelHeaderConnected() + } + } + + @Test + fun connecting() { + snapshotWithDarkMode { + ChannelHeaderConnecting() + } + } + + @Test + fun offline() { + snapshotWithDarkMode { + ChannelHeaderOffline() + } + } + + @Test + fun `few members`() { + snapshotWithDarkMode { + ChannelHeaderFewMembers() + } + } + + @Test + fun `many members`() { + snapshotWithDarkMode { + ChannelHeaderManyMembers() + } + } + + @Test + fun `thread mode`() { + snapshotWithDarkMode { + ChannelHeaderThreadMode() + } + } +} diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connected.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connected.png new file mode 100644 index 00000000000..1392f32a351 Binary files /dev/null and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connected.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connecting.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connecting.png new file mode 100644 index 00000000000..6254e280492 Binary files /dev/null and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_connecting.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_connected_state.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_few_members.png similarity index 100% rename from stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_connected_state.png rename to stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_few_members.png diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_many_members.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_many_members.png new file mode 100644 index 00000000000..1f5c12dfde5 Binary files /dev/null and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_many_members.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_offline.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_offline.png new file mode 100644 index 00000000000..c9e4098bc32 Binary files /dev/null and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_offline.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_thread_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_thread_mode.png new file mode 100644 index 00000000000..f222dcde316 Binary files /dev/null and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages.header_ChannelHeaderTest_thread_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_offline_state.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_offline_state.png deleted file mode 100644 index c9446eb2225..00000000000 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_offline_state.png and /dev/null differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_thread_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_thread_mode.png deleted file mode 100644 index 402cd6d5710..00000000000 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_ChannelHeaderTest_thread_mode.png and /dev/null differ