> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-013b37f0.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Components

Version: v2

**UI Components** are building a block of the UI Kit. **UI Components** are a set of custom classes specially designed to build a feature-rich chat app. To achieve high customizability while building an app one can use the UI Components. There are different UI Components available in the UI Kit library.

## **CometChatUI**

**CometChatUI** is an option to launch a fully functional chat application using the UI Kit. In **CometChatUI** all the UI Components are interlinked and work together to launch a fully functional chat on your mobile application.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Msoa3RE39lFag8X2/images/22912601-1631637138-47de8b833d156952ca770153c2cc7fd3.png?fit=max&auto=format&n=Msoa3RE39lFag8X2&q=85&s=96f40b627d44672d5df6c20a3b8ad962" width="4260" height="2800" data-path="images/22912601-1631637138-47de8b833d156952ca770153c2cc7fd3.png" />
</Frame>

CometChatUI is an Activity class, so you can launch `CometChatUI` using the below code snippet Make sure to add the following code snippet after `onSuccess` of CometChat login.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    startActivity(Intent(this@YourActivity, CometChatUI::class.java))
    ```
  </Tab>
</Tabs>

<Warning>
  Make sure that the above code snippet is added after `onSuccess` of CometChat login.
</Warning>

***

## **CometChatConversationList**

The **CometChatConversationList** is Fragment which will help you to display a list of recent conversations. The Fragment has all the necessary listeners and methods required to display the list of conversations.

### **Usage**

In your layout file (.xml file) add the following snippet to use the `CometChatConversationList`. Adding the following code snippet will give you a fully working list of conversations.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/conversationList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class=" com.cometchat.pro.uikit.
    ui_components.chats.CometChatConversationList "
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Msoa3RE39lFag8X2/images/245f01f3-clist-f965f1409766359da23bb8a77f55db26.png?fit=max&auto=format&n=Msoa3RE39lFag8X2&q=85&s=674aceb96f126ada1af275eccee0c986" width="488" height="792" data-path="images/245f01f3-clist-f965f1409766359da23bb8a77f55db26.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatConversationList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatConversationList.setItemClickListener(object : OnItemClickListener<Any(){
      	override fun OnItemClick(t: Any, position: Int) {
          
    		}
      	override fun OnItemLongClick(t: Any, position: Int) {
        	super.OnItemLongClick(t, position)
            
        }
    })
    ```
  </Tab>
</Tabs>

***

## **CometChatUserList**

The `CometChatUserList` is a fragment with a List of users. The Fragment has all the necessary listeners and methods required to display the user's list.

### **Usage**

In your layout file (.xml file) add the following snippet to use the `CometChatUserList`. Adding the following code snippet will give you a fully working list of users.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/userList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.users.user_list.CometChatUserList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/vw_0NXjZvDpFf83K/images/b486bb44-ulist-509daec9703bb45748b1856eb9384b67.png?fit=max&auto=format&n=vw_0NXjZvDpFf83K&q=85&s=4910fb75a056f3a020d8f8db06ce02f7" width="438" height="750" data-path="images/b486bb44-ulist-509daec9703bb45748b1856eb9384b67.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatUserList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatUserList.setItemClickListener(object : OnItemClickListener<Any>() {
      
                override fun OnItemClick(t: Any, position: Int) {
                    
                }
                override fun OnItemLongClick(t: Any, position: Int) {
                    super.OnItemLongClick(t, position)
                }
            })
    ```
  </Tab>
</Tabs>

***

## **CometChatGroupList**

The `CometChatGroupList` is a fragment with a List of groups Fragment has all the necessary listeners and methods required to display the list of groups

### **Usage**

In your `layout.xml` add the following snippet to use the `CometChatGroupList`.Adding the following code snippet will give you a full working list of groups.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/groupList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.groups.group_list.CometChatGroupList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Ljt9AcZicJcNxpPO/images/0f3c5ed8-glist-4d611a98845f18221c04b88f13bcd530.png?fit=max&auto=format&n=Ljt9AcZicJcNxpPO&q=85&s=d88fca189ce819b1f523ab94f42779f9" width="418" height="758" data-path="images/0f3c5ed8-glist-4d611a98845f18221c04b88f13bcd530.png" />
</Frame>

<Note>
  Note About setItemClickListener on CometChatGroupList

  To get the click event of the list you must use `setItemClickListener`. The `setItemClickListener` has `OnItemClick()` to handle single click and `OnItemLongClick()` to handle long click events.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatGroupList.setItemClickListener(object : OnItemClickListener<Any>() {
      
                override fun OnItemClick(t: Any, position: Int) {
                    
                }
                override fun OnItemLongClick(t: Any, position: Int) {
                    super.OnItemLongClick(t, position)
                }
            })
    ```
  </Tab>
