Skip to main content
FieldValue
Packagescom.cometchat:chatuikit-kotlin · com.cometchat:chatuikit-jetpack
Key componentsCometChatUsers, CometChatGroups, CometChatMessageList, CometChatMessageComposer, CometChatMessageHeader
PurposeEnable users to start one-on-one or group chats from a new chat screen with user and group browsing.
RelatedUsers, Groups, Conversations, All Guides
Enable users to start one-on-one or group chats by integrating CometChat’s New Chat screen (CometChatUsers + CometChatGroups), providing a seamless flow from your conversation list to a specific chat.

Overview

Users can tap the ”+” icon in the conversation toolbar or bottom navigation to:
  • Browse and search CometChat users.
  • Browse and search CometChat groups.
  • Select a user or group to launch a chat.
This streamlines contact/group discovery and boosts engagement by reducing friction in starting conversations.

Prerequisites

  • Android project with CometChat UIKit Android v5 (com.cometchat:chatuikit-kotlin or com.cometchat:chatuikit-jetpack) added in build.gradle.
  • CometChat credentials (App ID, Auth Key, Region) initialized.
  • Navigation configured: ConversationActivityNewChatActivityMessagesActivity.
  • Internet and network permissions granted in AndroidManifest.xml.

Components

Component / ClassRole
ConversationActivityEntry point; hosts ”+” icon to launch New Chat screen.
NewChatActivityDisplays tabbed Users/Groups lists.
activity_new_chat.xmlLayout defining TabLayout, CometChatUsers, CometChatGroups.
CometChatUsersLists and searches users; exposes setOnItemClick().
CometChatGroupsLists and searches groups; exposes setOnItemClick().
UsersRequestBuilderConfigures user query filters (e.g. pagination).
GroupsRequestBuilderConfigures group query filters (e.g. pagination).
MessagesActivityChat UI for the selected user or group.

Integration Steps

1. Add Entry Point to New Chat

Show a ”+” icon that launches NewChatActivity.
ConversationActivity.kt
// In ConversationActivity.kt
toolbar.inflateMenu(R.menu.conversation_menu)
toolbar.setOnMenuItemClickListener { item ->
    if (item.itemId == R.id.action_new_chat) {
        startActivity(Intent(this, NewChatActivity::class.java))
        true
    } else false
}

2. Implement New Chat Screen

Build a tabbed interface with Users and Groups lists.
NewChatActivity.kt
// In NewChatActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_chat)

    val tabs = findViewById<TabLayout>(R.id.tabLayout)
    val pager = findViewById<ViewPager2>(R.id.viewPager)
    val adapter = NewChatPagerAdapter(this)
    pager.adapter = adapter
    TabLayoutMediator(tabs, pager) { tab, pos ->
        tab.text = if (pos == 0) "Users" else "Groups"
    }.attach()
}

3. Handle User or Group Selection

Launch MessagesActivity when an item is tapped.
NewChatActivity.kt
// In NewChatActivity.kt (Users fragment)
cometChatUsers.setOnItemClick { view, position, user ->
    val intent = Intent(this, MessagesActivity::class.java)
    intent.putExtra("app_user", Gson().toJson(user))
    startActivity(intent)
}

// Similarly for CometChatGroups:
cometChatGroups.setOnItemClick { view, position, group ->
    val intent = Intent(this, MessagesActivity::class.java)
    intent.putExtra("app_group", Gson().toJson(group))
    startActivity(intent)
}

4. Open the Messages Screen

Read intent extras and configure chat UI.
MessagesActivity.kt
// In MessagesActivity.kt
import com.cometchat.uikit.kotlin.presentation.messageheader.ui.CometChatMessageHeader
import com.cometchat.uikit.kotlin.presentation.messagelist.ui.CometChatMessageList
import com.cometchat.uikit.kotlin.presentation.messagecomposer.ui.CometChatMessageComposer

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_messages)

    val userJson = intent.getStringExtra("app_user")
    val groupJson = intent.getStringExtra("app_group")

    if (userJson != null) {
        val user = Gson().fromJson(userJson, User::class.java)
        messageHeader.setUser(user)
        messageList.setUser(user)
        composer.setUser(user)
    } else if (groupJson != null) {
        val group = Gson().fromJson(groupJson, Group::class.java)
        messageHeader.setGroup(group)
        messageList.setGroup(group)
        composer.setGroup(group)
    }
}

Implementation Flow

  1. User taps the ”+” icon → NewChatActivity launches (or Compose navigation).
  2. Tabs switch between Users and Groups.
  3. Selection triggers MessagesActivity with JSON payload.
  4. Chat UI initializes with the passed user/group.
  5. Real-time messaging begins via the UI Kit.

Customization Options

  • Styling: Apply cometchatTheme attributes to TabLayout and list items.
  • Filtering: Customize UsersRequestBuilder / GroupsRequestBuilder (e.g., hideBlockedUsers(true)).
  • Navigation: Replace default MessagesActivity with a custom screen.
  • Layout Tweaks: Use android:fitsSystemWindows="true" to avoid overlap.

Filtering & Edge Cases

  • Empty States: Built-in empty views in CometChatUsers and CometChatGroups.
  • Protected Groups: Prompt for password or disable selection.
  • Network Errors: Observe error callbacks and show Snackbar messages.

Error Handling

  • Default loading and error states are handled by the UI Kit.
  • Attach observers on CometChatUsers / CometChatGroups to handle failures.
  • Use Toast or Snackbar for custom error feedback.

Summary / Feature Matrix

FeatureComponent / Method
Launch New Chat screenMenu item click in ConversationActivity
Tabbed listsTabLayout + ViewPager2 or Compose TabRow
List/search usersCometChatUsers + UsersRequestBuilder
List/search groupsCometChatGroups + GroupsRequestBuilder
Selection handlingsetOnItemClick() / onItemClick lambda
Initialize chatmessageHeader, messageList, composer

Next Steps & Further Reading

Android Sample App (Kotlin)

Explore this feature in the CometChat SampleApp: GitHub → SampleApp