> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Components

> UI Components — CometChat documentation.

**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.

## **1. 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-22654f5b-docs-rn-guide-message-privately/NN4EdpOU3viwWMb_/images/0ccb24e4-1623199980-c69ab56b465a04036369ca5425744356.png?fit=max&auto=format&n=NN4EdpOU3viwWMb_&q=85&s=ef6caabc355d717ba49c1f27c8e799a8" width="9625" height="5509" data-path="images/0ccb24e4-1623199980-c69ab56b465a04036369ca5425744356.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}
    android {
    		defaultConfig {
    			...

    			manifestPlaceholders = [file_provider: "YOUR_PACKAGE_NAME"] 
    			//add your application package.
    		}
    	}
    ```
  </Tab>
</Tabs>

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

## **2. 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-22654f5b-docs-rn-guide-message-privately/mkn0UqPQ5BXljCV1/images/96a383dc-25e9adb-group_30-f965f1409766359da23bb8a77f55db26.png?fit=max&auto=format&n=mkn0UqPQ5BXljCV1&q=85&s=c972848ba03708a0b7352ccb67f18ddd" width="488" height="792" data-path="images/96a383dc-25e9adb-group_30-f965f1409766359da23bb8a77f55db26.png" />
</Frame>

### **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.

<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>

## **3. 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-22654f5b-docs-rn-guide-message-privately/JSRiWiPGBHsJZFCg/images/9d886cea-2b9ad69-group_32-509daec9703bb45748b1856eb9384b67.png?fit=max&auto=format&n=JSRiWiPGBHsJZFCg&q=85&s=3799c0b790de1304c95174735fed0209" width="438" height="750" data-path="images/9d886cea-2b9ad69-group_32-509daec9703bb45748b1856eb9384b67.png" />
</Frame>

### **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.

<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>

## **4. 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-22654f5b-docs-rn-guide-message-privately/19qJLi95IaEk2j9s/images/fedd26eb-036940f-group_33-4d611a98845f18221c04b88f13bcd530.png?fit=max&auto=format&n=19qJLi95IaEk2j9s&q=85&s=f706fc63cac29c9d0b31d81dd0204265" width="418" height="758" data-path="images/fedd26eb-036940f-group_33-4d611a98845f18221c04b88f13bcd530.png" />
</Frame>

### **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.

<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>

## **5. 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="xml">
    ```xml theme={null}
    <FrameLayout
        android:id="@+id/chatFrame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/7a4hqm7gLVRmX34O/images/02ac29b1-f5e5c31-group_24-7d25f42b217faf0c488f279bb2aed507.png?fit=max&auto=format&n=7a4hqm7gLVRmX34O&q=85&s=b492be7c9b614d4a4b4aa75d903be7bc" width="1098" height="1902" data-path="images/02ac29b1-f5e5c31-group_24-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>