</Tabs>

***

## **CometChatMessageList**

`CometChatMessageList` is a fragment that consists of send and received messages. It is capable of sending and receiving different types of messages such as text, image, and documents.

### **Usage**

To use `CometChatMessageList` follow the below code snippets. `CometChatMessageList` is a dynamic so it will require some arguments. Add a `FrameLayout` in your `layout.xml`

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    Intent intent = Intent(this@YOURACTIVITY, CometChatMessageListActivity::class.java);
    intent.putExtra(UIKitConstants.IntentStrings.UID, user.getUid());
    intent.putExtra(UIKitConstants.IntentStrings.AVATAR, user.getAvatar());
    intent.putExtra(UIKitConstants.IntentStrings.STATUS, user.getStatus());
    intent.putExtra(UIKitConstants.IntentStrings.NAME, user.getName());
    intent.putExtra(UIKitConstants.IntentStrings.LINK,user.getLink());
    intent.putExtra(UIKitConstants.IntentStrings.TYPE, CometChatConstants.RECEIVER_TYPE_USER);
    startActivity(intent);
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/KBeeQSUYKNgSyZ7m/images/3f7097d6-mlist-7d25f42b217faf0c488f279bb2aed507.png?fit=max&auto=format&n=KBeeQSUYKNgSyZ7m&q=85&s=2bfa596a264813657e8613ba53c734ad" width="1098" height="1902" data-path="images/3f7097d6-mlist-7d25f42b217faf0c488f279bb2aed507.png" />
</Frame>

