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.
// In ConversationActivity.java
toolbar.inflateMenu(R.menu.conversation_menu);
toolbar.setOnMenuItemClickListener(item -> {
  if (item.getItemId() == R.id.action_new_chat) {
    startActivity(new Intent(this, NewChatActivity.class));
    return true;
  }
  return false;
});
Provides entry to the New Chat flow.

2. Implement New Chat Screen

Build a tabbed interface with Users and Groups lists.
// In NewChatActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_new_chat);

  TabLayout tabs = findViewById(R.id.tabLayout);
  ViewPager2 pager = findViewById(R.id.viewPager);
  NewChatPagerAdapter adapter = new NewChatPagerAdapter(this);
  pager.setAdapter(adapter);
  new TabLayoutMediator(tabs, pager, (tab, pos) ->
    tab.setText(pos == 0 ? "Users" : "Groups")
  ).attach();
}
File reference:
NewChatActivity.java
Layout reference:
activity_new_chat.xml
Initializes tabs and loads CometChatUsers / CometChatGroups fragments.

3. Handle User or Group Selection

Launch MessagesActivity when an item is tapped.
// In NewChatActivity.java (Users fragment)
cometChatUsers.setOnItemClick((user, clickListener) -> {
  Intent i = new Intent(this, MessagesActivity.class);
  i.putExtra("app_user", new Gson().toJson(user));
  startActivity(i);
});

// Similarly for CometChatGroups:
cometChatGroups.setOnItemClick((group, clickListener) -> {
  Intent i = new Intent(this, MessagesActivity.class);
  i.putExtra("app_group", new Gson().toJson(group));
  startActivity(i);
});
File reference:
NewChatActivity.java
Routes selection to the chat interface with proper context.

4. Open the Messages Screen

Read intent extras and configure chat UI.
// In MessagesActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_messages);

  String userJson = getIntent().getStringExtra("app_user");
  String groupJson = getIntent().getStringExtra("app_group");

  if (userJson != null) {
    User user = new Gson().fromJson(userJson, User.class);
    messageHeader.setUser(user);
    messageList.setUser(user);
    composer.setUser(user);
  } else if (groupJson != null) {
    Group group = new Gson().fromJson(groupJson, Group.class);
    messageHeader.setGroup(group);
    messageList.setGroup(group);
    composer.setGroup(group);
  }
}
File reference:
MessagesActivity.java
Layout reference:
activity_messages.xml
Binds the selected conversation context to the UI Kit components.

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