## **6 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="xml">
    ```xml theme={null}
    <fragment
        android:id="@+id/callListScreen"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.cometchat.pro.uikit
    .ui_components.calls.call_list.CometChatCallList"
    />
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/2JiXkJ8lq6PmPGlJ/images/73301a8d-8ec73a2-group_31-d7222819bbd06871770abb1d17e9fd1c.png?fit=max&auto=format&n=2JiXkJ8lq6PmPGlJ&q=85&s=f7ace9931a8593f3019027b0070a6957" width="434" height="768" data-path="images/73301a8d-8ec73a2-group_31-d7222819bbd06871770abb1d17e9fd1c.png" />
</Frame>

## **7. 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-22654f5b-docs-rn-guide-message-privately/PaxBG9I1yMoeQmt2/images/33436158-8472e7d-group_34-f74cd1e468b06b47eba606e11c6b9f45.png?fit=max&auto=format&n=PaxBG9I1yMoeQmt2&q=85&s=c22181cb93783ef64e7589793f393134" width="442" height="764" data-path="images/33436158-8472e7d-group_34-f74cd1e468b06b47eba606e11c6b9f45.png" />
</Frame>

## **8. 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.

### **8.1. 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-22654f5b-docs-rn-guide-message-privately/mq8rEbFfi0JjKmkM/images/6adb61d7-1623199993-d6a87eedb04fc11e26b4e97693ca9c5f.gif?s=1f2e3b014e4a6261de3c3931798fcf28" width="600" height="1067" data-path="images/6adb61d7-1623199993-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="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/mq8rEbFfi0JjKmkM/images/6adb61d7-1623199993-d6a87eedb04fc11e26b4e97693ca9c5f.gif?s=1f2e3b014e4a6261de3c3931798fcf28" width="600" height="1067" data-path="images/6adb61d7-1623199993-d6a87eedb04fc11e26b4e97693ca9c5f.gif" />
</Frame>

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

<Frame>
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATYAAAA3CAIAAAAJ9fHvAAAKrGlDQ1BpY2MAAHjalZZnUJPpFsfP+77phZYQipTQmyBFuvQaem82QkIJhBhCAogNlUUF14KKCCgLsiii4FoAWQsiim1R7H1BFhXluliwoXI/cAm7d+7MnT0zz7y/+c95/uec5/1yAGiPuGKxEFUCyBZJJVEB3uyExCQ2cQjwQAQ62IErl5cr9oqICAEAmP7+PT7cAQQA4KYlVywWwj8LZX5qLg8AiQCAFH4uLxsAOQaAdPPEEikAVgAABvlSsRQAqwEApiQhMQkAOwwAzPQp7gEAZsoU3wMApiQmygcAGwUg0bhcSToA9RMAsPN46VIAmjoAWIv4AhEALRAA3HkZXD4AbT0AzM7OXsIHoB0DANOUv/ik/80zRe7J5abLeWoWAAAg+QpyxULu0n/4HP8/soWy6RoGAEDLkARGAYACAHIsa0mwnEUpYeHTLOADTHOGLDB2mnm5PknTzOf6BsvvCsNCpjlN4M+R+0g5MdMsWRIl90/N9YueZq5kppYsK9ZLXjeVI/cszIiJn+Y8QVzYNOdmRQfP5PjIdYksSt5zmsRfPmN27l/mEnDk+TzuTD/SjJjAmT4T5D3wU3395LooVp4vlnrL/cXCCHl+qjBArufmRcvvSiUxM/nSCPn7ZHKDIqYZoiEUvMEWrMEOrAGkqQVSAACfJeKlEkF6hpTtJRYLU9kcEc9qNtvW2sYZICExiT31m9+xAAEAhHV5RsvHAObVAiAnZ7T5DQAttQBq/BnN0AqA2Q3QSefJJHlTGg4AAA8UUAQmaIAOGIApWIItOIAreIIfBEE4xEAiLAIeZEA2SCAflsNqKIEy2AI7oApqYS/sh0NwBNrhJJyFC3AFrsNteAgDMAyvYAw+wASCIESEjjAQDUQXMUIsEFvECXFH/JAQJApJRJKRdESEyJDlyFqkDClHqpA6pAn5BTmBnEUuIf3IfWQQGUHeIl9QDKWhTFQbNUbnoE6oFxqMxqAL0XQ0By1Ei9FNaCVajx5E29Cz6BX0NjqAvkLHMcCoGAvTwywxJ8wHC8eSsDRMgq3ESrEKrB5rwTqxXuwmNoCNYp9xBBwDx8ZZ4lxxgbhYHA+Xg1uJ24irwu3HteF6cDdxg7gx3Hc8Ha+Ft8C74Dn4BHw6Ph9fgq/AN+KP48/jb+OH8R8IBAKLYEJwJAQSEgmZhGWEjYTdhFZCF6GfMEQYJxKJGkQLohsxnMglSoklxF3Eg8QzxBvEYeInEpWkS7Il+ZOSSCLSGlIF6QDpNOkG6TlpgqxENiK7kMPJfPJS8mZyA7mTfI08TJ6gKFNMKG6UGEomZTWlktJCOU95RHlHpVL1qc7USKqAWkStpB6mXqQOUj/TVGjmNB/aApqMtom2j9ZFu097R6fTjeme9CS6lL6J3kQ/R39C/6TAULBS4CjwFVYpVCu0KdxQeK1IVjRS9FJcpFioWKF4VPGa4qgSWclYyUeJq7RSqVrphNJdpXFlhrKNcrhytvJG5QPKl5RfqBBVjFX8VPgqxSp7Vc6pDDEwhgHDh8FjrGU0MM4zhpkEpgmTw8xkljEPMfuYY6oqqnNV41QLVKtVT6kOsDCWMYvDErI2s46w7rC+qGmreamlqm1Qa1G7ofZRfZa6p3qqeql6q/pt9S8abA0/jSyNrRrtGo81cZrmmpGa+Zp7NM9rjs5iznKdxZtVOuvIrAdaqJa5VpTWMq29Wle1xrV1tAO0xdq7tM9pj+qwdDx1MnW265zWGdFl6LrrCnS3657RfclWZXuxhexKdg97TE9LL1BPplen16c3oW+iH6u/Rr9V/7EBxcDJIM1gu0G3wZihrmGo4XLDZsMHRmQjJ6MMo51GvUYfjU2M443XGbcbvzBRN+GYFJo0mzwypZt6mOaY1pveMiOYOZllme02u26OmtubZ5hXm1+zQC0cLAQWuy36Z+NnO88Wza6ffdeSZullmWfZbDloxbIKsVpj1W71eo7hnKQ5W+f0zvlubW8ttG6wfmijYhNks8am0+atrbktz7ba9pYd3c7fbpVdh92buRZzU+fumXvPnmEfar/Ovtv+m4Ojg8ShxWHE0dAx2bHG8a4T0ynCaaPTRWe8s7fzKueTzp9dHFykLkdc/nS1dM1yPeD6Yp7JvNR5DfOG3PTduG51bgPubPdk95/cBzz0PLge9R5PPQ08+Z6Nns+9zLwyvQ56vfa29pZ4H/f+6OPis8KnyxfzDfAt9e3zU/GL9avye+Kv75/u3+w/FmAfsCygKxAfGBy4NfAuR5vD4zRxxoIcg1YE9QTTgqODq4KfhpiHSEI6Q9HQoNBtoY/CjMJEYe3hEM4J3xb+OMIkIifi10hCZERkdeSzKJuo5VG90YzoxdEHoj/EeMdsjnkYaxori+2OU4xbENcU9zHeN748fiBhTsKKhCuJmomCxI4kYlJcUmPS+Hy/+TvmDy+wX1Cy4M5Ck4UFCy8t0lwkXHRqseJi7uKjyfjk+OQDyV+54dx67ngKJ6UmZYznw9vJe8X35G/nj6S6pZanPk9zSytPe5Hulr4tfSTDI6MiY1TgI6gSvMkMzKzN/JgVnrUva1IYL2zNJmUnZ58QqYiyRD1LdJYULOkXW4hLxAM5Ljk7csYkwZLGXCR3YW6HlCkVS6/KTGU/yAbz3POq8z7lx+UfLVAuEBVcXWq+dMPS54X+hT8vwy3jLeterrd89fLBFV4r6lYiK1NWdq8yWFW8argooGj/asrqrNW/rbFeU77m/dr4tZ3F2sVFxUM/BPzQXKJQIim5u851Xe163HrB+r4Ndht2bfheyi+9XGZdVlH2dSNv4+UfbX6s/HFyU9qmvs0Om/dsIWwRbbmz1WPr/nLl8sLyoW2h29q2s7eXbn+/Y/GOSxVzK2p3UnbKdg5UhlR27DLctWXX16qMqtvV3tWtNVo1G2o+7ubvvrHHc09LrXZtWe2XnwQ/3asLqGurN66v2EvYm7f3WUNcQ+/PTj83NWo2ljV+2yfaN7A/an9Pk2NT0wGtA5ub0WZZ88jBBQevH/I91NFi2VLXymotOwyHZYdf/pL8y50jwUe6jzodbTlmdKzmOON4aRvStrRtrD2jfaAjsaP/RNCJ7k7XzuO/Wv2676TeyepTqqc2n6acLj49eabwzHiXuGv0bPrZoe7F3Q/PJZy71RPZ03c++PzFC/4XzvV69Z656Hbx5CWXSycuO11uv+Jwpe2q/dXjv9n/drzPoa/tmuO1juvO1zv75/WfvuFx4+xN35sXbnFuXbkddrv/Tuyde3cX3B24x7/34r7w/psHeQ8mHhY9wj8qfaz0uOKJ1pP6381+bx1wGDg16Dt49Wn004dDvKFXf+T+8XW4+Bn9WcVz3edNL2xfnBzxH7n+cv7L4VfiVxOjJf9S/lfNa9PXx/70/PPqWMLY8BvJm8m3G99pvNv3fu777vGI8Scfsj9MfCz9pPFp/2enz71f4r88n8j/Svxa+c3sW+f34O+PJrMnJ8VcCRcAADAAQNPSAN7uA6AnAjCuA1DmT+3JAACATO32AFM7yP/mqV0aAAAcABqLAGK7AIKLAKoBwAgAGJ4AEQAQ4wmonZ38/Cdy0+xsp7xoEgD8p8nJd9oAxE6Ab5LJyYndk5PfGgCw+wBdOVP7OQBAiCUAwS3MzzHh0pEHr/97T/433KMHVUH+WE4AAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAXEQAAFxEByibzPwAAAAZiS0dEAP8A/wD/oL2nkwAAFrtJREFUeNrtnXl0FNWex/PPjP/M8TjnuYw+xxl9LviAh4CISDqdBZ6OuK+4jYgjuM94DrigPECB7Onu6k6EAAmbhCWETSBAIOxJgAQwIiGsJmTvvbu69qr53rqhzcISeMrg5P5OnT63q2/dqk7qU9/vr+re2zEGCxYsruGIYX8CFiwYoixYsLjaiOqGoRqGphu6bki6oeiGqhsyWXTV0DVDVwxd1gxFJXVINXMTFixYXC1EFUORDA1QSgYvGqJoaBJZI8u6ImsqFklTZF1WCajgVgbP7M/NgsVVQpRoqKYpKgiEfgI/wTDEcxCqZlnQjYiuqYaC1aqptAxRFiyumooSRmVD58Gh3xBrA8L+puCOU56SWu+WWt/un0M/tIQaeb9giHp7bSCqsj83Cxa/AaIaSTfV9hdYVppSypIh/egTFx/yTN909r+W+Ubl88Nmhf+cHerrilhnSaPzwxOK3I7ShvUnA3USclHIrEJgRZqqmS2yYMHi10FUhadFwgljK0rIN42IpEbKGvmM7c2vzG++x8b/80zhzynSkHR1eKZuzSLLIxn6A2nKH1OkG2cIsdmB9wublld6G4KSSakkwyGzPzwLFr8WorCnMmEL6qeqhlYXCufsbhwx139zptA/Q4rntCSnkuhUE5x6PKdbyaLFO3W8TXIaSZz2SJbypzRxYEZk3BLvhuNBgdxgUmX9VzO9uhkXWalfpmLrTOFZ/N4QVVSdyB5Sz6qG0PgVbXc5IkNsYiInJGRLcU4+1uG3OMQ4hx7n0MzX6KLGOoNWjk9yGBab3scmDcz2cbvb2sQASU213xCGjnwy5Fj8f0ZUJ48+kYIKmqHsrvc+m++5KzUS7xQTOMXiEGK5iMUpxbnUOK4LnHTRLC45jlPibJBWNdEVGs7Jt6UF/7bZfVaEiiqKDlm+vOel4K2pqamqqqqioqK8vLyysrK+vl4UxV/I1Nv59Hg8a9asOX36NMmmNa3jV+oIbReGUVOWZVVVL1LnIkreRbq7iHmXdrq/pX+Ji19f2EWHIdoVUZ34W6ms3v1UflOfdHkEZ1jPD+TFF2yiwgAnOfSYNOmrzb7WiF83ZJFAqvYQTrxKkpSXlxcTEzNmzJiPPvrorbfeQtlmswUCgS71T548OXbs2AMHDvTQ0FKMI5FIQUHBTz/9dEGKrsgVX7yRnjsCZsgZot3PD/AjHGyTnl3k65vGJ7n0y4ezE6hIVgmlqX77zrawCv8sk2enPT5TIXHffvvtO++8c+LECehkQ0NDYWEhKF27dq2iKKFQCBUiZkBaa2trvV4v1vh8Pl1rP6EBOd5CJ+lbVMDb6F5qamrQ2qxZs7B5tE44FPZ5fReCDa9ohOd5lHGlUBUVR+L3+7E5DoOuR6BBt9sdFXzSbDgcDAbppQGVcRj4FK3hW+At1nesT/eFlfjW2IpRyhClZwB5aRUjX21o/cNMaSRndMs2r2SJdwJU+Z6cwIYaIqQ99LlRRHNyciZOmNhRNqdNm/bee+/h3F24cOGSJUvS0tJWr1595swZp9MJowtJTElJaW1tNYi3VjZt2jR79myQA4qKioogxR9++GFxcTFwAvavv/46EL377rvnzZsHElB///79U6dMRZ3vv/++ra2tk8EwDDSyceNGNIKdomW73Y79NjY24u2KFSvwiq1w5GjZ5XJB1SH4uApQ+Ldu3Yr69IsAy9TU1D179oBbfAtcd5YtWwaPgEOlXh3R3NwMhcfladrUabt37xYEgVHaaxHFv13RSNKGV6Pop+At6c2JWYoVfNrVX2Dj9Din+crpPUaXVLPYlYTsSP9Mccx3/tPeCOmnpJvdfXXtInlpFFGc61988UVUXgDS+++/P3XqVGjOk08+CcAmT56MZBVpKsoADEobGxsLmUVlkGmxWLKysqB7X3755bBhwwDnypUrb7rppuXLlgNyVMNW+Ki6uhp6CxLwds6cOevXr0eB4zhKVxQMgIT1+fn5yHuHDBmC8sGDBwFkjBnTp0//4Ycf0NRjjz32ySeflJaWzpgxA+sPHz6MbaljB3goQ0JRXrBgAY7htddeQxlXouKNxUOHDn355ZeBMb74pEmTUN6xYwc4R4Xt27ez07fXIgpaIgrxn8rpYPDdVf6+6XISoVHrcFtIszhkCyfGcTIWq0O22uU4skjiOS8JKrYdwekxKeFVlV5VhxpIGu2Cf+FOglFE586d+9RTT0FnNpgxZcoUCgZYffTRR7/++msIEWoePXoU6/fu3YsywBg9ejRcIvRtwIAB4BZ1SraUQPGoe/z0009HPT4KZUgTtgJvKLe2tCLjhdBRLwqRfOKJJ6im0YOpq6t74YUX4IppBahinz59gB/qoBEcIUwv1kPDrVZrS0sL9dWvvvpqcnIyysuXL+/Xrx+Vd6jx4MGDly5dClaBaGZmJi4QWF9eXn7DDTcAS1RAmxBV+tfAEe7cubPTbTAWvQxRUScda431P7lvzHAnweI6tc63bYGZaHEIVocSx6mxnGrh1Di7Eu+QrJdGVI+z6QmcMThNfHN564mAYHICxZa1SyGKExc+kGrUddddh9dx48ZVVFRQIQIJMKi0/pEjR/Dprl27UIbbHDlyJGBA4eOPP6bJJ1wrfOM333wzc+bMhx9+GDRiFxAxbLW0YCkqQIfvvffeiRMnZmdnQ7php0EgdDV6MOAHlaP3lnBR6Nu3Ly4WFFF6VBBAmGTodlR4cVl5YtQTOJh169bdcsstFFEcEnDF8aAAL1C4opBWxubjx4+HbPJhHho+aNAg0Lt582YcPPhkLrcXG13yIFRrFZSpm3x3JUcSXUYcecoinlNIjSyA1qkMyhL6pwcfzPQ+mOn7S1a4nw3Sqls7OVutsw2mZcXCRRIcyj9kBTbW+kk+quqqLqsX7scbVVGoFpztyZMncXLDJUJeaAXQlZSUhE+7IwrxxCYAAKe7w+HAGrhi+OHnn38ewBw6dAgJHjwkVTlsBfuK8r59+++44w4khKAUYMOpgtWOKgqJRuXjx4/TPcLT3n///VFE6a7R4AcffACrHFU82F3YVxwSzPOdd95JEYUFgLxTRJ9++mkUojYem8+YPgNZMRR+z+49AL5///7Ifmtra8mRaIzSXnm7SNNkKNaR5vCIub7hNvKwhEDlEPDajhmnw6zG5oQmbPJm7vfbyt22fb6Z5fy7q/2D7N5Yh2rlNAhsPKckEKVVu+BqcUmxTn+8U+ozU0rZ0uARwzjrZU2ifSQueUf3888/j94pjX4EGJDy5ebmdkcUeEAGBw4cOGrUKCpuwBKf7tmzh1ZG0vjcc8+RRjwEUWSnKIMBqNbq1auR90K94Y3JDdsOuWhNTQ2yXPhb2gjavO+++6KI0saB1meffTZ27FiaPEciEewLwKOAvaBad6MLG48CbRNpLdz7ihUrgDTEE9Wwa/jzV155Bf4ZjbA7Rr0RUfNZqKAbgZJTwesyAokOMwt1dFxIL784mzxgTqSywVcb9BQcDxeelLfXhY95Q7P3uQe5Qo/Y+NjM4FCHcn9qaFgWklXRYhc7N6LGc9rQNPWFJZ6zfg95KqEqOrk06BdHFKYRygYZpOxFH11CRW+99VYqkojq6moAAMmib5Ei4u0bb7xBn1gAP7xNT0+vOVoDAFAGCfTJB8rIb5GI4iqQn59/2223gfP6+npIK0wmvQEbdd04GNQvKyvD7iDUN998Mwr0dhESSLrrkpKS66+/Pi8v79SpUxRLSDfWFxcXowy7i4PJyMhAGeKJCw2sO2x56bZSOAXgjTbBZ1NTE44EthxlXGUSEhLmz59P81WGaG9EFKefYEQWHwxen+xPdBrdnarVqVps0gNzxH2t8rrq5j+kup/OUZK41oK9Z+qD4tuF4cF238PftiW5fGMWBEbNVh7JEsw7SVrHfoLxnB6bqQ3MCdU047wXJE3RL6WiEKU1a9bAzYZCoS4fAR6cwcg26UpIGawplI2+heCkpaVReaTtbNu2DZbymWeegY9FnolPwSTWFxUVQTxpd4hQMARz+/jjj7/44ovAe9WqVahA/0Z0pyAH3MJgw3lOmDABSlhVVQWK4E7pbVtUA/k45ldffRWNvPzSyzgGqqi4yqDxESNGIA3+6quvcLS4FnjcHiAKBz5p0qRnn332pZde2rlzJ20Hn7499m2oPdYnJydjL4zP3oqo+ZDcp8gZu/x3JYdJItoJrXYVtdiUh3LDu5vFpYciMd+EH7VHYjLkt/Iaj3kCk7eG3iryLj8eXlPdtKbe9z8bpX7pakKnZzOa2Y0BUqzfaZf2/RwGRIqm6j3oaQTljHYq6BL0iX+U2+79+LrURyoLhqmugj26LQrHjh2D4kVpBO2VlZXQt+5XDaguGkFlsApVjI+Pp3ePyK47Z4kwtAcOHEC1LlccuOWjR49q5MA1ehPrySefxGUCRwXa6SOZaGAljgSqCzfBzt3eiyg9tVoF8fNib9+USIJL69xFniJKVHTQnHBZi7SkMhQz2f9PqW0xMwMpm92nef7N1Z6pm9zNilp2WpiyvXX0wuDDNhPIzqhbyaLfmsVvPxnUDVHR1Yuo6K8bPREf1On+VKPLhrCv0EZgA0cNpwpF7dh/qKMt6WGA5H79+i1YsOCSB8z0s5cjqrYIoYnFgX4pkXin3P2pCYxunEN8YI6yv5H/sdmdu7txcXlzQZV3X1to86m2mNRG23blQBv/bkHwH7+WoLfWrvd1zUYIosa/ZIVKCaJIQxUyLrVHhPUIvJ52atUv2Df9koPajh8/npub++GHH8LZLl68OCp6V9ARl24CA4+kl97T6v5Nf2mW4dmbEVVNC+aWAlNLAvel8AkupftAM6uT3O95cLZ8+KzntL+58Kh/fY1vQ00gr4L/j7y2mMmB2Vv0sqbAc0sCw7IM84bwefvrala7castuPeMH3uU2qdB+v3EOU7gTuntq18FHtUMdmqyuLCKkkUKaAFXBX97WjjBeZ6uCDC6sVnS0Bxxb5O8tNofkxb5d06MyXDHJAcTHWrMdHlWCV/eHHqxQBiaTjrlnrcDg5UjfRj+zcUfOhswDFEg2dvv7NRko09Y/F+oKBm9LUpGoPAof11aOJE7H11OLdamDs0RKpvEVdVtMdPb/mqTEhxSIif+lZNiZkZm7fBVNgTfnC8OztDjuw9eI2tkK6cMT1eHzg3UunkgGtHF35mKns8Ps2BxNVRUILdtImV1/C1cMMFuyl03RIfboaLeQ83hdUcgnv6RHFYaFoeSlO2PyeCzd3gqmjxjFgYGpxtdEUVrLtXiCMVz4qBUafyKxqYQEFVFndcMkf1LWLC4BKI0HYI2nPRJo5d5HkoX47sNQ0MaGetQLNnBr7e6P1nnH5Alx5+bDMXKRQbZ5THLvJO2Nzw2NxCb1W0IOKdbnLKFQ5ar3Z4amV3uDqshQ1clYnR70C9cP49wRedbQIhmGBceSH3em0DnnQCBBYtrElEyz4Kk6jqvirl7vTEpwgiCaDe7iwzTJT/g4Ic4pA4PVPS4LM2apT5sEwfYgrHnn9NII30JXaLVoTyQ7d7XECEPRRVZpPOAXuk9GxqKouzcuXPfvn09SR1peDye847YZsHi2kVU1kWeDEbjK077h3wbsRKvKyF77NQV3ibGOgJWl3xuHOk5Sjk51uGP4wQrJ5/bROvch54gmugS/zVVmLqppU0UDF1WVFUmPwwjXTLrA4R4lWWZdn8zj7d9pWJGXV1dQ0ODpmmk78E54lA/+pBTEITotrTrz4YNG2h/V7oLVGD3VFlc00bXfGpP+uqGJMG+pQm55UgXH2sPdxmPRga+cFo3nTy3ntMuONSbU+KzhDvtoe2ngkbPJl6g+hYOh3ft2lVRUVFcXFxYWHjq1Cm6EsqJ9VjZ3Nx8+PDh48ePNzY2lpaW0p5DbW1ttA862IPALl26FFiCZDqpwrRp05KTk/fu3UvhLC8vLygoKCkpgbqy84PFtYsoodSkouqs/7HZLUNsamIO1E/p0s+226QK2nlnWuj4KRoZmS3FpAuZG5v9kbDRs0eJ0Y64Dodj1qxZBw4cWL16dWZmJlAEhyg4nU5g1traCgJ37Njhdrux5sSJE9hqz5498+bNA8lVVVXfffddTU3N1q1bZ8+ejW1RH4X58+f//PPPUFqQiQrV1dWrVq1auXIl7QnM3C+LaxRRemqqhl5Q0XpzejA+W+nQ00i7snmMLA5thFPvlyq9MN9X0+JHFqr2bOoAejBQwpycHEgfTTshd9BPn88HaI8dO0YN7bJly7Zt24by+vXr6XCToqIiaCNagMaCz6ampoMHD0I5jxw5YpgDviG/VGzT0tIgsyDzxx9/nD59Oh0LyhBlcY0iapyb2LWNF2aW+P+Y7o93RKxOc+oTzujBlEWaOb70XM8H5Kt2LclpDMlUhro8pbU+1VAVjf6uYU8RBY25ubkAjK4En2vXrm1pacnPz4cMGuZEezDAEEPDHI+2ZMkSCClIpv3XUWf58uVAFwo8Y8YM2uUdLWANMtXTp0/PnDFz8eLFENKFCxbiWtBxADcLFtcQor+AYU7+ZRhSPS98tsl9e6ovwSUn5KgWR+TcDPQXn6NIJNWQlDp1q11N4vSHMuRBOU0ra3wRsxeTqvf0F9OiKgpfGkUUKSUsK5LGuXPnUpwoonSYtdfrRRn0btiwQZIkfASxRVJKBZPjOIooPC1VUfje9PT0Q4cOgXnoLaiO8BF2irC41hElv78t84YRrA9H/rYleGN6cDj51Rbe6ghbOb3LUO9uNlhB5ml1aglOPdGu9U1RHskJfF/Typu9iMyBLapmXMZs0chFIW7Qxrq6urKyMvhSkImV4C2KKD6lHCJ27do1btw4uFbDHDKKnBMqeubMGcjshAkTqNGFhLpcLvApCAJMMrBHGbYZGSyd5YipKItrF1HDHPiiqYpOKBXheBeXuYc5m+7PCA93aAkOPYFr/7WlOK7zmG9zJT5NdJKpjIaky3dPb/7PguYd9ZKsi4bGq5oim7OA6pczjy5UdN68eTCu69aty8vLq6qqMsxRlDCu1MrKkoxENDoJPUhGIhq9Nwv2AOHChQtLtpSsXLkSeSlWnj3bsGjhotLSUuzC7XYjNV20aBE4R8bbPrKMEcri2kWU/KgLrC4ZhKKqxJpKqlJ51v/phpYH7cG+afKgLHW4XYu3q4kONZFTEp1yolNLBJwmqw859P6Zcr9Uz4j5Pu6A/1SQ14wIwDRnEpPJwxbF6GFvhY65KAjkeR7i2X5DS1XD4TAdgY01UEs6DTT9COWO86eQSa59fvherI+O7aQTw0enO4FDZjO+s/jdqCidhoEu9GEpUTNB2H0iMKXE9+z81mGO8P1Zwp1Zwl0Z4p/SpXvS5XvTxbvTwn/JDCXleN5a0Zq7v6XW6xPojApk3DZtkE52bxiXqaIwulQ8rwQhvUd76Xl9FiyuBUQ7ncFa+3wfKIR5hT/hl9ef5J37w5O3hv+7yDd+mXf8sraJa73JpYG8g4GK+pCblyQCZ8T8+Za/Q5LolEqSVFtbSwdnduxJe4lfHOv8FTpG9026/4QZCxa/J0Tbf/9HN5BQ0p8eVI2IbPgjWsCvhNwK36ZIPlURye8dklGglC54ZY2d9CxYXDVEddJtT5ZVCKRKCgaAJL/7YP6it2ouoqGTtBPVNZhbTTYYoixY/NaIdg6NJJYG+bEklcwmb977NVPM9uUXh0prsWDB4qoiyoIFC4YoCxYMURYsWDBEWbBgwRBlwYIhyoIFC4YoCxYsGKIsWDBEWbBg0bsQVRRFZsGiN8X/Ag9O44Pnw3kHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA2LTA5VDAwOjUzOjIzKzAwOjAwsr4NXgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNi0wOVQwMDo1MzoyMyswMDowMMPjteIAAAAodEVYdGljYzpjb3B5cmlnaHQAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMTlYSzXXAAAAF3RFWHRpY2M6ZGVzY3JpcHRpb24ARGlzcGxheRcblbgAAAAASUVORK5CYII=" />
</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                                                                                                                              |

### **8.2. 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-22654f5b-docs-rn-guide-message-privately/XgQ9DxAoWn0btB5m/images/5e07e218-1623200005-0e66a4dda4a98b937cb7451aac11c4d3.gif?s=d09a283586888a008e2ff12bc29ead65" width="600" height="1067" data-path="images/5e07e218-1623200005-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)` |