In your activity set the required parameter in the following manner.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val bundle = Bundle()
    bundle.putString(UIKitContracts.IntentStrings.AVATAR, "AvatarUrl")
    bundle.putString(UIKitContracts.IntentStrings.NAME,"Name")
    bundle.putString(UIKitContracts.IntentStrings.TYPE,CometChatConstants.RECEIVER_TYPE_USER)
    bundle.putString(UIKitContracts.IntentStrings.UID,"UID")
    bundle.putString(UIKitContracts.IntentStrings.STATUS,"STATUS")
    fragment.arguments = bundle
    supportFragmentManager.beginTransaction().replace(R.id.ChatFragment, fragment).commit()
    ```
  </Tab>
</Tabs>

***

## **CometChatCallList**

You can use the CometChatCallList to get a list of all the calls made by the logged-in user to other users and groups.

### **Usage**

Add the following code in your layout file (.xml file)

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    Intent intent = Intent(this@YOURACTIVITY, CometChatMessageListActivity::class.java);
    intent.putExtra(UIKitConstants.IntentStrings.UID, user.getUid());
    intent.putExtra(UIKitConstants.IntentStrings.AVATAR, user.getAvatar());
    intent.putExtra(UIKitConstants.IntentStrings.STATUS, user.getStatus());
    intent.putExtra(UIKitConstants.IntentStrings.NAME, user.getName());
    intent.putExtra(UIKitConstants.IntentStrings.LINK,user.getLink());
    intent.putExtra(UIKitConstants.IntentStrings.TYPE, CometChatConstants.RECEIVER_TYPE_USER);
    startActivity(intent);
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/PhOli_uzWYY61x6S/images/93f4af11-calllist-d7222819bbd06871770abb1d17e9fd1c.png?fit=max&auto=format&n=PhOli_uzWYY61x6S&q=85&s=b3b5efc65fd42e0ac4807b28b7af5998" width="434" height="768" data-path="images/93f4af11-calllist-d7222819bbd06871770abb1d17e9fd1c.png" />
</Frame>

***

## **CometChatUserProfile**

`CometChatUserProfile` is a fragment which provides detail about the currently logged-in user in the CometChat.

### **Usage**

Add the following code in your layout file (.xml file)

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <fragment
    android:id="@+id/userInfo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.cometchat.pro.uikit
    .ui_components.userprofile.CometChatUserProfile"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/GhYys0LCUFYC4zjz/images/8c5597f2-profile-f74cd1e468b06b47eba606e11c6b9f45.png?fit=max&auto=format&n=GhYys0LCUFYC4zjz&q=85&s=1f1818b338e57674370d17690bd29f82" width="442" height="764" data-path="images/8c5597f2-profile-f74cd1e468b06b47eba606e11c6b9f45.png" />
</Frame>

***

## **Shared**

There are certain core components that are being used everywhere in `uiKit` library. You will find those components in `shared` folder under `ui_components`. Below are core components that are being used in `uiKit` library.

### **CometChatAvatar**

This is an image view customize only to display Avatar. This view can be used with image URLs as well as with CometChat objects like `User` and `Group`

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/en-qdWUpyc0gQJjA/images/6358abd7-shared-d6a87eedb04fc11e26b4e97693ca9c5f.gif?s=a688152a4d1de0311cf64b99ac3ffd30" width="600" height="1067" data-path="images/6358abd7-shared-d6a87eedb04fc11e26b4e97693ca9c5f.gif" />
</Frame>

#### **Usage**

In your `layout.xml` add the following code snippet.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatAvatar.CometChatAvatar
                android:id="@+id/av_user"
                android:layout_width="60dp"
                app:avatar_shape="@string/circle"
                android:layout_height="60dp" />
    ```
  </Tab>
</Tabs>

Here `avatar_shape` is a static property. It should be either `circle` or `rectangle`. whereas the avatar URL needs to be set dynamically following is the sample code for the same.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val avatar: CometChatAvatar = findViewById(R.id.av_user)
    userViewHolder.avatar.setAvatarUrl("https://randomuser.me/api/portraits/women/44.jpg")
    ```
  </Tab>
</Tabs>

The CometChatAvatar Component works well with CometChat `User` and `Group` object. The `setAvatar()` method accepts `User` or `Group` object if Avatar of `User` or `Group` is not available it automatically show the initials of the user or group name as a placeholder Avatar.

<Frame>
  <img src="data:image/png;base64,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" />
</Frame>

<Frame>
  <img src="data:image/png;base64,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" />
</Frame>

#### **Common Features**

CometChat Avatar class provides functionality for an Avatar feature. There are commonly used properties to control the look of the Avatar.

| CometChatAvatar field element | Relevant attributes/methods                                                                                                                          |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Avatar Shape                  | `app:avatar_shape`                                                                                                                                   |
| Avatar                        | `app:avatar``# setAvatar(@NonNull User)``# setAvatar(@NonNull Group)``# setAvatar(@NonNull String)``# setAvatar(@NonNull Drawable, @NonNull String)` |
| Avatar Initial                | `app:avatar_initials``# setInitials(@NonNull String)`                                                                                                |
| Border Color                  | `app:border_color`                                                                                                                                   |
| Border Width                  | `app:border_width`                                                                                                                                   |

***

### **CometChatUserPresence**

This view will be used to show the user status if the user is online or offline. This view will take user status and display the color accordingly.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Czw6a3oEz4RIW75k/images/e401dbd3-presence-0e66a4dda4a98b937cb7451aac11c4d3.gif?s=531532fa1b45273bebd0c05100207ee5" width="600" height="1067" data-path="images/e401dbd3-presence-0e66a4dda4a98b937cb7451aac11c4d3.gif" />
</Frame>

