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