Skip to main content
The UI Kit provides two levels of event handling: component-level callbacks set directly on a component, and global events via the CometChatEvents singleton using Kotlin SharedFlow.

Component-Level Callbacks

Click Callbacks

conversations.setOnItemClick { conversation ->
    // Navigate to chat screen
}

conversations.setOnItemLongClick { conversation ->
    // Show context menu
}

conversations.setOnBackPress {
    // Handle back navigation
}

conversations.setOnSearchClick {
    // Open search
}

conversations.setOnError { exception ->
    Log.e("Conversations", "Error: ${exception.message}")
}

conversations.setOnLoad { list ->
    Log.d("Conversations", "Loaded ${list.size} conversations")
}

conversations.setOnEmpty {
    Log.d("Conversations", "No conversations")
}

Selection Mode

Enable single or multi-select on list components:
// Enable multi-select mode
conversations.setSelectionMode(UIKitConstants.SelectionMode.MULTIPLE)

// Listen for selection changes
conversations.setOnSelection { selectedList ->
    updateToolbar(selectedList.size)
}

// Get selected items
val selected = conversations.getSelectedConversations()

// Clear selection
conversations.clearSelection()

Global Events (CometChatEvents)

Global events are emitted by UI Kit components when actions happen anywhere in the app. They use Kotlin SharedFlow for reactive, type-safe event distribution. Subscribe from any coroutine scope.

Event Flows

FlowSealed ClassFires When
CometChatEvents.messageEventsCometChatMessageEventMessages sent, edited, deleted, reactions, typing
CometChatEvents.callEventsCometChatCallEventCalls initiated, accepted, rejected, ended
CometChatEvents.conversationEventsCometChatConversationEventConversations deleted or updated
CometChatEvents.groupEventsCometChatGroupEventGroups created, updated, members changed
CometChatEvents.userEventsCometChatUserEventUsers blocked/unblocked
CometChatEvents.uiEventsCometChatUIEventUI-level events (panels, dialogs)

Subscribing to Events

import com.cometchat.uikit.core.events.CometChatEvents
import com.cometchat.uikit.core.events.CometChatMessageEvent

// Subscribe in a ViewModel or lifecycle-aware scope
viewModelScope.launch {
    CometChatEvents.messageEvents.collect { event ->
        when (event) {
            is CometChatMessageEvent.MessageSent -> {
                // Handle sent message: event.message, event.status
            }
            is CometChatMessageEvent.MessageDeleted -> {
                // Handle deleted message: event.message
            }
            is CometChatMessageEvent.MessageEdited -> {
                // Handle edited message: event.message
            }
            is CometChatMessageEvent.ReactionAdded -> {
                // Handle reaction: event.event
            }
            else -> { /* other message events */ }
        }
    }
}

Emitting Events

// Emit from anywhere — thread-safe
CometChatEvents.emitMessageEvent(
    CometChatMessageEvent.MessageSent(message, MessageStatus.SUCCESS)
)

CometChatEvents.emitCallEvent(
    CometChatCallEvent.OutgoingCall(call)
)

CometChatEvents.emitConversationEvent(
    CometChatConversationEvent.ConversationDeleted(conversation)
)

Key Event Types

Message Events:
EventData
MessageSentmessage, status
MessageEditedmessage, status
MessageDeletedmessage
MessageReadmessage
ReactionAdded / ReactionRemovedevent (ReactionEvent)
TypingStarted / TypingEndedindicator (TypingIndicator)
MessagesDelivered / MessagesReadreceipt (MessageReceipt)
Call Events:
EventData
OutgoingCallcall
CallAcceptedcall
CallRejectedcall
CallEndedcall
Conversation Events:
EventData
ConversationDeletedconversation
ConversationUpdatedconversation

Component vs Global Events

AspectComponent CallbacksGlobal Events
ScopeSingle component instanceApp-wide
RegistrationsetOnItemClick {} or composable parameterCometChatEvents.*.collect {}
Use caseHandle user interaction on a specific screenCross-component coordination
ExampleTap a conversation → navigateMessage sent → update conversation list