Imported from cometchat/cometchat-skills (
skills/cometchat-android-v6-extensions/SKILL.md). Install upstream withnpx skills add cometchat/cometchat-skills --skill cometchat-android-v6-extensions. Copyright stays with the author (MIT).
Ground truth:
com.cometchat:chatuikit-{compose,kotlin}-android:6.x(+calls-sdk-android:5.x) — resolved AAR (javap) +ui-kit/android/v6. Official docs: https://www.cometchat.com/docs/fundamentals/extensions-overview · Docs MCP:claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp(or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
Companion skills: cometchat-android-v6-features (feature catalog), cometchat-android-v6-kotlin-customization, cometchat-android-v6-compose-customization
Purpose
Extend the CometChat UIKit v6 data layer using the clean architecture DataSource/Repository pattern. Create custom DataSource implementations, override repository behavior, and register custom message types.
Use this skill when
- Creating a custom DataSource implementation to change how data is fetched
- Overriding default repository behavior
- Registering custom message types
- Understanding the data flow from DataSource → Repository → ViewModel
Do not use this skill when
- Customizing UI/bubble rendering (use
cometchat-*-customization— that's the BubbleFactory layer) - Working with component APIs (use
cometchat-*-components)
1. Clean Architecture Overview
The chatuikit-core module follows clean architecture with three layers:
┌─────────────────────────────────────────┐
│ UI Layer (chatuikit-kotlin / compose) │
│ Components observe ViewModel state │
├─────────────────────────────────────────┤
│ ViewModel Layer (core/viewmodel/) │
│ Calls use cases / repositories │
├─────────────────────────────────────────┤
│ Domain Layer (core/domain/) │
│ Repository interfaces, Use cases │
├─────────────────────────────────────────┤
│ Data Layer (core/data/) │
│ DataSource interfaces + impls │
│ Repository implementations │
└─────────────────────────────────────────┘
2. DataSource Pattern
Each feature area has a DataSource interface and default implementation:
core/data/datasource/
├── ConversationListDataSource.kt (interface)
├── ConversationListDataSourceImpl.kt (default implementation)
├── MessageListDataSource.kt
├── MessageListDataSourceImpl.kt
├── ...
2.1 All DataSource Types
| DataSource | Implementation | What it provides |
|---|---|---|
CallButtonsDataSource |
CallButtonsDataSourceImpl |
Call button actions |
CallLogsDataSource |
CallLogsDataSourceImpl |
Call history fetching |
CollaborativeDataSource |
CollaborativeDataSourceImpl |
Document/whiteboard data |
ConversationListDataSource |
ConversationListDataSourceImpl |
Conversation list fetching |
GroupMembersDataSource |
GroupMembersDataSourceImpl |
Group member operations |
GroupsDataSource |
GroupsDataSourceImpl |
Group list fetching |
MessageComposerDataSource |
MessageComposerDataSourceImpl |
Composer actions/attachments |
MessageHeaderDataSource |
MessageHeaderDataSourceImpl |
Header data (name, status) |
MessageInformationDataSource |
MessageInformationDataSourceImpl |
Read receipts, delivery info |
MessageListDataSource |
MessageListDataSourceImpl |
Message fetching/pagination |
PollDataSource |
PollDataSourceImpl |
Poll creation/voting |
ReactionListDataSource |
ReactionListDataSourceImpl |
Reaction data |
SearchDataSource |
SearchDataSourceImpl |
Global search |
StickerDataSource |
StickerDataSourceImpl |
Sticker fetching |
UsersDataSource |
UsersDataSourceImpl |
User list fetching |
2.2 Additional DataSource
| File | Purpose |
|---|---|
MessageReceiptEventListener.kt |
Listens for receipt events at the data layer |
3. Repository Pattern
Repositories in core/data/repository/ implement domain interfaces from core/domain/repository/:
core/data/repository/
├── CallButtonsRepositoryImpl.kt
├── CallLogsRepositoryImpl.kt
├── ConversationListRepositoryImpl.kt
├── GroupMembersRepositoryImpl.kt
├── GroupsRepositoryImpl.kt
├── MessageComposerRepositoryImpl.kt
├── MessageHeaderRepositoryImpl.kt
├── MessageInformationRepositoryImpl.kt
├── MessageListRepositoryImpl.kt
├── PollRepositoryImpl.kt
├── ReactionListRepositoryImpl.kt
├── SearchRepositoryImpl.kt
├── StickerRepositoryImpl.kt
├── UsersRepositoryImpl.kt
Each repository wraps a DataSource and adds business logic, caching, or transformation.
4. ViewModel Layer
ViewModels in core/viewmodel/ consume repositories and expose UI state:
// Example: CometChatConversationsViewModel
// - Injected via CometChatConversationsViewModelFactory
// - Exposes StateFlow<ConversationListUIState>
// - Calls ConversationListRepositoryImpl internally
ViewModel factories in core/factory/ handle dependency injection:
| Factory | ViewModel |
|---|---|
CometChatConversationsViewModelFactory |
CometChatConversationsViewModel |
CometChatMessageListViewModelFactory |
CometChatMessageListViewModel |
CometChatGroupsViewModelFactory |
CometChatGroupsViewModel |
CometChatUsersViewModelFactory |
CometChatUsersViewModel |
CometChatCallLogsViewModelFactory |
CometChatCallLogsViewModel |
CometChatMessageComposerViewModelFactory |
CometChatMessageComposerViewModel |
CometChatMessageHeaderViewModelFactory |
CometChatMessageHeaderViewModel |
CometChatGroupMembersViewModelFactory |
CometChatGroupMembersViewModel |
CometChatMessageInformationViewModelFactory |
CometChatMessageInformationViewModel |
CometChatReactionListViewModelFactory |
CometChatReactionListViewModel |
CometChatSearchViewModelFactory |
CometChatSearchViewModel |
CometChatCallButtonsViewModelFactory |
CometChatCallButtonsViewModel |
CometChatCreatePollViewModelFactory |
CometChatCreatePollViewModel |
CometChatThreadHeaderViewModelFactory |
CometChatThreadHeaderViewModel |
CometChatStickerKeyboardViewModelFactory |
CometChatStickerKeyboardViewModel |
CometChatIncomingCallViewModelFactory |
CometChatIncomingCallViewModel |
CometChatOutgoingCallViewModelFactory |
CometChatOutgoingCallViewModel |
CometChatAIAssistantChatHistoryViewModelFactory |
CometChatAIAssistantChatHistoryViewModel |
5. UI State Classes
Each ViewModel exposes a sealed UI state from core/state/:
| State Class | Used By |
|---|---|
CallLogsUIState |
Call logs |
MessageListUIState |
Message list |
GroupsUIState |
Groups list |
UsersUIState |
Users list |
GroupMembersUIState |
Group members |
MessageComposerUIState |
Composer |
MessageHeaderUIState |
Header |
MessageInformationUIState |
Message info |
ReactionListUIState |
Reactions |
SearchUIState |
Search |
CallButtonsUIState |
Call buttons |
CreatePollUIState |
Poll creation |
ThreadHeaderUIState |
Thread header |
StickerKeyboardUIState |
Sticker keyboard |
IncomingCallUIState |
Incoming call |
OutgoingCallUIState |
Outgoing call |
ChatHistoryUIState |
AI chat history |
ConversationStarterUIState |
AI conversation starter |
ConversationSummaryUIState |
AI conversation summary |
SmartRepliesUIState |
AI smart replies |
DeleteState |
Delete operations |
UIState |
Base UI state |
6. Data Flow
User Action → Component → ViewModel → Repository → DataSource → CometChat SDK
↓
UI Update ← Component ← ViewModel ← StateFlow ← Repository ← SDK Response
Hard rules
- DataSources are the DATA layer — they fetch and mutate data. Do NOT confuse with BubbleFactory which is the UI rendering layer
- The v5
DataSourcedecorator /ChatConfiguratorpattern for bubble customization does NOT exist in v6 — use BubbleFactory instead (seecometchat-*-customization) - ViewModels are shared across both UI stacks (Kotlin Views and Compose) — they live in
chatuikit-core - Always use the provided ViewModel factories — do not instantiate ViewModels directly