#### **Usage**

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatUserPresence.CometChatUserPresence
                android:id="@+id/statusIndicator"
                android:layout_width="15dp"
                android:layout_height="15dp"
                app:user_status="@string/offline"
                />
    ```
  </Tab>
</Tabs>

User status can be set dynamically using the following code.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val userPresence: CometChatUserPresence = findViewById(R.id.statusIndicator)
     userViewHolder.statusIndicator.setUserStatus(user.status)
    ```
  </Tab>
</Tabs>

#### **Common Features**

CometChatUserPresence provides `app:user_status` attribute and method `setUserStatus` to set Status of the user.

The `app:user_status` attribute can also be used with DataBinding in the following manner

e.g `app:user_status="@{user.status}"` you can also use different objects according to their use case. The attribute will continue to work as long as receives a string parameter

| CometChatUserPresence field element | Relevant attributes/methods                         |
| ----------------------------------- | --------------------------------------------------- |
| User Status                         | `app:user_status``# setUserStatus(@NonNull String)` |

***

### **CometChatBadgeCount**

The CometChatBadgeCount component can be used to show an unread count. You can use it in different scenarios according to their use case.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/-u9ODPUkMM-sHNen/images/452d3450-badge-5a7da331416a5a5512ba74e54e38f31c.gif?s=ad64a2be97aa330774629f8a338c2860" width="600" height="1067" data-path="images/452d3450-badge-5a7da331416a5a5512ba74e54e38f31c.gif" />
</Frame>

Add the following code to your `layout.xml`

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatBadgeCount.CometChatBadgeCount
                    android:id="@+id/badgeCount"
                    android:layout_width="wrap_content"
                    app:count="2"
                    android:layout_height="wrap_content"/>
    ```
  </Tab>
</Tabs>

The count can be set dynamically using the `setCount` method. The `setCount` method takes an int as a parameter.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val badgeCount: CometChatBadgeCount = findViewById(R.id.badgecount)
    holder.badgeCount.messageCount.setCount(conversation.unreadMessageCount)
    ```
  </Tab>
</Tabs>

#### **Common Feature**

The CometChatBadgeCount component provides different attributes and methods to control the behavior and appearance of the BadgeCount view.

The attribute `app: count` can also be used with DataBinding

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    /// example with conversation object
        
        <com.cometchat.pro.uikit.ui_components.shared.cometchatBadgeCount.CometChatBadgeCount
                    android:id="@+id/badgeCount"
                    android:layout_width="wrap_content"
                    app:count="@{conversation.unreadMessageCount}"
                    android:layout_height="wrap_content"/>
    ```
  </Tab>
</Tabs>

| CometChatBadgeCount field element | Relevant attributes/methods                                         |
| --------------------------------- | ------------------------------------------------------------------- |
| Count                             | `app:count``# setCount(int)`                                        |
| Count Size                        | `app:count_size``# setCountSize(float)`                             |
| Count Background Color            | `app:count_background_color``# setCountBackground(@ColorRes color)` |
| Count Color                       | `app:count_color``setCountSize(float)`                              |

***

### **CometChatUsers**

The `CometChatUsers` is custom **RecyclerView** which helps to display a list of users present in your CometChat app.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/ctZcp72VcLuKpsyo/images/86113eed-users-203c3bd4399cfd1d8be34b95c061cd14.jpg?fit=max&auto=format&n=ctZcp72VcLuKpsyo&q=85&s=70adc61e96711b3026395ac4f113f000" width="1440" height="3120" data-path="images/86113eed-users-203c3bd4399cfd1d8be34b95c061cd14.jpg" />
</Frame>

<Note>
  Note about CometChatUsers using with DataBinding:

  Your project should have DataBinding enabled. You can use `CometChatUsers` using DataBinding in the following manner
</Note>

