@cometchat/skills 4.4.2 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/MIGRATING.md +187 -0
- package/README.md +52 -156
- package/RULES.md +125 -0
- package/bin/cometchat-skills.mjs +1280 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +156 -74
- package/peers.yaml +355 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +94 -0
- package/registry/android-v6.json +177 -0
- package/registry/angular-v5.json +154 -0
- package/registry/flutter-calls-v5.json +94 -0
- package/registry/flutter-v6.json +159 -0
- package/registry/ios-calls-v5.json +99 -0
- package/registry/ios-v5.json +152 -0
- package/registry/rn-calls-v5.json +99 -0
- package/registry/rn-v5.json +169 -0
- package/registry/sdk-android-v5.json +93 -0
- package/registry/sdk-jsv4.json +93 -0
- package/registry/web-calls-v5.json +94 -0
- package/registry/web-v7.json +154 -0
- package/skills/cometchat/SKILL.md +47 -2096
- package/skills/cometchat-a11y/SKILL.md +44 -472
- package/skills/cometchat-analytics/SKILL.md +61 -0
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +41 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-audit/SKILL.md +61 -0
- package/skills/cometchat-compliance/SKILL.md +63 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-i18n/SKILL.md +35 -404
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +182 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
- package/skills/cometchat-ios-core/references/docs-map.md +124 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +219 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-production/SKILL.md +67 -723
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-testing/SKILL.md +36 -355
- package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
- package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
- package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
- package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
- package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
- package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
- package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
- package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
- package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
- package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
- package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
- package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
- package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
- package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
- package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
- package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
- package/skills/cometchat-moderation/SKILL.md +58 -0
- package/skills/cometchat-onboarding/SKILL.md +92 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +105 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +335 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +79 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/layout.md +150 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-production/SKILL.md +84 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
- package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
- package/skills/cometchat-security/SKILL.md +80 -0
- package/skills/cometchat-self-host/SKILL.md +56 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +932 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,469 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-android-v5-customization
|
|
3
|
-
description: "Customize CometChat components beyond theming — custom message templates, DataSource decorators, event listeners, and custom view slots."
|
|
4
|
-
license: "MIT"
|
|
5
|
-
compatibility: "Android 7.0+; Java 8+; Kotlin 1.8+; com.cometchat:chat-uikit-android:5.x"
|
|
6
|
-
metadata:
|
|
7
|
-
author: "CometChat"
|
|
8
|
-
version: "3.0.0"
|
|
9
|
-
tags: "cometchat android customization custom-view message-template datasource events"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
> **Ground truth:** `com.cometchat:chat-uikit-android:5.x` (legacy/maintenance-only; +`calls-sdk-android:5.x`) — resolved AAR (javap) + `ui-kit/android`. **Official docs:** https://www.cometchat.com/docs/ui-kit/android/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.
|
|
13
|
-
|
|
14
|
-
> **Companion skills:** `cometchat-android-v5-components` provides the component
|
|
15
|
-
> catalog; `cometchat-android-v5-theming` covers visual styling;
|
|
16
|
-
> `cometchat-android-v5-extensions` covers the extension architecture.
|
|
17
|
-
|
|
18
|
-
## Purpose
|
|
19
|
-
|
|
20
|
-
This skill teaches how to customize CometChat components beyond what theming provides. It covers custom message templates, the DataSource/DataSourceDecorator pattern, ChatConfigurator, event listeners, and custom view slots.
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Use this skill when
|
|
25
|
-
|
|
26
|
-
- "Customize the message list"
|
|
27
|
-
- "Add a custom message bubble"
|
|
28
|
-
- "Listen to message events"
|
|
29
|
-
- "Add a custom action to message options"
|
|
30
|
-
- "Filter conversations"
|
|
31
|
-
|
|
32
|
-
## Do not use this skill when
|
|
33
|
-
|
|
34
|
-
- Changing colors/fonts → use `cometchat-android-v5-theming`
|
|
35
|
-
- Enabling a packaged feature → use `cometchat-android-v5-features`
|
|
36
|
-
- Setting up init/login → use `cometchat-android-v5-core`
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 1. CometChatMessageTemplate
|
|
41
|
-
|
|
42
|
-
Templates define how message bubbles are rendered. Each template maps a message `type` + `category` to custom views.
|
|
43
|
-
|
|
44
|
-
> **Prefer the decorator (§3) for anything app-wide.** The per-list `setTemplates(...)` shown here only affects the one `CometChatMessageList` you call it on. To register a custom type, override a built-in bubble, add an attachment, or add a long-press option **everywhere**, use the four `DataSourceDecorator` recipes in §3 — that is the pattern the kit's own extensions use.
|
|
45
|
-
|
|
46
|
-
**Java:**
|
|
47
|
-
```java
|
|
48
|
-
CometChatMessageTemplate template = new CometChatMessageTemplate()
|
|
49
|
-
.setType(CometChatConstants.MESSAGE_TYPE_TEXT)
|
|
50
|
-
.setCategory(CometChatConstants.CATEGORY_MESSAGE)
|
|
51
|
-
.setContentView(new MessagesViewHolderListener() {
|
|
52
|
-
@Override
|
|
53
|
-
public View createView(Context context, CometChatMessageBubble messageBubble,
|
|
54
|
-
UIKitConstants.MessageBubbleAlignment alignment) {
|
|
55
|
-
// Return your custom view
|
|
56
|
-
return LayoutInflater.from(context).inflate(R.layout.custom_text_bubble, null);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
@Override
|
|
60
|
-
public void bindView(Context context, View createdView, BaseMessage message,
|
|
61
|
-
UIKitConstants.MessageBubbleAlignment alignment,
|
|
62
|
-
RecyclerView.ViewHolder holder, List<BaseMessage> messageList,
|
|
63
|
-
int position) {
|
|
64
|
-
// Bind data to your custom view
|
|
65
|
-
TextView textView = createdView.findViewById(R.id.customText);
|
|
66
|
-
textView.setText(((TextMessage) message).getText());
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
.setOptions((context, baseMessage, group) -> {
|
|
70
|
-
// Return custom message options (long-press menu)
|
|
71
|
-
List<CometChatMessageOption> options = new ArrayList<>();
|
|
72
|
-
options.add(new CometChatMessageOption("custom_action", "Custom Action",
|
|
73
|
-
R.drawable.ic_custom, () -> { /* handle click */ }));
|
|
74
|
-
return options;
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// Apply to message list — APPEND to defaults, never replace.
|
|
78
|
-
// ❌ messageList.setTemplates(Collections.singletonList(template)); // wipes ALL default bubbles
|
|
79
|
-
List<CometChatMessageTemplate> templates =
|
|
80
|
-
CometChatUIKit.getDataSource().getMessageTemplates(new AdditionParameter());
|
|
81
|
-
templates.add(template); // keep text/image/video/file/… + add yours
|
|
82
|
-
messageList.setTemplates(templates);
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
> **The #1 custom-bubble mistake:** `setTemplates(singletonList(myTemplate))` replaces the entire template set, so every default bubble (text, image, video, audio, file, …) stops rendering. Always seed the list from `CometChatUIKit.getDataSource().getMessageTemplates(new AdditionParameter())` and `add()` your template — or register a `DataSourceDecorator` (§3) so the append applies app-wide.
|
|
86
|
-
|
|
87
|
-
**Kotlin:**
|
|
88
|
-
```kotlin
|
|
89
|
-
val template = CometChatMessageTemplate()
|
|
90
|
-
.setType(CometChatConstants.MESSAGE_TYPE_TEXT)
|
|
91
|
-
.setCategory(CometChatConstants.CATEGORY_MESSAGE)
|
|
92
|
-
.setContentView(object : MessagesViewHolderListener() {
|
|
93
|
-
override fun createView(context: Context, messageBubble: CometChatMessageBubble,
|
|
94
|
-
alignment: UIKitConstants.MessageBubbleAlignment): View {
|
|
95
|
-
return LayoutInflater.from(context).inflate(R.layout.custom_text_bubble, null)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
override fun bindView(context: Context, createdView: View, message: BaseMessage,
|
|
99
|
-
alignment: UIKitConstants.MessageBubbleAlignment,
|
|
100
|
-
holder: RecyclerView.ViewHolder, messageList: List<BaseMessage>,
|
|
101
|
-
position: Int) {
|
|
102
|
-
val textView = createdView.findViewById<TextView>(R.id.customText)
|
|
103
|
-
textView.text = (message as TextMessage).text
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
.setOptions { context, baseMessage, group ->
|
|
107
|
-
listOf(CometChatMessageOption("custom_action", "Custom Action",
|
|
108
|
-
R.drawable.ic_custom) { /* handle click */ })
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// APPEND to defaults — don't replace.
|
|
112
|
-
// ❌ messageList.setTemplates(listOf(template)) // wipes ALL default bubbles
|
|
113
|
-
val templates = CometChatUIKit.getDataSource().getMessageTemplates(AdditionParameter())
|
|
114
|
-
templates.add(template)
|
|
115
|
-
messageList.setTemplates(templates)
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Template view slots
|
|
119
|
-
|
|
120
|
-
| Slot | Method | Description |
|
|
121
|
-
|---|---|---|
|
|
122
|
-
| `bubbleView` | `setBubbleView(MessagesViewHolderListener)` | Entire message bubble |
|
|
123
|
-
| `headerView` | `setHeaderView(MessagesViewHolderListener)` | Above the bubble |
|
|
124
|
-
| `contentView` | `setContentView(MessagesViewHolderListener)` | Inside the bubble |
|
|
125
|
-
| `bottomView` | `setBottomView(MessagesViewHolderListener)` | Below the content, inside bubble |
|
|
126
|
-
| `footerView` | `setFooterView(MessagesViewHolderListener)` | Below the bubble |
|
|
127
|
-
| `statusInfoView` | `setStatusInfoView(MessagesViewHolderListener)` | Status info area |
|
|
128
|
-
| `replyView` | `setReplyView(MessagesViewHolderListener)` | Reply preview above bubble |
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## 2. CometChatMessageOption
|
|
133
|
-
|
|
134
|
-
Custom actions in the message long-press menu. `CometChatMessageOption extends CometChatOption`. Verified constructor (`CometChatMessageOption.java:43`):
|
|
135
|
-
|
|
136
|
-
```java
|
|
137
|
-
public CometChatMessageOption(@NotNull String id, @NotNull String title, @ColorInt int icon, OnClick onClick)
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**Java:**
|
|
141
|
-
```java
|
|
142
|
-
CometChatMessageOption option = new CometChatMessageOption(
|
|
143
|
-
"bookmark", // unique ID
|
|
144
|
-
"Bookmark", // title
|
|
145
|
-
R.drawable.ic_bookmark, // icon — see note below
|
|
146
|
-
() -> { // onClick (com.cometchat.chatuikit.shared.interfaces.OnClick)
|
|
147
|
-
// Handle bookmark action
|
|
148
|
-
}
|
|
149
|
-
);
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
> **Icon-param quirk:** the 4-arg constructor's third param is annotated `@ColorInt int icon`, but the kit's own decorators pass a **drawable** resource here (e.g. `MessageTranslationDecorator.java:53` passes `R.drawable.cometchat_ic_translate`). Pass your `R.drawable.*` id — the annotation is misleading, the runtime treats it as a drawable. The 7-arg constructor (`CometChatMessageOption.java:58`) adds `titleColor`, `iconTintColor`, `titleAppearance` if you need styling.
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 3. DataSource and DataSourceDecorator
|
|
157
|
-
|
|
158
|
-
The `DataSource` interface defines how messages are rendered and what options are available. `DataSourceDecorator` wraps an existing DataSource to add or modify behavior without replacing it.
|
|
159
|
-
|
|
160
|
-
**Java:**
|
|
161
|
-
```java
|
|
162
|
-
public class CustomDataSource extends DataSourceDecorator {
|
|
163
|
-
public CustomDataSource(DataSource dataSource) {
|
|
164
|
-
super(dataSource);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
@Override
|
|
168
|
-
public List<CometChatMessageOption> getTextMessageOptions(Context context,
|
|
169
|
-
BaseMessage baseMessage, Group group, AdditionParameter additionParameter) {
|
|
170
|
-
List<CometChatMessageOption> options = super.getTextMessageOptions(context,
|
|
171
|
-
baseMessage, group, additionParameter);
|
|
172
|
-
// Add custom option
|
|
173
|
-
options.add(new CometChatMessageOption("translate", "Translate",
|
|
174
|
-
R.drawable.ic_translate, () -> { /* translate */ }));
|
|
175
|
-
return options;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Kotlin:**
|
|
181
|
-
```kotlin
|
|
182
|
-
class CustomDataSource(dataSource: DataSource) : DataSourceDecorator(dataSource) {
|
|
183
|
-
override fun getTextMessageOptions(context: Context, baseMessage: BaseMessage,
|
|
184
|
-
group: Group?, additionParameter: AdditionParameter): List<CometChatMessageOption> {
|
|
185
|
-
val options = super.getTextMessageOptions(context, baseMessage, group, additionParameter).toMutableList()
|
|
186
|
-
options.add(CometChatMessageOption("translate", "Translate",
|
|
187
|
-
R.drawable.ic_translate) { /* translate */ })
|
|
188
|
-
return options
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Register via ChatConfigurator
|
|
194
|
-
|
|
195
|
-
**Java:**
|
|
196
|
-
```java
|
|
197
|
-
ChatConfigurator.enable(dataSource -> new CustomDataSource(dataSource));
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
**Kotlin:**
|
|
201
|
-
```kotlin
|
|
202
|
-
ChatConfigurator.enable { dataSource -> CustomDataSource(dataSource) }
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### The four customization scenarios (all via the decorator)
|
|
206
|
-
|
|
207
|
-
The canonical Android V5 extension surface is the `DataSource` chain. The four most common requests each map to **one overridden method** on your `DataSourceDecorator`. Every override **must call `super.*` first** and append — returning a fresh list/template wipes the kit's defaults. These are the exact methods + signatures the kit's own extensions use; cited file:line for each.
|
|
208
|
-
|
|
209
|
-
#### Scenario 1 — Register a custom message type (new bubble)
|
|
210
|
-
|
|
211
|
-
Override `getMessageTemplates(...)` and append a `CometChatMessageTemplate` whose `setCategory(...)` is `UIKitConstants.MessageCategory.CUSTOM` and whose `setType(...)` is your custom type string. Render its bubble with `setContentView(MessagesViewHolderListener)`. This mirrors `PollsExtensionDecorator.getMessageTemplates` (`PollsExtensionDecorator.java:82-86`) + `getPollTemplate` (`PollsExtensionDecorator.java:220-309`).
|
|
212
|
-
|
|
213
|
-
**Java:**
|
|
214
|
-
```java
|
|
215
|
-
@Override
|
|
216
|
-
public List<CometChatMessageTemplate> getMessageTemplates(@NonNull AdditionParameter additionParameter) {
|
|
217
|
-
List<CometChatMessageTemplate> templates = super.getMessageTemplates(additionParameter); // keep defaults
|
|
218
|
-
templates.add(getLocationTemplate(additionParameter));
|
|
219
|
-
return templates;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
private CometChatMessageTemplate getLocationTemplate(@NonNull AdditionParameter additionParameter) {
|
|
223
|
-
return new CometChatMessageTemplate()
|
|
224
|
-
.setCategory(UIKitConstants.MessageCategory.CUSTOM) // CUSTOM, not MESSAGE
|
|
225
|
-
.setType("location") // your custom type
|
|
226
|
-
// setOptions: Function3<Context, BaseMessage, Group, List<CometChatMessageOption>>
|
|
227
|
-
.setOptions((context, baseMessage, group) ->
|
|
228
|
-
ChatConfigurator.getDataSource().getCommonOptions(context, baseMessage, group, additionParameter))
|
|
229
|
-
.setContentView(new MessagesViewHolderListener() {
|
|
230
|
-
@Override
|
|
231
|
-
public View createView(Context context, CometChatMessageBubble messageBubble,
|
|
232
|
-
UIKitConstants.MessageBubbleAlignment alignment) {
|
|
233
|
-
return LayoutInflater.from(context).inflate(R.layout.custom_location_bubble, null);
|
|
234
|
-
}
|
|
235
|
-
@Override
|
|
236
|
-
public void bindView(Context context, View createdView, BaseMessage message,
|
|
237
|
-
UIKitConstants.MessageBubbleAlignment alignment,
|
|
238
|
-
RecyclerView.ViewHolder holder, List<BaseMessage> messageList, int position) {
|
|
239
|
-
// bind from (CustomMessage) message customData
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
> You usually also want the type to count as a known type: override `getDefaultMessageTypes(...)` / `getDefaultMessageCategories(...)` and append your type / `MessageCategory.CUSTOM` (Polls does exactly this — `PollsExtensionDecorator.java:171-186`).
|
|
246
|
-
|
|
247
|
-
#### Scenario 2 — Override an existing built-in type's bubble
|
|
248
|
-
|
|
249
|
-
Do **not** rebuild the template list. Override the per-type template getter and mutate the template returned by `super`. The verified getters on `DataSource` are `getTextTemplate(AdditionParameter)`, `getImageTemplate`, `getVideoTemplate`, `getAudioTemplate`, `getFileTemplate` (`DataSource.java:230-244`), plus the lookup `getMessageTemplate(String category, String type, AdditionParameter)` (`DataSource.java:260`). The decorator forwards each to the wrapped source (`DataSourceDecorator.java:598`, `:652`), so call `super` then re-skin only the slot you want.
|
|
250
|
-
|
|
251
|
-
**Java:**
|
|
252
|
-
```java
|
|
253
|
-
@Override
|
|
254
|
-
public CometChatMessageTemplate getTextTemplate(@NonNull AdditionParameter additionParameter) {
|
|
255
|
-
CometChatMessageTemplate template = super.getTextTemplate(additionParameter); // keeps type/category/options
|
|
256
|
-
template.setContentView(new MessagesViewHolderListener() { // swap only the content slot
|
|
257
|
-
@Override
|
|
258
|
-
public View createView(Context context, CometChatMessageBubble messageBubble,
|
|
259
|
-
UIKitConstants.MessageBubbleAlignment alignment) {
|
|
260
|
-
return LayoutInflater.from(context).inflate(R.layout.my_text_bubble, null);
|
|
261
|
-
}
|
|
262
|
-
@Override
|
|
263
|
-
public void bindView(Context context, View createdView, BaseMessage message,
|
|
264
|
-
UIKitConstants.MessageBubbleAlignment alignment,
|
|
265
|
-
RecyclerView.ViewHolder holder, List<BaseMessage> messageList, int position) {
|
|
266
|
-
((TextView) createdView.findViewById(R.id.body)).setText(((TextMessage) message).getText());
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
return template;
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
> `setContentView`/`setBubbleView`/`setHeaderView`/`setBottomView`/`setStatusInfoView`/`setFooterView`/`setReplyView` all take a `MessagesViewHolderListener` and return the template (`CometChatMessageTemplate.java:79-202`) — pick the slot you need. Overriding `getTextTemplate` reskins **every** text bubble app-wide while preserving its default options/category/type.
|
|
274
|
-
|
|
275
|
-
#### Scenario 3 — Add a composer attachment option
|
|
276
|
-
|
|
277
|
-
Override `getAttachmentOptions(...)`, call `super`, and append a `CometChatMessageComposerAction` (a builder — `setId/setTitle/setIcon/setOnClick`, `CometChatMessageComposerAction.java:46-127`). This is exactly `PollsExtensionDecorator.getAttachmentOptions` (`PollsExtensionDecorator.java:88-168`).
|
|
278
|
-
|
|
279
|
-
**Java:**
|
|
280
|
-
```java
|
|
281
|
-
@Override
|
|
282
|
-
public List<CometChatMessageComposerAction> getAttachmentOptions(Context context, User user,
|
|
283
|
-
Group group, HashMap<String, String> idMap, @NonNull AdditionParameter additionParameter) {
|
|
284
|
-
List<CometChatMessageComposerAction> options =
|
|
285
|
-
super.getAttachmentOptions(context, user, group, idMap, additionParameter); // keep camera/gallery/file/poll/…
|
|
286
|
-
options.add(new CometChatMessageComposerAction()
|
|
287
|
-
.setId("location")
|
|
288
|
-
.setTitle("Send Location")
|
|
289
|
-
.setIcon(R.drawable.ic_location)
|
|
290
|
-
.setOnClick(() -> { /* pick + send (see below) */ }));
|
|
291
|
-
return options;
|
|
292
|
-
}
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
#### Scenario 4 — Add a message long-press option (Forward-style)
|
|
296
|
-
|
|
297
|
-
Override the **per-type** option getter — `getTextMessageOptions`, `getImageMessageOptions`, `getVideoMessageOptions`, `getAudioMessageOptions`, or `getFileMessageOptions` (`DataSource.java:49-108`) — call `super`, then append a `CometChatMessageOption`. This is exactly `MessageTranslationDecorator.getTextMessageOptions` (`MessageTranslationDecorator.java:44-59`).
|
|
298
|
-
|
|
299
|
-
**Java:**
|
|
300
|
-
```java
|
|
301
|
-
@Override
|
|
302
|
-
public List<CometChatMessageOption> getTextMessageOptions(Context context,
|
|
303
|
-
BaseMessage baseMessage, Group group, @NonNull AdditionParameter additionParameter) {
|
|
304
|
-
List<CometChatMessageOption> options =
|
|
305
|
-
super.getTextMessageOptions(context, baseMessage, group, additionParameter); // keep reply/copy/edit/delete/…
|
|
306
|
-
if (baseMessage != null && baseMessage.getDeletedAt() == 0) {
|
|
307
|
-
options.add(new CometChatMessageOption(
|
|
308
|
-
"forward", "Forward", R.drawable.ic_forward, () -> { /* forward baseMessage */ }));
|
|
309
|
-
}
|
|
310
|
-
return options;
|
|
311
|
-
}
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
> `getMessageOptions(...)` (`DataSource.java:271`) is the **aggregate** dispatcher the kit calls per message; it routes to the per-type getters above. To add an option to *one* message type, override that type's getter (as above). Override `getMessageOptions` only when you want the option on **every** message type at once.
|
|
315
|
-
|
|
316
|
-
> **Append rule (all four):** an override that returns a fresh `new ArrayList<>()` instead of starting from `super.*` wipes every default (bubbles, attachments, or options). Always seed from `super`.
|
|
317
|
-
|
|
318
|
-
Register the decorator app-wide via `ChatConfigurator.enable(...)` (§"Register via ChatConfigurator" above) — it accepts `Function1<DataSource, DataSource>` (`ChatConfigurator.java:39`). For a packaged two-class extension (registrar + decorator), see `cometchat-android-v5-extensions`.
|
|
319
|
-
|
|
320
|
-
### Sending a custom message — use the UIKit path, not the raw SDK
|
|
321
|
-
|
|
322
|
-
```java
|
|
323
|
-
CustomMessage message = new CustomMessage(
|
|
324
|
-
receiverId, CometChatConstants.RECEIVER_TYPE_USER, // or RECEIVER_TYPE_GROUP
|
|
325
|
-
"location", // matches the template type
|
|
326
|
-
customData); // JSONObject
|
|
327
|
-
// ✅ kit path — sets muid + sender, fires ccMessageSent → list APPENDS
|
|
328
|
-
CometChatUIKit.sendCustomMessage(message, new CometChat.CallbackListener<CustomMessage>() {
|
|
329
|
-
@Override public void onSuccess(CustomMessage m) { }
|
|
330
|
-
@Override public void onError(CometChatException e) { }
|
|
331
|
-
});
|
|
332
|
-
// ❌ CometChat.sendCustomMessage(...) — no muid/sender/event → recipient error + realtime replace
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
Verified against kit source (chat-uikit-android 5.x):
|
|
336
|
-
- `CometChatUIKit.getDataSource()`, `ChatConfigurator.getDataSource()` / `ChatConfigurator.enable(Function1<DataSource,DataSource>)` (`ChatConfigurator.java:39,55`)
|
|
337
|
-
- `DataSource.getMessageTemplates(AdditionParameter)` (`DataSource.java:248`); per-type template getters `getTextTemplate/getImageTemplate/getVideoTemplate/getAudioTemplate/getFileTemplate(AdditionParameter)` (`DataSource.java:230-244`); lookup `getMessageTemplate(String category, String type, AdditionParameter)` (`DataSource.java:260`)
|
|
338
|
-
- Per-type option getters `getTextMessageOptions/getImageMessageOptions/getVideoMessageOptions/getAudioMessageOptions/getFileMessageOptions(Context, BaseMessage, Group, AdditionParameter)` (`DataSource.java:49-108`); aggregate `getMessageOptions(...)` (`DataSource.java:271`)
|
|
339
|
-
- `DataSource.getAttachmentOptions(Context, User, Group, HashMap, AdditionParameter)` (`DataSource.java:286`)
|
|
340
|
-
- `CometChatMessageTemplate` setters `setType/setCategory(String)`, `setOptions(Function3<Context,BaseMessage,Group,List<CometChatMessageOption>>)`, `setContentView/setBubbleView/setHeaderView/setBottomView/setStatusInfoView/setFooterView/setReplyView(MessagesViewHolderListener)` (`CometChatMessageTemplate.java:79-237`)
|
|
341
|
-
- `CometChatMessageComposerAction` builder `setId/setTitle/setIcon/setOnClick(...)` (`CometChatMessageComposerAction.java:46-127`); `CometChatMessageOption(String,String,int,OnClick)` (`CometChatMessageOption.java:43`)
|
|
342
|
-
- `MessagesViewHolderListener.createView(...)` + `bindView(...)` (`MessagesViewHolderListener.java:18-26`)
|
|
343
|
-
- `CometChatUIKit.sendCustomMessage(CustomMessage, CallbackListener)`
|
|
344
|
-
- Canonical reference decorators: `PollsExtensionDecorator.java` (template + attachment), `MessageTranslationDecorator.java` (message option)
|
|
345
|
-
|
|
346
|
-
---
|
|
347
|
-
|
|
348
|
-
## 4. Event system
|
|
349
|
-
|
|
350
|
-
CometChat provides event classes for reacting to chat events. Register listeners with a unique tag.
|
|
351
|
-
|
|
352
|
-
### CometChatMessageEvents
|
|
353
|
-
|
|
354
|
-
**Java:**
|
|
355
|
-
```java
|
|
356
|
-
CometChatMessageEvents.addListener("unique-tag", new CometChatMessageEvents() {
|
|
357
|
-
@Override
|
|
358
|
-
public void ccMessageSent(BaseMessage baseMessage, int status) {
|
|
359
|
-
// Message sent
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
@Override
|
|
363
|
-
public void onTextMessageReceived(TextMessage textMessage) {
|
|
364
|
-
// Text message received
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
@Override
|
|
368
|
-
public void onMessageReactionAdded(ReactionEvent reactionEvent) {
|
|
369
|
-
// Reaction added
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
// Remove when done
|
|
374
|
-
CometChatMessageEvents.removeListener("unique-tag");
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
**Kotlin:**
|
|
378
|
-
```kotlin
|
|
379
|
-
CometChatMessageEvents.addListener("unique-tag", object : CometChatMessageEvents() {
|
|
380
|
-
override fun ccMessageSent(baseMessage: BaseMessage, status: Int) {
|
|
381
|
-
// Message sent
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
override fun onTextMessageReceived(textMessage: TextMessage) {
|
|
385
|
-
// Text message received
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
override fun onMessageReactionAdded(reactionEvent: ReactionEvent) {
|
|
389
|
-
// Reaction added
|
|
390
|
-
}
|
|
391
|
-
})
|
|
392
|
-
|
|
393
|
-
// Remove when done
|
|
394
|
-
CometChatMessageEvents.removeListener("unique-tag")
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### CometChatUserEvents
|
|
398
|
-
|
|
399
|
-
```java
|
|
400
|
-
CometChatUserEvents.addUserListener("unique-tag", new CometChatUserEvents() {
|
|
401
|
-
@Override
|
|
402
|
-
public void ccUserBlocked(User user) { }
|
|
403
|
-
|
|
404
|
-
@Override
|
|
405
|
-
public void ccUserUnblocked(User user) { }
|
|
406
|
-
});
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
### CometChatGroupEvents
|
|
410
|
-
|
|
411
|
-
```java
|
|
412
|
-
CometChatGroupEvents.addGroupListener("unique-tag", new CometChatGroupEvents() {
|
|
413
|
-
@Override
|
|
414
|
-
public void ccGroupCreated(Group group) { }
|
|
415
|
-
@Override
|
|
416
|
-
public void ccGroupDeleted(Group group) { }
|
|
417
|
-
@Override
|
|
418
|
-
public void ccGroupMemberJoined(User joinedUser, Group joinedGroup) { }
|
|
419
|
-
@Override
|
|
420
|
-
public void ccGroupMemberKicked(Action action, User kicked, User kickedBy, Group from) { }
|
|
421
|
-
@Override
|
|
422
|
-
public void ccGroupMemberBanned(Action action, User banned, User bannedBy, Group from) { }
|
|
423
|
-
});
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
### CometChatCallEvents
|
|
427
|
-
|
|
428
|
-
```java
|
|
429
|
-
CometChatCallEvents.addListener("unique-tag", new CometChatCallEvents() {
|
|
430
|
-
@Override
|
|
431
|
-
public void ccOutgoingCall(Call call) { }
|
|
432
|
-
@Override
|
|
433
|
-
public void ccCallAccepted(Call call) { }
|
|
434
|
-
@Override
|
|
435
|
-
public void ccCallRejected(Call call) { }
|
|
436
|
-
@Override
|
|
437
|
-
public void ccCallEnded(Call call) { }
|
|
438
|
-
});
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
---
|
|
442
|
-
|
|
443
|
-
## 5. Custom view slots on components
|
|
444
|
-
|
|
445
|
-
Most components support custom view injection via `Function3<Context, User, Group, View>`:
|
|
446
|
-
|
|
447
|
-
```java
|
|
448
|
-
CometChatMessageHeader header = findViewById(R.id.header);
|
|
449
|
-
header.setSubtitleView((context, user, group) -> {
|
|
450
|
-
TextView subtitle = new TextView(context);
|
|
451
|
-
if (user != null) {
|
|
452
|
-
subtitle.setText(user.getStatus().equals("online") ? "Active now" : "Offline");
|
|
453
|
-
}
|
|
454
|
-
return subtitle;
|
|
455
|
-
});
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
---
|
|
459
|
-
|
|
460
|
-
## Hard rules
|
|
461
|
-
|
|
462
|
-
- **Always extend `DataSourceDecorator`, never implement `DataSource` directly.** The decorator preserves existing behavior.
|
|
463
|
-
- **Register `ChatConfigurator.enable()` AFTER `CometChatUIKit.init()` succeeds.** The configurator resets on init.
|
|
464
|
-
- **Always remove event listeners when the Activity/Fragment is destroyed.** Use `onDestroy()` or `onDestroyView()`.
|
|
465
|
-
- **Template view slots use `MessagesViewHolderListener`.** Implement both `createView()` and `bindView()`.
|
|
466
|
-
|
|
467
|
-
## Sound (in-app message + call sounds)
|
|
468
|
-
|
|
469
|
-
The V5 UI Kit surfaces `CometChatSoundManager` for incoming/outgoing message + call sounds (mute / custom audio). **V5 is legacy/maintenance-only** — V6 is the current cohort. For call sounds see this family's `-calls` skill; verify the `CometChatSoundManager` API against the installed kit before relying on it.
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-android-v5-extensions
|
|
3
|
-
description: "Extension architecture for CometChat Android — ExtensionsDataSource, decorators, built-in extensions, and how to create custom extensions."
|
|
4
|
-
license: "MIT"
|
|
5
|
-
compatibility: "Android 7.0+; Java 8+; Kotlin 1.8+; com.cometchat:chat-uikit-android:5.x"
|
|
6
|
-
metadata:
|
|
7
|
-
author: "CometChat"
|
|
8
|
-
version: "3.0.0"
|
|
9
|
-
tags: "cometchat android extensions datasource decorator polls stickers collaborative"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
> **Ground truth:** `com.cometchat:chat-uikit-android:5.x` (legacy/maintenance-only; +`calls-sdk-android:5.x`) — resolved AAR (javap) + `ui-kit/android`. **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.
|
|
13
|
-
|
|
14
|
-
> **Companion skills:** `cometchat-android-v5-customization` covers DataSource decorators;
|
|
15
|
-
> `cometchat-android-v5-features` covers the feature catalog.
|
|
16
|
-
|
|
17
|
-
## Purpose
|
|
18
|
-
|
|
19
|
-
This skill covers the CometChat extension architecture — how extensions plug into the UI Kit, the built-in extensions, and how to create custom ones.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Use this skill when
|
|
24
|
-
|
|
25
|
-
- "How do extensions work?"
|
|
26
|
-
- "How do I add a custom extension?"
|
|
27
|
-
- "How do I disable an extension?"
|
|
28
|
-
- Working with `ExtensionsDataSource` or `ExtensionDecorator`
|
|
29
|
-
|
|
30
|
-
## Do not use this skill when
|
|
31
|
-
|
|
32
|
-
- Enabling a backend extension or AI feature → use `cometchat-android-v5-features` (which routes to `cometchat apply-feature <id> --app-id <X>`)
|
|
33
|
-
- Writing custom message templates → use `cometchat-android-v5-customization`
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 1. Extension architecture
|
|
38
|
-
|
|
39
|
-
Extensions are split into two class types:
|
|
40
|
-
|
|
41
|
-
- **Registrar** classes (e.g. `PollsExtension`, `StickerExtension`) — extend `ExtensionsDataSource`. These are what you pass to `setExtensions(...)` to enable a built-in extension.
|
|
42
|
-
- **Decorator** classes (e.g. `PollsExtensionDecorator`, `StickerExtensionDecorator`) — extend `DataSourceDecorator`. These are the runtime decorators that wrap the active `DataSource` chain. The kit creates them internally; you don't construct them directly.
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
ChatConfigurator.getDataSource()
|
|
46
|
-
└── SmartRepliesExtensionDecorator (created by SmartRepliesExtension)
|
|
47
|
-
└── PollsExtensionDecorator (created by PollsExtension)
|
|
48
|
-
└── StickerExtensionDecorator (created by StickerExtension)
|
|
49
|
-
└── MessagesDataSource (base)
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## 2. Built-in extensions
|
|
53
|
-
|
|
54
|
-
| Extension | Package | What it adds |
|
|
55
|
-
|---|---|---|
|
|
56
|
-
| Polls | `com.cometchat.chatuikit.extensions.polls` | Poll creation and voting in messages |
|
|
57
|
-
| Stickers | `com.cometchat.chatuikit.extensions.sticker` | Sticker keyboard and sticker bubbles |
|
|
58
|
-
| Collaborative Document | `com.cometchat.chatuikit.extensions.collaborative` | Shared document editing |
|
|
59
|
-
| Collaborative Whiteboard | `com.cometchat.chatuikit.extensions.collaborative` | Shared whiteboard |
|
|
60
|
-
| Smart Replies | `com.cometchat.chatuikit.extensions.smartreplies` | AI-powered reply suggestions |
|
|
61
|
-
| Message Translation | `com.cometchat.chatuikit.extensions.messagetranslation` | Translate messages |
|
|
62
|
-
| Text Moderation | `com.cometchat.chatuikit.extensions.textmoderation` | Profanity filtering |
|
|
63
|
-
| Thumbnail Generation | `com.cometchat.chatuikit.extensions.thumbnailgeneration` | Image thumbnails |
|
|
64
|
-
|
|
65
|
-
## 3. Enabling/disabling extensions
|
|
66
|
-
|
|
67
|
-
Extensions are enabled by default. To customize which extensions are active, pass a custom list to `UIKitSettingsBuilder`:
|
|
68
|
-
|
|
69
|
-
```java
|
|
70
|
-
List<ExtensionsDataSource> extensions = new ArrayList<>();
|
|
71
|
-
extensions.add(new PollsExtension()); // registrar, NOT PollsExtensionDecorator
|
|
72
|
-
extensions.add(new StickerExtension()); // registrar, NOT StickerExtensionDecorator
|
|
73
|
-
extensions.add(new SmartRepliesExtension());
|
|
74
|
-
// Omit extensions you don't want
|
|
75
|
-
|
|
76
|
-
UIKitSettings settings = new UIKitSettings.UIKitSettingsBuilder()
|
|
77
|
-
.setAppId(APP_ID)
|
|
78
|
-
.setRegion(REGION)
|
|
79
|
-
.setAuthKey(AUTH_KEY)
|
|
80
|
-
.setExtensions(extensions)
|
|
81
|
-
.build();
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
> **Why not `PollsExtensionDecorator`?** `*ExtensionDecorator` extends `DataSourceDecorator`, not `ExtensionsDataSource` — so it won't compile when added to a `List<ExtensionsDataSource>`. The kit's runtime decorator chain is built by the registrar's `enable()` method internally; you don't add decorators directly.
|
|
85
|
-
|
|
86
|
-
## 4. Creating a custom extension
|
|
87
|
-
|
|
88
|
-
A custom extension has TWO classes:
|
|
89
|
-
|
|
90
|
-
1. A **registrar** that extends `ExtensionsDataSource` (gets added to `setExtensions(...)`)
|
|
91
|
-
2. A **decorator** that extends `DataSourceDecorator` (created by the registrar via `ChatConfigurator.enable(...)`)
|
|
92
|
-
|
|
93
|
-
```java
|
|
94
|
-
// 1. Decorator — extends DataSourceDecorator, overrides per-message behavior
|
|
95
|
-
public class MyExtensionDecorator extends DataSourceDecorator {
|
|
96
|
-
public MyExtensionDecorator(DataSource dataSource) {
|
|
97
|
-
super(dataSource);
|
|
98
|
-
}
|
|
99
|
-
// Override methods to add custom behavior
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// 2. Registrar — extends ExtensionsDataSource, implements getExtensionId() + addExtension()
|
|
103
|
-
public class MyExtension extends ExtensionsDataSource {
|
|
104
|
-
@Override
|
|
105
|
-
public String getExtensionId() {
|
|
106
|
-
return "my-custom-extension";
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
@Override
|
|
110
|
-
public void addExtension() {
|
|
111
|
-
// addExtension() is the ABSTRACT method you must implement. The inherited
|
|
112
|
-
// concrete enable() calls it after confirming the extension is on (dashboard).
|
|
113
|
-
ChatConfigurator.enable(dataSource -> new MyExtensionDecorator(dataSource));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Then add the registrar to UIKitSettings:
|
|
118
|
-
extensions.add(new MyExtension());
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Hard rules
|
|
124
|
-
|
|
125
|
-
- **Two classes per extension.** A registrar (`ExtensionsDataSource`, implements abstract `getExtensionId()` + `addExtension()`; `enable()` is inherited) and a decorator (`DataSourceDecorator`, holds the per-message override). `setExtensions(...)` wants registrars; the chain builds decorators automatically.
|
|
126
|
-
- **Register after init.** `ChatConfigurator.enable()` must be called after `CometChatUIKit.init()` succeeds.
|
|
127
|
-
- **Backend extension toggle still applies.** Even if an extension is registered client-side, it needs to be enabled on the app's backend. Use `cometchat apply-feature <id> --app-id <X>` (the CLI hits the dashboard API). For dashboard-only extensions (Giphy / Stipop / Tenor / Chatwoot / Intercom — those needing third-party API keys), the user has to enter the third-party config in the dashboard manually.
|