### **8.3. 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-22654f5b-docs-rn-guide-message-privately/mkn0UqPQ5BXljCV1/images/92f04ecc-1623200010-5a7da331416a5a5512ba74e54e38f31c.gif?s=6c93784856a6ee5acd612ef67634635c" width="600" height="1067" data-path="images/92f04ecc-1623200010-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)`                              |

### **8.4. 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-22654f5b-docs-rn-guide-message-privately/3EDM5JvI4mnAULac/images/7c311ff9-1623200016-203c3bd4399cfd1d8be34b95c061cd14.jpg?fit=max&auto=format&n=3EDM5JvI4mnAULac&q=85&s=6ca4402cce69af8c9b9ed91267d70121" width="1440" height="3120" data-path="images/7c311ff9-1623200016-203c3bd4399cfd1d8be34b95c061cd14.jpg" />
</Frame>

### **Note about `CometChatUsers` using with DataBinding:**

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

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

```kotlin theme={null}
val userList: ObservableArrayList<User> = ObservableArrayList<User>()
binding.setUserList(userList)
```

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 About `CometChatUsers` Without DataBinding**

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

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/retrieve-users)

### **Note About Using `setItemClickListener`**

For getting the click event of `CometChatUsers` you can make use of `setItemClickListener` class.

<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)`               |

### **8.5. CometChatGroups**

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

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/21UBnagXOw-XG0Sv/images/b2edd0e5-1623200018-8c598dd4200bdd050bb1b3b2effb2271.jpg?fit=max&auto=format&n=21UBnagXOw-XG0Sv&q=85&s=c68bac9aa11f53ff97a4ff230388207b" width="1440" height="3120" data-path="images/b2edd0e5-1623200018-8c598dd4200bdd050bb1b3b2effb2271.jpg" />
</Frame>

### **Note About `CometChatGroups` Using With DataBinding**

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

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

<Tabs>
  <Tab title="Java">
    ```java 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 About `CometChatGroups` Without DataBinding**

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

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/retrieve-groups).