In your `layout.xml` add the following code :

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.User"/>
        
                <variable
                    name="userList"
                    type="ObservableList<User>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatUsers.CometChatUsers
                android:id="@+id/cometchatUserList"
                android:layout_width="match_parent"
                app:userlist="@{userList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment add the following code

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val userList: ObservableArrayList<User> = ObservableArrayList<User>()
    binding.setUserList(userList)
    ```
  </Tab>
</Tabs>

For getting the list of users you can use `UsersRequestBuilder()`. Visit the below link for more details on how to retrieve a list of users.

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setUserList(userList);` every time you get a new set of data.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    usersRequest.fetchNext(object : CallbackListener<List<User>>() {
                public override fun onSuccess(list: List<User>) {
                    Log.d(TAG, "User list received: " + list.size)
                    userList.addAll(list)
                    //update the ObservableArrayList here 
                }

                public override fun onError(e: CometChatException) {
                    Log.d(TAG, "User list fetching failed with exception: " + e.message)
                }
            })
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatUsers Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatUser` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatUsers.CometChatUsers
          android:id="@+id/cometchatUser"
          android:layout_width="match_parent"    
          app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 
          android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    var cometChatUsers: CometChatUsers = findViewById(R.id.cometchatUsers);
    cometChatUser.setUserList(list);
    // list: fetched using the UsersRequestBuilder
    ```
  </Tab>
</Tabs>

To get the list of users you can use UsersRequestBuilder(). Visit the link below for more details on [Retrieve Users](/sdk/android/2.0/retrieve-users)

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatUsers` you can make use of `setItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatUsers.setItemClickListener(object : OnItemClickListener<Any>() {
      
                override fun OnItemClick(t: Any, position: Int) {
                    
                }
                override fun OnItemLongClick(t: Any, position: Int) {
                    super.OnItemLongClick(t, position)
                }
            })
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatUser` component provides different properties to control the behavior of `CometChatUser` view.

| CometChatUser field elements | Relevant attributes/methods |
| ---------------------------- | --------------------------- |
| Update List                  | `# setUserList(List<User>)` |
| Update                       | `# update (User)`           |
| Remove                       | `# remove(String)`          |
| Add                          | `# add(User)`               |

***

### **CometChatGroups**

The `CometChatGroups` is a custom **RecyclerView** that helps you to display a list of groups.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/gwyRT6PY8hzLhEaL/images/67729951-groups-8c598dd4200bdd050bb1b3b2effb2271.jpg?fit=max&auto=format&n=gwyRT6PY8hzLhEaL&q=85&s=baaa0742d700d1495f71848ad26b9c86" width="1440" height="3120" data-path="images/67729951-groups-8c598dd4200bdd050bb1b3b2effb2271.jpg" />
</Frame>

***

<Note>
  Note About CometChatGroups Using With DataBinding

  If you are using DataBinding in your project you can use the `CometChatGroups` in the following manner.
</Note>

In your `layout.xml` add the following code snippet

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
        
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.Group"/>
        
                <variable
                    name="groupList"
                    type="ObservableList<Group>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatGroups.CometChatGroups
                android:id="@+id/cometchatGroupList"
                android:layout_width="match_parent"
                app:grouplist="@{groupList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment .

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val groupList: ObservableArrayList<Group> = ObservableArrayList<Group>()
    binding.setGroupList(groupList)
    ```
  </Tab>
</Tabs>

For getting the list of groups you can use `GroupsRequestBuilder()`.Visit the below link for more details on how to retrieve a list of group.

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setGroupList(groupList);` every time you get a new set of data.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    groupsRequest.fetchNext(object : CallbackListener<List<Group>>() {
                public override fun onSuccess(list: List<Group>) {
                    Log.d(TAG, "Groups list fetched successfully: " + list.size);
                    groupList.addAll(list)
                    // update the ObservableArrayList here
                }

                public override fun onError(e: CometChatException) {
                    Log.d(TAG, "Groups list fetching failed with exception: " + e.message);
                }
            })
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatGroups Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatGroups` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatGroups.CometChatGroups
                android:id="@+id/cometchatGroupList"
                android:layout_width="match_parent"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val cometChatGroups: CometChatGroups = findViewById(R.id.cometchatGroupList)
     cometChatGroups.setGroupList(list)
     // list: fetched using the GroupsRequestBuilder
    ```
  </Tab>
</Tabs>

