> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Message Privately

Allow users to initiate a private one-on-one chat from another user’s profile or list screen using CometChat’s Android UI Kit.

## Overview

The **Message Privately** feature streamlines direct messaging by enabling:

* Quick entry into a one-on-one conversation from a user context.
* Automatic conversation creation if none exists.
* Optional initial message send to surface the chat in lists.

Users tap **Message Privately** → launch `MessagesActivity` with the target user’s UID → chat UI loads.

## Prerequisites

* Android Studio project with **cometchat-pro/android-chat-sdk v4.0.0+** and **cometchat-pro/android-java-uikit v4.0.0+** in `build.gradle`.
* Valid CometChat **App ID**, **Auth Key**, and **Region** initialized.
* `<uses-permission android:name="android.permission.INTERNET"/>` in `AndroidManifest.xml`.
* Users created in your CometChat app.
* User must be logged in via `CometChatUIKit.login()` before invoking this feature.
* Existing `MessagesActivity` capable of handling one-on-one chats.

## Components

| Component / Class         | Responsibility                                                       |
| :------------------------ | :------------------------------------------------------------------- |
| `UserDetailsActivity`     | Shows user profile UI and **Message Privately** button.              |
| `MessagesActivity`        | Chat screen for one-on-one conversation with a `User`.               |
| `MainActivity`            | (Optional) entry point for sending initial message programmatically. |
| `CometChatUIKit.login()`  | Authenticates the current user session.                              |
| `CometChat.sendMessage()` | Sends a dummy text message to initialize conversation.               |

## Integration Steps

### 1. Launch One-on-One Chat from Profile

Navigate from `UserDetailsActivity` to `MessagesActivity` with the selected user.

```java theme={null}
// In UserDetailsActivity.java
binding.messagePrivatelyBtn.setOnClickListener(v -> {
  Intent intent = new Intent(this, MessagesActivity.class);
  intent.putExtra(getString(R.string.app_user), new Gson().toJson(user));
  startActivity(intent);
});
```

**File reference:**\
[`UserDetailsActivity.java`](https://github.com/cometchat/cometchat-uikit-android/blob/v5/sample-app-java/src/main/java/com/cometchat/sampleapp/java/ui/activity/UserDetailsActivity.java)

### 2. Handle Incoming Intent in Chat Screen

Deserialize the `User` JSON extra and configure the chat UI.

```java theme={null}
// In MessagesActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_messages);

  String userJson = getIntent().getStringExtra(getString(R.string.app_user));
  if (userJson != null) {
    User user = new Gson().fromJson(userJson, User.class);
    messageHeader.setUser(user);
    messageList.setUser(user);
    composer.setUser(user);
  }
}
```

**File reference:**\
[`MessagesActivity.java`](https://github.com/cometchat/cometchat-uikit-android/blob/v5/sample-app-java/src/main/java/com/cometchat/sampleapp/java/ui/activity/MessagesActivity.java)

### 3. (Optional) Programmatically Create Conversation

Send an initial greeting to ensure the chat appears in conversation lists.

```java theme={null}
// In MainActivity.java
txtMessage = new TextMessage(
  "cometchat-uid-2",
  "👋",
  CometChatConstants.RECEIVER_TYPE_USER
);
CometChat.sendMessage(txtMessage, new CometChat.CallbackListener<BaseMessage>() {
  @Override public void onSuccess(BaseMessage msg) {
    Log.d("SendMsg", "Initial message sent.");
  }
  @Override public void onError(CometChatException e) {
    Log.e("SendMsg", e.getMessage());
  }
});
```

**File reference:**\
[`MainActivity.java`](https://github.com/cometchat/cometchat-uikit-android/blob/v5/sample-app-java/src/main/java/com/cometchat/sampleapp/java/ui/activity/MainActivity.java)

## Implementation Flow

| Step | Action                                               | Location                               |
| :--- | :--------------------------------------------------- | :------------------------------------- |
| 1    | Tap **Message Privately** button                     | `UserDetailsActivity.java`             |
| 2    | Launch `MessagesActivity` with user JSON extra       | `UserDetailsActivity` onClick listener |
| 3    | Deserialize and bind `User` to UI Kit components     | `MessagesActivity.onCreate()`          |
| 4    | (Optional) Send initial message to surface chat list | `MainActivity.sendInitialMessage()`    |

## Customization Options

* **Button Text & Style:** Update `messagePrivatelyBtn` in `activity_user_details.xml`.
* **Intent Extras Key:** Use a custom key instead of `R.string.app_user`.
* **Dummy Message:** Customize initial message content or omit step if undesired.

## Edge Cases

| Condition                 | Behavior                                                      |
| :------------------------ | :------------------------------------------------------------ |
| User never chatted before | The conversation appears after the first message is sent.     |
| Target user blocked       | Composer hidden; consider showing unblock prompt.             |
| Invalid user data         | Guard against `null` JSON and show error UI or fallback.      |
| Missing JSON extra        | Do not initialize chat; optionally close screen with warning. |

## Summary / Feature Matrix

| Feature             | Component / Method                                 |
| :------------------ | :------------------------------------------------- |
| Launch private chat | Intent from `messagePrivatelyBtn`                  |
| Initialize chat UI  | `messageHeader.setUser()`, `messageList.setUser()` |
| Create conversation | `CometChat.sendMessage()` optional                 |

<CardGroup>
  <Card title="Android Sample App (Java)">
    Explore this feature in the CometChat SampleApp:
    [GitHub → SampleApp](https://github.com/cometchat/cometchat-uikit-android/tree/v5/sample-app-java)
  </Card>

  <Card title="Android Sample App (Kotlin)">
    Explore this feature in the CometChat SampleApp:
    [GitHub → SampleApp](https://github.com/cometchat/cometchat-uikit-android/tree/v5/sample-app-kotlin)
  </Card>
</CardGroup>
