Skip to main content
FieldValue
Packagecom.cometchat:chat-uikit-android
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 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.
activity_messages.xmlLayout for the chat header, message list, and composer.

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
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.
  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 / MethodFile(s)
Launch New Chat screenMenu item click in ConversationActivityConversationActivity.java
Tabbed listsTabLayout + ViewPager2activity_new_chat.xml
List/search usersCometChatUsers + UsersRequestBuilderactivity_new_chat.xml
List/search groupsCometChatGroups + GroupsRequestBuilderactivity_new_chat.xml
Selection handlingsetOnItemClick()NewChatActivity.java
Initialize chatmessageHeader, messageList, composerMessagesActivity.java, activity_messages.xml

Next Steps & Further Reading

Android Sample App (Java)

Explore this feature in the CometChat SampleApp: GitHub → SampleApp

Android Sample App (Kotlin)

Explore this feature in the CometChat SampleApp: GitHub → SampleApp