You can refer to how to [Retrieve Groups](/sdk/android/2.0/retrieve-groups).

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatGroups` you can make use of `setItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatGroups.setItemClickListener(object : OnItemClickListener<Any>() {
      
                override fun OnItemClick(t: Any, position: Int) {
                    
                }
                override fun OnItemLongClick(t: Any, position: Int) {
                    super.OnItemLongClick(t, position)
                }
            })
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatGroups` component provides different properties to control the behavior of `CometChatGroups` view. You can perform different operations like an update, remove, add, etc.

| CometChatGroups field elements | Relevant attributes/methods   |
| ------------------------------ | ----------------------------- |
| Update List                    | `# setGroupList(List<Group>)` |
| Update                         | `# update (Group)`            |
| Remove                         | `# remove(String)`            |
| Add                            | `# add(Group)`                |

***

### **CometChatConversations**

`CometChatConversations` is a custom **RecyclerView** which will help you to display a list of all the users and groups in which the logged-in user has made any conversation.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/crySXmrfj1cbCy1Q/images/2a09abdb-conversations-1e6edc0cd162671904900432ce5383e6.jpg?fit=max&auto=format&n=crySXmrfj1cbCy1Q&q=85&s=8954ed82faa9f7e5a7562a86c1c87047" width="1440" height="3120" data-path="images/2a09abdb-conversations-1e6edc0cd162671904900432ce5383e6.jpg" />
</Frame>

<Note>
  Note about CometChatConversations using with DataBinding

  If you are using DataBinding in your project you can use the `CometChatConversations` in the following manner.
</Note>

In your `layout.xml` add the following code.

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <data>
        
                <import type="androidx.recyclerview.widget.LinearLayoutManager"/>
                <import type="androidx.databinding.ObservableList"/>
                <import type="com.cometchat.pro.models.Conversation"/>
        
                <variable
                    name="conversationList"
                    type="ObservableList<Conversation>" />
        
            </data>
        
            <com.cometchat.pro.uikit.ui_components.shared.cometchatConversations.CometChatConversations
                android:id="@+id/cometchatConversationList"
                android:layout_width="match_parent"
                app:conversationlist="@{conversationList}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val conversationList: ObservableArrayList<Conversation> = ObservableArrayList()
    binding.setConversationList(conversationList)
    ```
  </Tab>
</Tabs>

For getting the list of conversation you can use `ConversationsRequestBuilder()` .visit the below link for more details on how to retrieve a list of conversation

In `onSuccess` of the `fetchNext` method you can set the data the `ObservableArrayList` you have created. The advantage of using the `ObservableArrayList` is one doesn't have to manually set the data on `binding.setConversationList(conversationList);` every time you get a new set of data.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    conversationsRequest.fetchNext(object : CallbackListener<List<Conversation>>() {
                override fun onSuccess(conversations: List<Conversation>) {
                    // Handle list of conversations
                    conversationList.addAll(conversations)
                    // update ObservableArrayList list here
                }

                override fun onError(e: CometChatException) {
                    // Handle failure
                    Log.d(TAG, "onError: " + e.message)
                }
            })
    ```
  </Tab>
</Tabs>

<Note>
  Note About CometChatConversations Without DataBinding

  If you are not using DataBinding in your project you can use the `CometChatConversations` in the following manner.
</Note>

In your `layout.xml` add the following code

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.ui_components.shared.cometchatConversations.CometChatConversations
                android:id="@+id/cometchatConversation"
                android:layout_width="match_parent"     
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val cometChatConversations: CometChatConversations = findViewById(R.id.cometchatConversations);

    cometChatConversationList.setConversationList(conversations);
    // list: fetched using the ConversationsRequestBuilder
    ```
  </Tab>
</Tabs>

In `onSuccess` of the `fetchNext` method of `ConversationsRequestBuilder`, you can set the data. You can refer how to [Retrieve Conversations](/sdk/android/2.0/retrieve-conversations)

<Note>
  Note About Using setItemClickListener

  For getting the click event of `CometChatConversations` you can make use of the `ConversationItemClickListener` class.
</Note>

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatConversations.setItemClickListener(object : OnItemClickListener<Any>() {
      
                override fun OnItemClick(t: Any, position: Int) {
                    
                }
                override fun OnItemLongClick(t: Any, position: Int) {
                    super.OnItemLongClick(t, position)
                }
            })
    ```
  </Tab>