### **Note About Using `setItemClickListener`**

For getting the click event of `CometChatGroups` you can make use of `setItemClickListener` class.

<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)`                |

### **8.6.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-22654f5b-docs-rn-guide-message-privately/xIG5VBdyNJ5cYSqE/images/d4894f31-1623200020-1e6edc0cd162671904900432ce5383e6.jpg?fit=max&auto=format&n=xIG5VBdyNJ5cYSqE&q=85&s=244cedfd0c95a1ca184ff374bb531bd2" width="1440" height="3120" data-path="images/d4894f31-1623200020-1e6edc0cd162671904900432ce5383e6.jpg" />
</Frame>

### **Note about `CometChatConversations` using with DataBinding**

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

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 About `CometChatConversations` Without DataBinding**

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

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/retrieve-conversations)

### **Note About Using `setItemClickListener`**

For getting the click event of `CometChatConversations` you can make use of the `ConversationItemClickListener` class.

<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)`                       |

### **8.7. CometChatCalls**

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

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-rn-guide-message-privately/ubfBSdV1t6rmjxeA/images/87cad251-1623200023-8e95c2b094678f21eff081b269904ddf.jpg?fit=max&auto=format&n=ubfBSdV1t6rmjxeA&q=85&s=a8e6df57e8ca16cfa71857e94556dda3" width="1080" height="2340" data-path="images/87cad251-1623200023-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 About Using `CallItemClickListener`:**

For getting the click event of `CometChatCalls` you can make use of `ItemClickListener` class.

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)                |
