Use this file to discover all available pages before exploring further.
The Channel Messages component delivers a fully-featured chat thread: bi-directional message loading, emoji reactions, threaded replies, voice messages, polls, media attachments, message forwarding, multi-select, and self-destructing media — all wired to the Sceyt backend with no extra integration work. Use the turnkey ChannelActivity for a full-screen experience, or embed MessagesListView directly inside your own layout when you need a custom shell.
Use Destination.Channel through the UIKit navigator:
import com.sceyt.chatuikit.SceytChatUIKitimport com.sceyt.chatuikit.navigation.Destinationimport com.sceyt.chatuikit.navigation.navigate// Open the channel thread from anywhere that has a ContextSceytChatUIKit.navigator.navigate( context, Destination.Channel(channel))
To deep-link directly to a specific message (e.g., from a push notification), pass the optional targetMessageId:
Override ChannelActivity to inject your own logic without reimplementing the full screen:
class MyChannelActivity : ChannelActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // binding.messagesListView, binding.messageInputView, // and binding.headerView are all available here }}
Register your subclass as a custom destination so the UIKit router uses it automatically:
SceytChatUIKit.navigator.resolve = { destination -> when (destination) { is Destination.Channel -> MyDestinationChannel(destination.channel, destination.targetMessageId) else -> destination }}
MessagesListView is a ConstraintLayout subclass that contains only the message recycler, scroll-to-bottom button, and unread-mention jump button. Use it when you want to build your own toolbar or input area from scratch.
Tap any message to open the quick-reaction picker. Tap a reaction bubble to view the full reactions bottom sheet. Add custom emoji via the full emoji picker.
Reply in Thread
Swipe a message to compose a quick reply, or use the long-press menu to reply inside a dedicated thread view.
Voice Messages
Built-in voice recorder in the input bar. Playback with waveform visualization and seek control directly in the message bubble.
Polls
Create polls via Destination.CreatePoll. Voters can cast, retract, and view live results; channel owners can end the poll early.
Message Forwarding
Multi-select messages and forward them to any channel via Destination.Forward.
Media Attachments
Photo and video attachments open in a full-screen MediaPreviewActivity with swipe-through gallery support.
MessagesListView exposes three listener interfaces. You only need to implement the callbacks you want to override; defaults handle all standard behaviour.
messagesListView.setReactionPopupClickListener(object : ReactionPopupClickListenersImpl() { override fun onAddReaction(message: SceytMessage, key: String) { // key is the emoji string, e.g. "👍" }})
View-once messages (type ViewOnce) open in a dedicated preview that automatically destroys the attachment after it has been viewed. The destination is Destination.SelfDestructingMediaPreview:
// MessagesListView opens this automatically for ViewOnce attachments.// You can also open it manually:SceytChatUIKit.navigator.navigate( context, Destination.SelfDestructingMediaPreview( message = message, attachment = attachment ))
Individual message bubble styles — fonts, colours, corner radii, timestamp position, link preview cards, status icons — are all controlled by MessageItemStyle:
import com.sceyt.chatuikit.styles.messages_list.item.MessageItemStyleMessageItemStyle.styleCustomizer = StyleCustomizer { context, style -> style.copy( // Customise incoming / outgoing bubble colors, text styles, etc. )}
Apply the customizer before any MessagesListView is inflated (e.g., in Application.onCreate()). For the full list of available properties, see the Style Customization reference.