</Tabs>

#### **Common Usage**

The `CometChatConversations` component provides different properties to control the behavior of the `CometChatConversations` view. You can perform different operations like an update, remove, add, etc

| CometChatConversations field elements | Relevant attributes/methods                 |
| ------------------------------------- | ------------------------------------------- |
| Update List                           | `# setConversationList(List<Conversation>)` |
| Update                                | `# update (Conversation)`                   |
| Remove                                | `# remove(Conversation)`                    |
| Add                                   | `# add(Conversation)`                       |

***

### **CometChatCalls**

`CometChatCalls` is custom **RecyclerView** which will help you to display list of calls.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/3QMNZCcb2owfiSq_/images/131d1c30-calls-8e95c2b094678f21eff081b269904ddf.jpg?fit=max&auto=format&n=3QMNZCcb2owfiSq_&q=85&s=f35bebc2b47be4c7bd9d327a04c619fc" width="1080" height="2340" data-path="images/131d1c30-calls-8e95c2b094678f21eff081b269904ddf.jpg" />
</Frame>

You can use the `CometChatCalls` in the following manner.

In your `layout.xml` add the following code :

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <com.cometchat.pro.uikit.CometChatCalls
            android:id="@+id/cometchatCalls"
            android:layout_width="match_parent"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            android:layout_height="match_parent" />
    ```
  </Tab>
</Tabs>

In your corresponding activity or fragment

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    val cometChatCalls: CometChatCalls = findViewById(R.id.cometchatCalls);
    ```
  </Tab>
</Tabs>

In `onSuccess` of the `fetchNext` method of `MessagesRequestBuilder` you can set the data. You need to add `setCategory(CometChatConstants.CATEGORY_CALL)` in your `MessagesRequestBuilder` to fetch only call messages

You can refer an **example here.**

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    if (messagesRequest == null)
    {
    messagesRequest = MessagesRequestBuilder().setCategory(CometChatConstants.CATEGORY_CALL).setLimit(30).build() 
     }
    messagesRequest.fetchPrevious(object : CallbackListener<List<BaseMessage>>() {
         override fun onSuccess(baseMessages: List<BaseMessage>) {
         			/*Since the call list received like messages i.e top with older and 
               bottom with the latest message. We will reverse the list */
               Collections.reverse(baseMessages)
                        cometCallList.setCallList(baseMessages)
          }

          override fun onError(e: CometChatException) {
               //Error Message 
               Log.e("onError: ", e.message)
           }
    })
    ```
  </Tab>
</Tabs>

<Note>
  Note About Using CallItemClickListener:

  For getting the click event of `CometChatCalls` you can make use of `ItemClickListener` class.
</Note>

There are two events given by `CometChatCalls`.

This event is performed when clicking on the User or Group item displayed in the call list.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatCalls.setItemClickListener(object : OnItemClickListener<Call?>() {
                override fun OnItemClick(t: Any, position: Int) {
                		 // perform your action here
                }
            })
    ```
  </Tab>
</Tabs>

This event is performed when click on call icon visible after each Group or User item in call list.

<Tabs>
  <Tab title="Kotlin">
    ```kotlin theme={null}
    cometChatCalls.setItemCallClickListener(object : OnItemClickListener<Call>() {
                override fun OnItemClick(t: Any, position: Int) {
                   // perform your action here
                }
            })
    ```
  </Tab>
</Tabs>

#### **Common Usage:**

The `CometChatCalls` component provides different properties to control the behavior of the `CometChatCalls` view. You can perform different operations like an update, remove.

| CometChatCalls field e | Relevant attributes/methods |
| ---------------------- | --------------------------- |
| Update List            | setCallList(List)           |
| Update                 | update (Call)               |
| Remove                 | remove(Call)                |
