Cometchat android v6 extensions
Skill cometchat/cometchat-skills/skills/cometchat-android-v6-extensions
CometChat Android UIKit v6 extension architecture — DataSource/Repository pattern, custom message types, and data-layer overridesFrom its SKILL.md
npx -y skills add cometchat/cometchat-skills --skill cometchat-android-v6-extensionsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
8.9 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
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
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.