Documentation Index
Fetch the complete documentation index at: https://cometchat-22654f5b-release-ios-chat-uikit-v5-1-2.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Enable users to block and unblock others directly within chat using CometChat’s Android UI Kit v5+, preventing unwanted communication and giving users more control.
Overview
Blocking a user stops them from sending messages to the blocker. The CometChat UIKit handles most behaviors internally:
- Composer Hidden: The message composer is hidden when chatting with a blocked user.
- Unblock Prompt: An “Unblock” button is displayed to reverse the block.
- Message Restrictions: Blocked users cannot send messages to the blocker.
Prerequisites
- Android Studio project with CometChat Android UI Kit v5 added to
build.gradle.
- CometChat App ID, Auth Key, and Region configured and initialized.
<uses-permission android:name="android.permission.INTERNET"/> in AndroidManifest.xml.
- Logged-in user via
CometChat.login().
- Existing one-on-one chat screen using
CometChatMessageList and CometChatMessageComposer.
Components
| Component / Class | Role |
|---|
UserDetailActivity.java | Displays user profile and provides block/unblock options. |
MessagesActivity.java | Hosts the chat screen and toggles UI based on block state. |
CometChatUIKit.blockUsers() | API to block one or more users by UID. |
CometChatUIKit.unblockUsers() | API to unblock one or more users by UID. |
User.isBlockedByMe() | Checks if the current user has blocked this user. |
unblockLayout (View) | Layout shown when a user is blocked, containing unblock. |
CometChatMessageComposer | Hidden when chatting with a blocked user. |
Integration Steps
1. Detect Block Status
Update UI when block state changes.
// In MessagesActivity.java
private void updateUserBlockStatus(User user) {
boolean blocked = user.isBlockedByMe();
binding.messageComposer.setVisibility(blocked ? View.GONE : View.VISIBLE);
binding.unblockLayout.setVisibility(blocked ? View.VISIBLE : View.GONE);
}
File reference:
MessagesActivity.java
Ensures the composer and unblock UI reflect the current block state.
2. Hide Composer & Show Unblock UI
Define layout elements and their visibility toggles.
<!-- In activity_messages.xml -->
<com.cometchat.ui_kits.CometChatMessageComposer
android:id="@+id/messageComposer"
... />
<View
android:id="@+id/unblockLayout"
android:visibility="gone"
...>
<Button
android:id="@+id/unblockBtn"
android:text="Unblock"
... />
</View>
File reference:
activity_messages.xml
Prepares the UI containers for dynamic show/hide operations.
3. Trigger Unblock Action
Call the unblock API and observe status updates.
// In MessagesActivity.java
binding.unblockBtn.setOnClickListener(v -> viewModel.unblockUser());
// In MessagesViewModel.java
public void unblockUser() {
CometChatUIKit.unblockUsers(Collections.singletonList(currentUser.getUid()), new CometChat.CallbackListener<List<String>>() {
@Override
public void onSuccess(List<String> uids) {
unblockButtonState.postValue(false);
}
@Override
public void onError(CometChatException e) {
// Handle error
}
});
}
File references:
Executes unblock logic and updates LiveData to refresh UI.
4. Trigger Block from Detail Screen
Allow blocking directly from a user’s profile.
// In UserDetailActivity.java
binding.blockMenuItem.setOnClickListener(v -> {
CometChatUIKit.blockUsers(Collections.singletonList(user.getUid()), new CometChat.CallbackListener<List<String>>() {
@Override
public void onSuccess(List<String> uids) {
viewModel.refreshUser();
}
@Override
public void onError(CometChatException e) {
// Handle error
}
});
});
File reference:
UserDetailActivity.java
Integrates block action into the profile menu, triggering the UI toggle via LiveData.
Implementation Flow
| Step | Action | Location |
|---|
| 1 | Check block status | updateUserBlockStatus() in MessagesActivity.java fileciteturn9file0 |
| 2 | Show/hide composer and unblock layout | activity_messages.xml fileciteturn9file0 |
| 3 | Unblock API call and LiveData update | MessagesViewModel.unblockUser() |
| 4 | Block API call from profile | UserDetailActivity.blockMenuItem |
Customization Options
- Feedback UI: Show a Toast or Snackbar upon success/failure.
- Menu Icons/Text: Toggle icon and text dynamically after block/unblock.
- Disable History: Optionally gray out or hide past messages when blocked.
Filtering & Edge Cases
| Case | Behavior |
|---|
| Blocked User | Composer hidden; unblock layout shown. |
| Block Self | SDK ignores request; ensure menu is disabled. |
| Group Chat | Blocking affects only 1:1 communication. |
| Network Failure | Observe error callbacks and retry as needed. |
Error Handling
- Handle errors from
blockUsers and unblockUsers callbacks by showing alerts or retry prompts.
- Ensure UI LiveData states revert on failure.
Group vs. User-Level Differences
| Scenario | UI Behavior |
|---|
ReceiverType.USER | Block/unblock enabled. |
ReceiverType.GROUP | Block option ignored; chat continues. |
Summary / Feature Matrix
| Feature | Component / Method |
|---|
| Check block state | User.isBlockedByMe() |
| Block user | CometChatUIKit.blockUsers() |
| Unblock user | CometChatUIKit.unblockUsers() |
| Update UI | updateUserBlockStatus() |
| Profile block menu | UserDetailActivity.blockMenuItem |
Next Steps & Further Reading
Android Sample App (Java)
Explore this feature in the CometChat SampleApp:
GitHub → SampleApp Android Sample App (Kotlin)
Explore this feature in the CometChat SampleApp:
GitHub → SampleApp