@cometchat/skills 4.4.2 → 5.0.0
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 +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -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 +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- 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 +40 -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 +101 -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-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 +131 -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 +58 -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-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -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-push/SKILL.md +24 -602
- 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-onboarding/SKILL.md +89 -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 +90 -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 +313 -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 +126 -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 +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -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 +116 -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/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -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-core/references/troubleshooting.md +28 -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-push/SKILL.md +53 -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 +909 -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 +130 -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-a11y/SKILL.md +0 -477
- 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-i18n/SKILL.md +0 -419
- 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-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- 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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# anti-patterns — real bugs, do NOT do these (Android v6)
|
|
2
|
+
|
|
3
|
+
> Ground truth: `ui-kit/android/getting-started-kotlin.md` / `getting-started-jetpack.md` (order Warnings), `troubleshooting.md` (docs), `conversation-message-view.md`, installed 6.0.5 kit source; verified 2026-08-20. Each entry: name → symptom → why → fix.
|
|
4
|
+
|
|
5
|
+
1. **Hardcoded credentials in source.** *Symptom:* App ID/Auth Key string literals in a Kotlin file (the docs' `"APP_ID"` placeholders copied verbatim), key visible in git/APK. *Why:* credentials in code get committed and shipped; rotating them means a code change. *Fix:* the gitignored `assets/cometchat-settings.json` read by `initFromSettings` (`setup-credentials.md` §4); build-time extras via `local.properties` → `BuildConfig`.
|
|
6
|
+
|
|
7
|
+
2. **Classic `init()` instead of `initFromSettings`.** *Symptom:* works, but integration telemetry attribution is lost. *Why:* only `CometChatUIKit.initFromSettings(context, callback)` persists `integrationSource="ai-agent"` (and auto-inits the Calls SDK from `uiKit.enableCalling`). *Fix:* always init via `initFromSettings` + the settings JSON; use `init(context, UIKitSettings, callback)` only on an explicit user request for programmatic settings (`lifecycle.md`).
|
|
8
|
+
|
|
9
|
+
3. **`cometchat-settings.json` committed to git / Auth Key left in a release build.** *Symptom:* the dev Auth Key is in the repo history or shipped inside the APK's assets. *Why:* the Auth Key authenticates ANY UID — a leaked key is full account takeover of your chat app. *Fix:* gitignore `app/src/main/assets/cometchat-settings.json`; prod builds OMIT `credentials.authKey` and log in with a server-minted auth token (`loginWithAuthToken`).
|
|
10
|
+
|
|
11
|
+
4. **Login before init resolves.** *Symptom:* login "fails silently" — no user, no obvious error, blank chat. *Why:* the docs Warning is explicit: *"`init()` must resolve before you call `login()`. Calling `login()` before init completes will fail silently."* *Fix:* call `login` ONLY inside init's `onSuccess` (`lifecycle.md`).
|
|
12
|
+
|
|
13
|
+
5. **Rendering chat before init/login resolve.** *Symptom:* blank screen or a component stuck on its loading state, no data. *Why:* every `CometChat*` component assumes an initialized SDK + a logged-in user; docs: "Breaking this order = blank screen." *Fix:* the gate — render/navigate only after BOTH callbacks succeed; surface `onError` on the gate instead of proceeding.
|
|
14
|
+
|
|
15
|
+
6. **Leaked listeners.** *Symptom:* duplicate real-time handling, callbacks firing into destroyed screens, memory leaks/crashes after back navigation. *Why:* an SDK `CometChat.addMessageListener(listenerId, ...)` (or a `CometChatEvents` flow collected in a scope that outlives the screen) registered in a lifecycle but never removed keeps the screen alive. *Fix:* pair every add with a remove in the matching teardown — `removeMessageListener(listenerId)` in `onPause`/`onDestroy` (Views) or a `DisposableEffect`/`lifecycleScope` collection that dies with the composable. (The drop-in components manage their OWN listeners — this applies to listeners YOU add.)
|
|
16
|
+
|
|
17
|
+
7. **`wrap_content` collapse of the chat surface.** *Symptom:* a ~0dp sliver, or a list that grows into place as content loads. *Why:* list-shaped components fill their parent; a content-driven box gives them nothing to fill. *Fix:* `match_parent`/`0dp`+constraints / `fillMaxSize()`; message list at `0dp`+`layout_weight="1"` / `weight(1f)` (`layout.md` invariant 1/5).
|
|
18
|
+
|
|
19
|
+
8. **Composer hidden under the keyboard.** *Symptom:* typing opens the IME over the input; the user can't see what they type. *Why:* the window doesn't resize for the IME. *Fix:* Views → `android:windowSoftInputMode="adjustResize"` on the chat Activity; Compose → `Modifier.imePadding()` on the column holding the composer (`layout.md` invariant 3).
|
|
20
|
+
|
|
21
|
+
9. **Composer/header under the system bars.** *Symptom:* header text behind the status bar, send button behind the gesture/nav bar. *Why:* the docs call `enableEdgeToEdge()` — after that the app owns the insets, and unpadded content slides under the bars. *Fix:* `Scaffold(contentWindowInsets = WindowInsets.statusBars)` + `navigationBarsPadding()` (Compose) / root inset padding (Views) — or don't go edge-to-edge (`layout.md` invariant 2).
|
|
22
|
+
|
|
23
|
+
10. **Dead thread affordance.** *Symptom:* tapping "Reply in thread" / a thread indicator does nothing. *Why:* the list renders the thread affordance by default, but navigation is the host's job — unwired `onThreadRepliesClick` dead-ends. *Fix:* wire `setOnThreadRepliesClick { message -> }` / `onThreadRepliesClick =` to a thread screen (`CometChatThreadHeader` + parent-scoped list + composer), or explicitly hide the option (`setReplyInThreadOptionVisibility(View.GONE)`). Same rule for the conversations search icon (`onSearchClick` → `CometChatSearch` or hide).
|
|
24
|
+
|
|
25
|
+
11. **Mixing cohorts or mixing majors.** *Symptom:* duplicate class / resource-merge build errors, or two inconsistent chat UIs. *Why:* `chatuikit-kotlin-android` + `chatuikit-compose-android` in one app collide; a v5 `chat-uikit-android` alongside v6 `chatuikit-*` is a version_conflict. *Fix:* ONE cohort artifact, ONE major — the §3 STOP gate (`setup-credentials.md`).
|
|
26
|
+
|
|
27
|
+
12. **Missing Cloudsmith maven repo.** *Symptom:* `Could not find com.cometchat:chatuikit-...` at sync/build. *Why:* the kit is not on mavenCentral. *Fix:* add `maven("https://dl.cloudsmith.io/public/cometchat/cometchat/maven/")` to `settings.gradle(.kts)` `dependencyResolutionManagement.repositories`.
|
|
28
|
+
|
|
29
|
+
13. **Treating same-user re-login as an error path (or switching users without logout).** *Symptom:* defensive re-login code, or a login error when switching accounts. *Why:* re-`login` with the SAME uid is safe (the kit returns the cached user via `onSuccess`, verified in 6.0.5), but logging in a DIFFERENT uid over an existing session errors. *Fix:* the guard — `getLoggedInUser()` same-uid → skip; different uid → `logout` first, login in its `onSuccess` (`lifecycle.md`).
|
|
30
|
+
|
|
31
|
+
14. **Blocking the main thread waiting for callbacks.** *Symptom:* ANR, frozen splash, or a latch that never releases. *Why:* init/login callbacks are async and delivered on the main thread — `runBlocking`/`CountDownLatch.await()` on main deadlocks or janks. *Fix:* drive UI state from the callbacks (state flag / navigation in `onSuccess`), never wait synchronously.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# component-props — BAKED stable signatures for the Android v6 drop-ins
|
|
2
|
+
|
|
3
|
+
> Ground truth: `ui-kit/android/conversations.md`, `message-header.md`, `message-list.md`, `message-composer.md` (+ `threaded-messages-header.md`, `search.md`, `conversation-message-view.md` for wiring), extracted from the pages' code fences per cohort and cross-checked against installed 6.0.5 kit source, verified 2026-08-20.
|
|
4
|
+
|
|
5
|
+
The high-value, STABLE hooks for the 4 core drop-ins — baked so the golden path needs no
|
|
6
|
+
fetch. Both cohorts use the SAME component names; **Compose = named params on the
|
|
7
|
+
composable, Views = `set*` setters on the view** (XML tag = the fully-qualified class name,
|
|
8
|
+
package `com.cometchat.uikit.kotlin.presentation.<component>.ui.<Name>`). Exhaustive/rare
|
|
9
|
+
params still come from the page's `.md` twin (`docs-map.md`); anything below marked
|
|
10
|
+
**FETCH** is not baked.
|
|
11
|
+
|
|
12
|
+
## THE RULE — custom UI goes in the component's OWN slot, never stacked on top
|
|
13
|
+
A custom header row, banner, or action button belongs in the component's view slot (tables
|
|
14
|
+
below). Don't render it as a sibling above/beside the component.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## CometChatConversations
|
|
19
|
+
**XML tag:** `<com.cometchat.uikit.kotlin.presentation.conversations.ui.CometChatConversations />` (size it `match_parent`).
|
|
20
|
+
**Callbacks** (Views setter ⇄ Compose param — same lambda shape):
|
|
21
|
+
- `setOnItemClick { conversation -> }` ⇄ `onItemClick = { conversation -> }` — the primary navigation hook (replaces built-in behavior).
|
|
22
|
+
- `setOnSearchClick { }` ⇄ `onSearchClick = { }` — the toolbar search icon; wire to a `CometChatSearch` screen or hide the search affordance.
|
|
23
|
+
- `setOnBackPress { }` ⇄ `onBackPress = { }` — toolbar back button.
|
|
24
|
+
- `setOnItemLongClick { conversation -> }` ⇄ `onItemLongClick` · `setOnError { exception -> }` ⇄ `onError` · `setOnLoad { conversations -> }` ⇄ `onLoad` · `setOnEmpty { }` ⇄ `onEmpty` · `setOnSelection { selected -> }` ⇄ `onSelection` (with `setSelectionMode(UIKitConstants.SelectionMode.MULTIPLE)` ⇄ `selectionMode =`).
|
|
25
|
+
**Functionality:** `setTitle("Chats")` ⇄ `title =` · `setToolbarVisibility(View.GONE)` ⇄ `hideToolbar = true` · `setSearchBoxVisibility(View.GONE)` ⇄ `hideSearchBox = true` · `setBackIconVisibility(View.VISIBLE)` ⇄ `hideBackIcon = false` (back icon hidden by default in Compose) · `setDisableSoundForMessages(true)` ⇄ `disableSoundForMessages = true`.
|
|
26
|
+
|
|
27
|
+
**The request-builder scoping hook** (exact names from `conversations.md`):
|
|
28
|
+
- Views: `conversations.setConversationsRequestBuilder(builder)`
|
|
29
|
+
- Compose: `conversationsRequestBuilder = builder`
|
|
30
|
+
```kotlin
|
|
31
|
+
ConversationsRequest.ConversationsRequestBuilder()
|
|
32
|
+
.setConversationType(CometChatConstants.CONVERSATION_TYPE_USER) // 1:1-only; _GROUP for groups-only
|
|
33
|
+
.setLimit(20)
|
|
34
|
+
```
|
|
35
|
+
**Pass the builder object, not `.build()`** — the component calls `.build()` internally
|
|
36
|
+
(docs Warning; default page size 30, infinite scroll). A DM-only ask → `CONVERSATION_TYPE_USER`
|
|
37
|
+
(hides seeded groups); groups-only → `CONVERSATION_TYPE_GROUP`; an unscoped "add chat" → omit the builder.
|
|
38
|
+
|
|
39
|
+
**The selection flows into the message screen via `conversationWith`:**
|
|
40
|
+
```kotlin
|
|
41
|
+
onItemClick = { conversation ->
|
|
42
|
+
when (val entity = conversation.conversationWith) { // User OR Group
|
|
43
|
+
is User -> navigateToUserChat(entity)
|
|
44
|
+
is Group -> navigateToGroupChat(entity)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
The SAME `User`/`Group` is then handed to header + list + composer (below). Views cohort
|
|
49
|
+
passes it through Intent extras (`intent.putExtra("user", entity)` — the guide's pattern);
|
|
50
|
+
Compose holds it in state / a nav route.
|
|
51
|
+
|
|
52
|
+
## CometChatMessageHeader
|
|
53
|
+
**XML tag:** `<com.cometchat.uikit.kotlin.presentation.messageheader.ui.CometChatMessageHeader />` (height `wrap_content`/`56dp`).
|
|
54
|
+
**Target (required):** `setUser(user)` ⇄ `user =` OR `setGroup(group)` ⇄ `group =`.
|
|
55
|
+
**Callbacks:** `setOnBackPress { }` ⇄ `onBackPress = { }` (REQUIRED on phones — pop back to the list) · `setOnError { exception -> }` ⇄ `onError`.
|
|
56
|
+
**Functionality:** `setBackButtonVisibility(View.VISIBLE)` ⇄ `hideBackButton = false`. Presence/typing/member-count update automatically (SDK events handled internally).
|
|
57
|
+
|
|
58
|
+
## CometChatMessageList
|
|
59
|
+
**XML tag:** `<com.cometchat.uikit.kotlin.presentation.messagelist.ui.CometChatMessageList />` (`0dp` + `layout_weight="1"` between header and composer — `layout.md`).
|
|
60
|
+
**Target (required):** `setUser(user)` ⇄ `user =` OR `setGroup(group)` ⇄ `group =` — without one the list shows only its loading indicator (docs Warning).
|
|
61
|
+
**Callbacks:**
|
|
62
|
+
- `setOnThreadRepliesClick { message -> }` ⇄ `onThreadRepliesClick = { message -> }` — receives the parent `BaseMessage`; navigate to the thread screen (default-on; hide only on explicit opt-out via `setReplyInThreadOptionVisibility(View.GONE)` / Compose hide-option param — FETCH the Compose name from `message-list.md` if needed).
|
|
63
|
+
⚠️ **Signature note:** the installed 6.0.5 kit takes a single `BaseMessage` in BOTH cohorts (`fun setOnThreadRepliesClick(callback: ((BaseMessage) -> Unit)?)`); the docs page's `{ context, baseMessage, template -> }` fence is stale — bake the single-arg shape.
|
|
64
|
+
- `setOnError { exception -> }` ⇄ `onError` · `setOnLoad { messages -> }` ⇄ `onLoad` · `setOnEmpty { }` ⇄ `onEmpty`.
|
|
65
|
+
**Functionality:** `setMessagesRequestBuilder(MessagesRequest.MessagesRequestBuilder()...)` ⇄ `messagesRequestBuilder =` (same pass-the-builder-not-`.build()` rule) · `setStartFromUnreadMessages(true)` ⇄ `startFromUnreadMessages = true` · `setEnableMultipleAttachments(true)` ⇄ `enableMultipleAttachments = true` (default true).
|
|
66
|
+
**Thread mode:** `setParentMessageId(id)` (Views, `Long`) ⇄ `parentMessageId = message.id` (Compose, default `-1` = main conversation) — a parent-scoped list for the thread screen. ⚠️ The `guide-threaded-messages.md` Views fence calls `messageList.setParentMessage(it.id)` — that setter doesn't exist on the list; the real one is `setParentMessageId` (verified in kit source + master app).
|
|
67
|
+
|
|
68
|
+
## CometChatMessageComposer
|
|
69
|
+
**XML tag:** `<com.cometchat.uikit.kotlin.presentation.messagecomposer.ui.CometChatMessageComposer />` (height `wrap_content`; create it in the Activity's `onCreate` — it registers an `ActivityResultLauncher` for permissions, docs Warning).
|
|
70
|
+
**Target (required):** `setUser(user)` ⇄ `user =` OR `setGroup(group)` ⇄ `group =`.
|
|
71
|
+
**Works with no extra wiring** for plain send/attachments/voice/emoji.
|
|
72
|
+
**Callbacks (intercept-only):**
|
|
73
|
+
- Compose: `onSendButtonClick = { context, baseMessage -> }` (docs + source agree) · `onError = { ... }` — ⚠️ the Compose source takes `(CometChatException) -> Unit` (one arg); the docs fence shows `{ context, exception -> }` — prefer the one-arg shape, verify on compile.
|
|
74
|
+
- Views: ⚠️ installed 6.0.5 source is `setOnSendButtonClick(callback: (String) -> Unit)` (the typed text), NOT the docs' `{ context, baseMessage -> }` — treat the Views intercept as **FETCH/verify-on-compile**; for the golden path you don't wire it at all.
|
|
75
|
+
**Thread mode:** `setParentMessageId(id)` ⇄ `parentMessageId = message.id` — replies land in the thread.
|
|
76
|
+
|
|
77
|
+
## The thread screen (how the pieces compose — from `guide-threaded-messages.md` + `threaded-messages-header.md`)
|
|
78
|
+
Takes BOTH the conversation target AND the parent message: `CometChatThreadHeader` —
|
|
79
|
+
`setParentMessage(parentMessage)` ⇄ `parentMessage =` (a `BaseMessage`; display-only, no
|
|
80
|
+
callbacks) — above a parent-scoped `CometChatMessageList` + `CometChatMessageComposer`
|
|
81
|
+
(same `user`/`group` + `parentMessageId = parentMessage.id` on both).
|
|
82
|
+
|
|
83
|
+
## CometChatSearch (the `onSearchClick` destination)
|
|
84
|
+
Views `setOnBackPressListener { }` ⇄ Compose `onBackPress = { }` — you opened it, you close
|
|
85
|
+
it (round-trip). Scope to one conversation with `setUid("...")`/`setGuid("...")` ⇄
|
|
86
|
+
`uid =`/`guid =`; global search = neither. Full params: FETCH `search.md`.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Slot / custom-view map (where custom UI goes)
|
|
91
|
+
| Component | Views setter | Compose param | Region |
|
|
92
|
+
|---|---|---|---|
|
|
93
|
+
| Conversations | `setLeadingView(ConversationsViewHolderListener)` / `setTitleView(...)` / `setSubtitleView(...)` / `setTrailingView(...)` | `leadingView = { conversation, typingIndicator -> }` / `titleView` / `subtitleView` / `trailingView` | per-row sections |
|
|
94
|
+
| Conversations | `setLoadingView(v)` / `setEmptyView(v)` / `setErrorView(v)` | `loadingView = { }` / `emptyView = { }` / `errorView = { onRetry -> }` | list states |
|
|
95
|
+
| Conversations | `setOverflowMenu(view)` · `setOptions { ctx, conv -> }` / `setAddOptions { ctx, conv -> }` | `overflowMenu = { }` · `options = { ctx, conv -> }` / `addOptions` | toolbar menu · long-press menu (`CometChatPopupMenu.MenuItem`) |
|
|
96
|
+
| MessageHeader | `setLeadingView(MessageHeaderViewHolderListener)` / `setSubtitleView(...)` / `setTrailingView(...)` / `setItemView(...)` | `leadingView = { user, group -> }` / `subtitleView` / `trailingView` / `itemView` (replaces whole header) | avatar · status line · right-side actions · whole row |
|
|
97
|
+
| MessageList | `setHeaderView(view)` / `setFooterView(view)` · state views as above | `headerView = { }` / `footerView = { }` · state views | banner above / below the scroll |
|
|
98
|
+
| MessageList | `set*ViewProvider(BubbleViewProvider)` (leading/header/reply/content/bottom/statusInfo/thread/footer) · `setBubbleFactories(list)` | per-bubble slot params `leadingView/headerView/.../footerView = { message, alignment -> }` · `bubbleFactories =` | inside every bubble / per message type — depth: FETCH `message-list.md` |
|
|
99
|
+
| MessageComposer | `setHeaderView(view)` / `setSendButtonView(view)` / `setAuxiliaryButtonView(view)` / `setAttachmentOptions(list)` | `headerView = { }` / `sendButtonView = { }` / `auxiliaryButtonView = { }` / `attachmentOptions = listOf(CometChatMessageComposerAction(...))` | above input · send button · sticker/AI area · attach sheet |
|
|
100
|
+
|
|
101
|
+
> Overriding `setAuxiliaryButtonView` REPLACES the sticker/AI buttons entirely — in 6.0.5 there is
|
|
102
|
+
> **no accessor to re-fetch the defaults**: `CometChatUIKit.getDataSource()` and
|
|
103
|
+
> `getAuxiliaryOption(...)` do **not** exist (the v4-era `ChatConfigurator.getDataSource()` /
|
|
104
|
+
> `getAuxiliaryOptions()` slot architecture was removed — verified against chatuikit-core/kotlin 6.0.5).
|
|
105
|
+
> If you must keep the defaults, add them into your custom view yourself; otherwise don't override the
|
|
106
|
+
> whole auxiliary slot. (Styling and ViewModel injection: FETCH the page.)
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Import paths (verified against 6.0.5)
|
|
111
|
+
|
|
112
|
+
Views components live at `com.cometchat.uikit.kotlin.presentation.<area>.ui.<Component>` —
|
|
113
|
+
`conversations.ui.CometChatConversations`, `messagelist.ui.CometChatMessageList`,
|
|
114
|
+
`search.ui.CometChatSearch`, `threadheader.ui.CometChatThreadHeader`, `users.ui.CometChatUsers`,
|
|
115
|
+
`groups.ui.CometChatGroups`, `calllogs.ui.CometChatCallLogs`,
|
|
116
|
+
`notificationfeed.ui.CometChatNotificationFeed`.
|
|
117
|
+
|
|
118
|
+
**The three calling components have NO `.ui` segment** (verified against 6.0.5) — inferring the
|
|
119
|
+
pattern gives `Unresolved reference 'ui'`:
|
|
120
|
+
|
|
121
|
+
| Component | Import |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `CometChatIncomingCall` | `…presentation.incomingcall.CometChatIncomingCall` |
|
|
124
|
+
| `CometChatOutgoingCall` | `…presentation.outgoingcall.CometChatOutgoingCall` |
|
|
125
|
+
| `CometChatCallButtons` | `…presentation.callbuttons.CometChatCallButtons` |
|
|
126
|
+
|
|
127
|
+
SDK types the golden path also emits (not UI-Kit components, and not under `presentation`):
|
|
128
|
+
|
|
129
|
+
| Type | Import |
|
|
130
|
+
|---|---|
|
|
131
|
+
| `AppEntity` (the `User`/`Group` supertype the search + conversation taps switch on) | `com.cometchat.chat.models.AppEntity` |
|
|
132
|
+
| `CometChatConstants` (`RECEIVER_TYPE_*`, `GROUP_TYPE_*`, `CATEGORY_*`) | `com.cometchat.chat.constants.CometChatConstants` |
|
|
133
|
+
|
|
134
|
+
Formatters are not under `presentation` at all: `com.cometchat.uikit.kotlin.shared.formatters.*`
|
|
135
|
+
(`CometChatTextFormatter`, `CometChatMentionsFormatter`, `CometChatRichTextFormatter`). `SearchScope`
|
|
136
|
+
is `com.cometchat.uikit.core.constants.SearchScope`. Compose swaps `kotlin` for `compose`.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Callback shapes (Views, verified vs 6.0.5)
|
|
141
|
+
|
|
142
|
+
| Component | Views setter | Shape |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| `CometChatConversations` | `setOnItemClick` | `(Conversation) -> Unit` |
|
|
145
|
+
| `CometChatConversations` | `setOnSearchClick` | `() -> Unit` |
|
|
146
|
+
| `CometChatMessageHeader` | `setOnBackPress` | `() -> Unit` |
|
|
147
|
+
| `CometChatMessageList` | `setOnThreadRepliesClick` | `((BaseMessage) -> Unit)?` — **ONE arg** |
|
|
148
|
+
| `CometChatMessageList` / `Composer` | `setParentMessageId` | `(Long)` |
|
|
149
|
+
| `CometChatThreadHeader` | `setParentMessage` | `(BaseMessage)` |
|
|
150
|
+
| `CometChatSearch` | `setOnConversationClick` | `((Conversation) -> Unit)?` — **ONE arg** |
|
|
151
|
+
| `CometChatSearch` | `setOnMessageClick` | `((BaseMessage) -> Unit)?` — **ONE arg** |
|
|
152
|
+
| `CometChatSearch` | `setSearchIn` | `(List<SearchScope>)` — import `com.cometchat.uikit.core.constants.SearchScope` |
|
|
153
|
+
| `CometChatMessageHeader` | `setOnNewChatClick` | `(() -> Unit)` — **on the HEADER, not `CometChatConversations`**; a list-first app owns its own new-chat entry (tab/FAB) → `CometChatUsers` + `CometChatGroups` |
|
|
154
|
+
| all four | `setUser` / `setGroup` | `(User)` / `(Group)` |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Component / API map (BAKED closed list — from `catalogs/android-v6.json`)
|
|
159
|
+
Session: `CometChatUIKit`, `UIKitSettings` (`com.cometchat.uikit.core`).
|
|
160
|
+
Core surface: `CometChatConversations` · `CometChatMessageHeader` · `CometChatMessageList` · `CometChatMessageComposer` · `CometChatThreadHeader` · `CometChatSearch`.
|
|
161
|
+
Grow set (on request): `CometChatUsers` · `CometChatGroups` · `CometChatGroupMembers` · `CometChatCallLogs` · `CometChatIncomingCall` · `CometChatNotificationFeed` · `CometChatAIAssistantChatHistory`.
|
|
162
|
+
Namespaces: Views `com.cometchat.uikit.kotlin.presentation.<area>.ui.*` · Compose `com.cometchat.uikit.compose.presentation.<area>.ui.*`.
|
|
163
|
+
**Not in the catalog ⇒ does not exist.** v6 ships **no combined shell** — `CometChatConversationsWithMessages`/`CometChatUI` are v4-era names. `CometChatMessageTemplate` is documented but **absent from 6.0.5** — verify before use. Full catalog: `cometchat-android-v6-{kotlin,compose}-components`.
|
|
164
|
+
|
|
165
|
+
> ⚠️ **Docs drift — trust the reference table, not the docs.** `guide-threaded-messages` (Views tab) shows a **3-arg**
|
|
166
|
+
> `setOnThreadRepliesClick { context, baseMessage, template -> }` and `messageList.setParentMessage(id)`.
|
|
167
|
+
> Neither exists in 6.0.5: the callback takes **one** `BaseMessage`, and the list setter is
|
|
168
|
+
> **`setParentMessageId(Long)`**. Logged internally.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# docs-map — CometChat Android v6: intent → the exact docs page to fetch
|
|
2
|
+
|
|
3
|
+
## Reaching docs — PREFER the CometChat docs MCP; fetch is the fallback
|
|
4
|
+
The canonical doc channel is the **first-party CometChat docs MCP** — tools `search_cometchat_docs`,
|
|
5
|
+
`fetch_cometchat_doc_page`, and `get_cometchat_implementation_bundle`. **If those tools are connected,
|
|
6
|
+
use them instead of a raw web fetch:**
|
|
7
|
+
- **Find the page** → `search_cometchat_docs(query, version?)` — replaces browsing the scoped `llms-*` index.
|
|
8
|
+
- **Read the page** → `fetch_cometchat_doc_page(path)` — pass the SAME `<path>` the tables below list
|
|
9
|
+
(the conversations page path for your platform); the MCP resolves the `.md` twin and returns raw Markdown.
|
|
10
|
+
A full `https://…/docs/<path>` URL also works.
|
|
11
|
+
- **A whole feature/recipe** → `get_cometchat_implementation_bundle(...)` is **NON-AUTHORITATIVE** — curated STATIC recipes that can lag the live docs (verified stale vs v7: e.g. `CometChatConversationsWithMessages`, `css-variables.css`). Treat any bundle as a hint only: RECONCILE it against the `fetch_cometchat_doc_page` result + the pack's hardening; never emit bundle code verbatim.
|
|
12
|
+
|
|
13
|
+
The MCP reads whatever docs environment it is pointed at (production by default; a preview when repointed),
|
|
14
|
+
so it also carries the environment-swap concern below — no hardcoded host on the skill side.
|
|
15
|
+
|
|
16
|
+
**If the MCP tools are NOT connected:** add it (`claude mcp add --transport http cometchat-docs https://mcp.cometchat.com/mcp`, or reinstall/enable the plugin) and retry; only if it still will not connect, fall back to a plain fetch via `DOCS_BASE` (defined next).
|
|
17
|
+
Either way the `<path>` catalog in this file is the source of truth for WHICH page — MCP-vs-fetch is only HOW.
|
|
18
|
+
|
|
19
|
+
## DOCS_BASE — the fetch FALLBACK entry point (⚠️ SWAP HERE to change environments)
|
|
20
|
+
```
|
|
21
|
+
DOCS_BASE = https://www.cometchat.com/docs
|
|
22
|
+
```
|
|
23
|
+
> Production docs (`https://www.cometchat.com/docs`). The Android v6 UI Kit tree lives at the UNVERSIONED root: `/ui-kit/android/<page>`
|
|
24
|
+
> (v5 is `/ui-kit/android/v5/...` — do not fetch it for a v6 build).
|
|
25
|
+
> **Fetch rule:** always build a URL as `DOCS_BASE` + the path shown, then append `.md`.
|
|
26
|
+
> Never hardcode a host anywhere else; never decompile the AAR or read kit source for signatures.
|
|
27
|
+
|
|
28
|
+
## The convention
|
|
29
|
+
`DOCS_BASE` + `<path>` + `.md` → raw Markdown (verbatim code +, on many pages, an "AI Integration
|
|
30
|
+
Quick Reference" accordion). **Every component page carries a `Kotlin (XML Views)` tab AND a
|
|
31
|
+
`Jetpack Compose` tab — read the tab for YOUR cohort** (the same `CometChat*` names, different wiring).
|
|
32
|
+
```
|
|
33
|
+
Fetch: {DOCS_BASE}/ui-kit/android/conversations.md
|
|
34
|
+
```
|
|
35
|
+
Fallback order: `.md` twin → if it 404s, the same URL **without** `.md` (HTML) → **never** kit source.
|
|
36
|
+
|
|
37
|
+
## Scoped Android v6 index (prefer over the global llms.txt)
|
|
38
|
+
```
|
|
39
|
+
{DOCS_BASE}/ui-kit/android/llms-android-v6.md
|
|
40
|
+
```
|
|
41
|
+
An Android-v6-only index of every page as a `.md` link — use it to discover any page not in the
|
|
42
|
+
table below. Global all-products index (large; last resort): `{DOCS_BASE}/llms.txt`.
|
|
43
|
+
> **DOCS-GAP note:** this scoped index ships with docs branch `docs/android-llms-indexes`; until that
|
|
44
|
+
> merges, the per-page `.md` twins below already work — fall back to the table + the global `llms.txt`.
|
|
45
|
+
|
|
46
|
+
## SDK docs — the FALLBACK reference (a feature the UI Kit has NO component for)
|
|
47
|
+
The rule of the pack: **for every feature, first check whether the UI Kit has a component/param for it
|
|
48
|
+
(this file's table + `component-props.md` + the catalog). If it does — USE it. If it does NOT** (e.g.
|
|
49
|
+
AI agent events, transient messages, webhooks, low-level presence/connection, unread counts, granular
|
|
50
|
+
group management) **— drop to the Android Chat SDK and call it directly** (the SDK is already installed
|
|
51
|
+
under the UI Kit; init/login already use it). Look the method up in the SDK docs — never guess:
|
|
52
|
+
```
|
|
53
|
+
SDK_DOCS_BASE = https://www.cometchat.com/docs
|
|
54
|
+
```
|
|
55
|
+
- **SDK index (scoped — PREFER this):** `{SDK_DOCS_BASE}/sdk/android/v5/llms-android-v5.md` — an
|
|
56
|
+
**Android-SDK-v5-only** routing index grouped by area (Messaging · Calling · Users · Groups · AI &
|
|
57
|
+
advanced · Resources & listeners · Advanced). Start here to find the feature's page. Do NOT use the
|
|
58
|
+
site-wide `{SDK_DOCS_BASE}/llms.txt` except as a last resort. Same DOCS-GAP note as above.
|
|
59
|
+
- **⚠️ URL trap:** Android SDK v5 pages are VERSIONED — `{SDK_DOCS_BASE}/sdk/android/v5/<page>` then
|
|
60
|
+
append `.md`. The unversioned `/sdk/android/<page>` tree is **v4** — never fetch it for a v5 build.
|
|
61
|
+
- **Example:** flag a message → `{SDK_DOCS_BASE}/sdk/android/v5/flag-message.md` →
|
|
62
|
+
`CometChat.flagMessage(...)`, `CometChat.getFlagReasons(...)`.
|
|
63
|
+
> Never hand-roll a feature that exists in the UI Kit OR the SDK, and never guess an SDK method —
|
|
64
|
+
> look it up in the SDK index → the page.
|
|
65
|
+
|
|
66
|
+
## Don't fetch the hot path — it's baked
|
|
67
|
+
Install, `init → login → render`, and the core drop-in callbacks for "add chat" are BAKED in
|
|
68
|
+
`cometchat-android-v6-core`. Fetch ONLY for exhaustive params/attrs / long-tail components /
|
|
69
|
+
theming tokens / feature enablement.
|
|
70
|
+
|
|
71
|
+
## The 80% trigger table (URL = `{DOCS_BASE}` + path, then append `.md`)
|
|
72
|
+
| Intent | Path (append `.md`) |
|
|
73
|
+
|---|---|
|
|
74
|
+
| setup / init / login (XML Views) | `/ui-kit/android/getting-started-kotlin` |
|
|
75
|
+
| setup / init / login (Compose) | `/ui-kit/android/getting-started-jetpack` |
|
|
76
|
+
| pick a chat experience / recipes | `/ui-kit/android/getting-started` · `one-to-one-chat` · `tab-based-chat` · `conversation-message-view` |
|
|
77
|
+
| conversation list (full params) | `/ui-kit/android/conversations` |
|
|
78
|
+
| message list | `/ui-kit/android/message-list` |
|
|
79
|
+
| message composer | `/ui-kit/android/message-composer` |
|
|
80
|
+
| message header | `/ui-kit/android/message-header` |
|
|
81
|
+
| users / groups / group members | `/ui-kit/android/users` · `groups` · `group-members` |
|
|
82
|
+
| threads | `/ui-kit/android/threaded-messages-header` |
|
|
83
|
+
| message search | `/ui-kit/android/search` |
|
|
84
|
+
| message templates / custom types | `/ui-kit/android/message-template` (⚠️ verify symbols vs catalog — see core map) |
|
|
85
|
+
| voice/video call buttons | `/ui-kit/android/call-buttons` |
|
|
86
|
+
| incoming / outgoing call UI | `/ui-kit/android/incoming-call` · `outgoing-call` |
|
|
87
|
+
| call logs | `/ui-kit/android/call-logs` |
|
|
88
|
+
| calls setup / enable calling | `/ui-kit/android/calling-integration` · `call-features` · Calls SDK: `/calls/android/setup` |
|
|
89
|
+
| AI features (starter/replies/summary) | `/ui-kit/android/ai-features` |
|
|
90
|
+
| AI agent chat / assistant history | `/ui-kit/android/guide-ai-agent` · `/ui-kit/android/ai-assistant-chat-history` |
|
|
91
|
+
| notification feed | `/ui-kit/android/notification-feed` |
|
|
92
|
+
| push setup (FCM) | `/notifications/push-overview` |
|
|
93
|
+
| extensions (stickers/polls/translation…) | `/ui-kit/android/extensions` — **client half only**; see the enablement table below |
|
|
94
|
+
| theming / colors / styling | `/ui-kit/android/theme-introduction` · `color-resources` · `component-styling` · `message-bubble-styling` |
|
|
95
|
+
| customization (slots/styles/events/formatters…) | `/ui-kit/android/customization-overview` (+ the specific `customization-*` page) |
|
|
96
|
+
| localization / sounds | `/ui-kit/android/localize` · `sound-manager` |
|
|
97
|
+
| methods / events reference | `/ui-kit/android/methods` · `/ui-kit/android/events` |
|
|
98
|
+
| full component list | `/ui-kit/android/components-overview` |
|
|
99
|
+
| troubleshooting | `/ui-kit/android/troubleshooting` |
|
|
100
|
+
| v5→v6 migration / upgrade | `/ui-kit/android/upgrading-from-v5` |
|
|
101
|
+
|
|
102
|
+
## Enablement — the half that is NOT in `ui-kit/android`
|
|
103
|
+
Most "add <feature>" asks have a **dashboard/extension prerequisite**. The component renders and
|
|
104
|
+
nothing happens until it is switched on, so a skill that only wires the client has not finished the
|
|
105
|
+
job. These pages live OUTSIDE the UI-Kit tree — say the prerequisite out loud to the user, and fetch
|
|
106
|
+
the page when you need the exact steps.
|
|
107
|
+
|
|
108
|
+
| Intent | Enablement page (append `.md`) |
|
|
109
|
+
|---|---|
|
|
110
|
+
| any extension — first stop | `/fundamentals/extensions-overview` |
|
|
111
|
+
| polls · stickers | `/fundamentals/polls` · `/fundamentals/stickers` |
|
|
112
|
+
| collaborative whiteboard / document | `/fundamentals/collaborative-whiteboard` · `/fundamentals/collaborative-document` |
|
|
113
|
+
| link preview · thumbnail generation | `/fundamentals/link-preview` · `/fundamentals/thumbnail-generation` |
|
|
114
|
+
| message translation | `/fundamentals/message-translation` |
|
|
115
|
+
| smart replies · conversation starter · summary | `/fundamentals/ai-user-copilot/smart-replies` · `conversation-starter` · `conversation-summary` (overview: `/fundamentals/ai-user-copilot/overview`) |
|
|
116
|
+
| AI agents | `/ai-agents` |
|
|
117
|
+
| profanity filter / moderation | `/fundamentals/moderation-extensions` · `/moderation/overview` · `/moderation/getting-started` · `/moderation/rules-management` |
|
|
118
|
+
| push notifications (Android) | `/notifications/push-overview` · **`/notifications/android-push-notifications`** · `/notifications/badge-count` |
|
|
119
|
+
| campaigns / announcements | `/campaigns/campaigns` · `/campaigns/templates` · `/campaigns/channels` |
|
|
120
|
+
| auth keys, roles, permissions | `/fundamentals/user-auth` · `/fundamentals/user-roles-and-permissions` |
|
|
121
|
+
| server-side webhooks | `/fundamentals/webhooks-overview` · `/calls/webhooks` |
|
|
122
|
+
|
|
123
|
+
> Both scoped LLM indexes now carry this same routing, so either door reaches it:
|
|
124
|
+
> `{DOCS_BASE}/ui-kit/android/llms-android-v6.md` and
|
|
125
|
+
> `{SDK_DOCS_BASE}/sdk/android/v5/llms-android-v5.md`.
|
|
126
|
+
|
|
127
|
+
## Task guides (recipes) — for a whole FEATURE, BUILD FROM the guide + COMPARE against it (docs-maximal)
|
|
128
|
+
For a TASK/feature ask (a whole capability, not just one component's params), the docs ship **full
|
|
129
|
+
end-to-end guides**. **Discover them from the scoped llms index's "Task guides (recipes)" section**
|
|
130
|
+
(`{DOCS_BASE}/ui-kit/android/llms-android-v6.md`) — the index is the source of truth (new guides appear
|
|
131
|
+
there; do NOT bake this list). At time of writing it lists: `guide-overview` · `guide-threaded-messages` ·
|
|
132
|
+
`guide-block-unblock-user` · `guide-new-chat` · `guide-message-privately` · `guide-call-log-details` ·
|
|
133
|
+
`guide-group-chat` · `guide-search-messages` · `guide-ai-agent` · `custom-text-formatter-guide` ·
|
|
134
|
+
`mentions-formatter-guide` · `shortcut-formatter-guide`.
|
|
135
|
+
**Use the matching guide TWO ways — prefer it over baked recipe prose wherever a guide exists:**
|
|
136
|
+
1. **As the implementation SOURCE** — fetch `{DOCS_BASE}/ui-kit/android/<guide>.md` (your cohort's tab)
|
|
137
|
+
and build the feature from the official recipe. **Adapt it ADDITIVELY** into the user's app (reuse
|
|
138
|
+
their navigation/theme/auth; never drop in the guide's standalone shell).
|
|
139
|
+
2. **As a COMPLETENESS + CORRECTNESS check** — after you emit, DIFF your implementation against the
|
|
140
|
+
guide: every component, param, step, and affordance covered? Fill any gap.
|
|
141
|
+
> **Then apply the baked HARDENING DELTAS on top — the guide is the BASELINE, not the whole truth:**
|
|
142
|
+
> credentials via `local.properties`→`BuildConfig` (guides hardcode placeholders); the init→login gate
|
|
143
|
+
> with failures surfaced; thread screens take the conversation target AND the parent message id;
|
|
144
|
+
> IME/insets sizing (`references/layout.md`); wire-or-hide every default-on affordance; listener
|
|
145
|
+
> teardown in the matching lifecycle. Build from the guide, then correct with these.
|
|
146
|
+
|
|
147
|
+
**No matching guide in the index? → continue EXACTLY as before** — build from the pack's baked
|
|
148
|
+
golden path + `component-props.md` and fetch each component's `.md` twin for exact params. **The guide
|
|
149
|
+
is an ENHANCEMENT when present, never a hard dependency.**
|
|
150
|
+
|
|
151
|
+
## Not in the table?
|
|
152
|
+
Fetch the scoped index (`{DOCS_BASE}/ui-kit/android/llms-android-v6.md`), pick the page, fetch its `.md`.
|
|
153
|
+
Never guess a path; never read kit source; never answer params from memory.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# layout — the reflow-free chat surface (the ONE mobile sizing standard, Android v6)
|
|
2
|
+
|
|
3
|
+
> Ground truth: `ui-kit/android/conversation-message-view.md` (both tabs, snippets verbatim) + `getting-started-*` (`enableEdgeToEdge`), cross-checked against the kit's sample-app manifests (`windowSoftInputMode="adjustResize"`), verified 2026-08-20.
|
|
4
|
+
|
|
5
|
+
The single source of truth for how a CometChat surface is SIZED on Android so it renders
|
|
6
|
+
full-size from the first frame, stays clear of system bars and the keyboard, and never
|
|
7
|
+
reflows. `core`, `placement`, and `calls` POINT here — change the rule once, here.
|
|
8
|
+
|
|
9
|
+
> **The kit is NOT the problem.** Every UI Kit component fills its parent by design and
|
|
10
|
+
> ships its OWN loading/empty/error state. A chat surface that collapses, hides the
|
|
11
|
+
> composer under the keyboard, or slides under the status bar is a HOST layout defect.
|
|
12
|
+
|
|
13
|
+
## The five invariants (a correct surface satisfies ALL)
|
|
14
|
+
|
|
15
|
+
**(1) Fill the parent — never `wrap_content` for the chat surface.**
|
|
16
|
+
The conversations screen and the message screen each own their window: Views →
|
|
17
|
+
`match_parent` (in a constraint layout, `0dp` + constraints, as the docs guide does);
|
|
18
|
+
Compose → `Modifier.fillMaxSize()`. `wrap_content` on a list-shaped component collapses to
|
|
19
|
+
~0dp before content loads and grows into place after — both broken. The composer/header
|
|
20
|
+
are the exception: they are bars — `wrap_content` height (Views) / intrinsic height
|
|
21
|
+
(Compose) by design.
|
|
22
|
+
|
|
23
|
+
**(2) Edge-to-edge WITH insets.** The docs call `enableEdgeToEdge()` in every Activity
|
|
24
|
+
`onCreate` — once you do, YOU own the status/nav-bar insets, or the header renders under
|
|
25
|
+
the status bar and the composer under the gesture bar. Compose: the guide's exact recipe —
|
|
26
|
+
```kotlin
|
|
27
|
+
Scaffold(contentWindowInsets = WindowInsets.statusBars) { paddingValues ->
|
|
28
|
+
Column(
|
|
29
|
+
modifier = Modifier
|
|
30
|
+
.fillMaxSize()
|
|
31
|
+
.padding(paddingValues)
|
|
32
|
+
.consumeWindowInsets(paddingValues)
|
|
33
|
+
.navigationBarsPadding()
|
|
34
|
+
.imePadding()
|
|
35
|
+
) { /* header / list / composer */ }
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
Views: apply insets to the root (e.g. `ViewCompat.setOnApplyWindowInsetsListener` padding
|
|
39
|
+
the root with `systemBars()` insets), or skip `enableEdgeToEdge()` entirely and let the
|
|
40
|
+
system fit the window — never edge-to-edge WITHOUT inset handling.
|
|
41
|
+
|
|
42
|
+
**(3) IME/keyboard-aware — the composer stays visible while typing.**
|
|
43
|
+
- **Views:** the chat Activity needs `android:windowSoftInputMode="adjustResize"` in
|
|
44
|
+
`AndroidManifest.xml` (the kit's own sample apps set it on every chat activity). Without
|
|
45
|
+
it the keyboard overlays the composer.
|
|
46
|
+
- **Compose:** `Modifier.imePadding()` on the column that holds the composer (guide recipe
|
|
47
|
+
above) — and make sure inset consumption (`consumeWindowInsets`) precedes it so padding
|
|
48
|
+
isn't applied twice. `adjustResize` in the manifest also helps Compose apps on older
|
|
49
|
+
inset paths; the samples set both.
|
|
50
|
+
|
|
51
|
+
**(4) Loading states render INSIDE the full-size surface — no placeholder→chat jump.**
|
|
52
|
+
The components ship their own loading/empty/error states and render them within the sized
|
|
53
|
+
surface. Mount the sized surface immediately after the gate unlocks and let each component
|
|
54
|
+
show its own state — do NOT swap a small "Loading…" layout for the chat layout (that IS
|
|
55
|
+
the reflow). The only gate ABOVE the surface is init/login (`lifecycle.md`), and the docs'
|
|
56
|
+
gate renders its spinner `fillMaxSize`, so even that swap is full-size → full-size.
|
|
57
|
+
|
|
58
|
+
**(5) List scroll containment — the message list scrolls internally.**
|
|
59
|
+
`CometChatMessageList` (and `CometChatConversations`) contain their own scrolling.
|
|
60
|
+
- **Views:** never nest them in a `ScrollView`/`NestedScrollView`; in the vertical
|
|
61
|
+
`LinearLayout` the list takes `layout_height="0dp"` + `layout_weight="1"` between the
|
|
62
|
+
header and composer bars (docs guide, verbatim below).
|
|
63
|
+
- **Compose:** never place them inside a `verticalScroll` or another `LazyColumn`
|
|
64
|
+
(nested unbounded-height measurement crashes/collapses); give the list `weight(1f)`
|
|
65
|
+
in the `Column` so it gets a bounded height and scrolls inside it.
|
|
66
|
+
|
|
67
|
+
## The message-screen recipe (docs guide, verbatim shapes)
|
|
68
|
+
|
|
69
|
+
**Views — `activity_message.xml`:**
|
|
70
|
+
```xml
|
|
71
|
+
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
|
72
|
+
android:orientation="vertical">
|
|
73
|
+
<com.cometchat.uikit.kotlin.presentation.messageheader.ui.CometChatMessageHeader
|
|
74
|
+
android:id="@+id/message_header"
|
|
75
|
+
android:layout_width="match_parent" android:layout_height="wrap_content" />
|
|
76
|
+
<com.cometchat.uikit.kotlin.presentation.messagelist.ui.CometChatMessageList
|
|
77
|
+
android:id="@+id/message_list"
|
|
78
|
+
android:layout_width="match_parent" android:layout_height="0dp"
|
|
79
|
+
android:layout_weight="1" />
|
|
80
|
+
<com.cometchat.uikit.kotlin.presentation.messagecomposer.ui.CometChatMessageComposer
|
|
81
|
+
android:id="@+id/message_composer"
|
|
82
|
+
android:layout_width="match_parent" android:layout_height="wrap_content" />
|
|
83
|
+
</LinearLayout>
|
|
84
|
+
```
|
|
85
|
+
plus manifest: `<activity android:name=".MessageActivity" android:windowSoftInputMode="adjustResize" />`.
|
|
86
|
+
|
|
87
|
+
**Compose — `MessageScreen`:** the Scaffold recipe in invariant (2) with, inside the Column:
|
|
88
|
+
```kotlin
|
|
89
|
+
CometChatMessageHeader(modifier = Modifier.fillMaxWidth(), user = user, group = group,
|
|
90
|
+
hideBackButton = false, onBackPress = onBack)
|
|
91
|
+
CometChatMessageList(modifier = Modifier.fillMaxWidth().weight(1f), user = user, group = group)
|
|
92
|
+
CometChatMessageComposer(modifier = Modifier.fillMaxWidth(), user = user, group = group)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The conversations screen is the same standard, one component:
|
|
96
|
+
Views full-bleed `CometChatConversations` at `match_parent`/`0dp`+constraints; Compose
|
|
97
|
+
`CometChatConversations(modifier = Modifier.fillMaxSize(), ...)`.
|
|
98
|
+
|
|
99
|
+
> ⚠️ **The list and search routes need insets too, not just the message route.** `fillMaxSize()` under `enableEdgeToEdge()` draws the title under the status-bar clock (verified on device). Wrap every full-screen route in `Scaffold(contentWindowInsets = WindowInsets.statusBars)` — the same recipe this file reserves for the message screen. Skipping it here contradicts layout invariant (2): never edge-to-edge WITHOUT inset handling.
|
|
100
|
+
|
|
101
|
+
## Embedded (not full-screen)
|
|
102
|
+
Same invariants against the embedding cell: give the chat region a bounded height (a sized
|
|
103
|
+
fragment container / a `weight`ed cell / a fixed `Modifier.height(...)`) — never
|
|
104
|
+
`wrap_content`/unbounded — and keep (3)–(5) unchanged. Bottom-nav/tab shells: size the tab
|
|
105
|
+
content pane, not the component (`cometchat-android-v6-{kotlin,compose}-placement`).
|
|
106
|
+
|
|
107
|
+
## Verify (advisory, human check)
|
|
108
|
+
Full-size from the first frame (the kit's own loading state fills the screen, no small box
|
|
109
|
+
that grows); header below the status bar and composer above the gesture/nav bar with
|
|
110
|
+
edge-to-edge on; open the keyboard → the composer rides above it and the list shrinks (no
|
|
111
|
+
overlay); the message list scrolls internally with header/composer pinned; rotate → no
|
|
112
|
+
collapse, no re-init (`lifecycle.md`).
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# lifecycle — init once, login guard, logout (Android v6)
|
|
2
|
+
|
|
3
|
+
> Ground truth: installed `chatuikit-core-android` 6.0.5 `CometChatUIKit.kt` (`initFromSettings`/`login`/`loginWithAuthToken`/`logout`/`getLoggedInUser`/`isSDKInitialized`) + `ui-kit/android/getting-started-kotlin.md` / `getting-started-jetpack.md` (gate pattern), verified 2026-08-20.
|
|
4
|
+
|
|
5
|
+
## Init once — via `initFromSettings`, and where it lives
|
|
6
|
+
The canonical init is **`CometChatUIKit.initFromSettings(context, callback)`** — it reads the gitignored `app/src/main/assets/cometchat-settings.json` (`setup-credentials.md` §4), persists `integrationSource="ai-agent"` for telemetry attribution, and auto-inits the Calls SDK when `uiKit.enableCalling` is true. A classic `init(context, UIKitSettings, callback)` overload also exists on `CometChatUIKit`, but **do not use it as the default — it loses the telemetry attribution** (AUDIT-084); reach for it only when a user explicitly needs programmatic settings.
|
|
7
|
+
|
|
8
|
+
Init is async; **nothing CometChat renders until `onSuccess` fires** (docs Warning: *"`init()` must resolve before you call `login()`. Calling `login()` before init completes will fail silently."*). Two valid placements:
|
|
9
|
+
|
|
10
|
+
- **Gate Activity (RECOMMENDED — the docs getting-started pattern):** the launcher/splash Activity runs `initFromSettings → login` and only then navigates to (Views) / renders (Compose) the chat UI. Failures surface on the gate screen instead of a blank chat.
|
|
11
|
+
- **Application.onCreate:** fine for init alone, but you still need a ready-gate before any `CometChat*` UI renders, and login usually depends on app auth state — so you end up building the gate anyway. Use it only when every screen needs CometChat from frame 1.
|
|
12
|
+
|
|
13
|
+
**Do NOT re-init per Activity/screen.** Init once per process. If a later entry point can't be sure init ran (deep link, notification tap, process death restoring a back stack), guard with `CometChatUIKit.isSDKInitialized()` — if false, route through the gate rather than sprinkling init calls through the app.
|
|
14
|
+
|
|
15
|
+
## The exact init shape (both cohorts — same code)
|
|
16
|
+
```kotlin
|
|
17
|
+
import com.cometchat.chat.core.CometChat
|
|
18
|
+
import com.cometchat.chat.exceptions.CometChatException
|
|
19
|
+
import com.cometchat.chat.models.User
|
|
20
|
+
import com.cometchat.uikit.core.CometChatUIKit
|
|
21
|
+
|
|
22
|
+
// Reads app/src/main/assets/cometchat-settings.json (appId, region, credentials.authKey,
|
|
23
|
+
// uiKit.subscribePresenceForAllUsers/enableCalling) and persists integrationSource="ai-agent".
|
|
24
|
+
CometChatUIKit.initFromSettings(this, object : CometChat.CallbackListener<String>() {
|
|
25
|
+
override fun onSuccess(s: String) { loginUser() } // init resolved — ONLY now login
|
|
26
|
+
override fun onError(e: CometChatException?) {
|
|
27
|
+
// SURFACE it — show e?.message on the gate screen; do NOT proceed to chat.
|
|
28
|
+
// ERR_SETTINGS_FILE_NOT_FOUND → the assets JSON is missing; ERR_SETTINGS_INVALID → appId/region missing.
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
```
|
|
32
|
+
(Compose cohort: hold `isReady`/`error` in `mutableStateOf` and let `setContent` render error → spinner → `ChatApp()` — the getting-started-jetpack gate; Views cohort: `startActivity` to the conversations screen only from login's `onSuccess`, as getting-started-kotlin does.)
|
|
33
|
+
|
|
34
|
+
## Login guard — skip if logged in; logout before switching users
|
|
35
|
+
```kotlin
|
|
36
|
+
private fun loginUser() {
|
|
37
|
+
val existing = CometChatUIKit.getLoggedInUser() // sync; null if nobody logged in
|
|
38
|
+
if (existing != null && existing.uid == uid) { unlockChatUi(); return } // same user → done
|
|
39
|
+
// DIFFERENT user still logged in → logout FIRST, then login in its onSuccess
|
|
40
|
+
CometChatUIKit.login(uid, object : CometChat.CallbackListener<User>() {
|
|
41
|
+
override fun onSuccess(user: User) { unlockChatUi() }
|
|
42
|
+
override fun onError(e: CometChatException) { /* surface e.message — e.g. ERR_UID_NOT_FOUND */ }
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
- **Same UID re-login is safe:** the kit short-circuits and returns the cached user via `onSuccess` (verified in 6.0.5 source) — but the guard keeps intent obvious and skips a needless call.
|
|
47
|
+
- **Different UID while logged in:** call `CometChatUIKit.logout(...)` and only login in its `onSuccess` — logging in over an existing session errors.
|
|
48
|
+
- The UID comes from the user / dashboard (`setup-credentials.md` §7) — never hardcoded in shipped code.
|
|
49
|
+
|
|
50
|
+
## Production login — auth token, not Auth Key
|
|
51
|
+
Mint a per-user token server-side (CometChat REST API), then:
|
|
52
|
+
```kotlin
|
|
53
|
+
CometChatUIKit.loginWithAuthToken(authToken, object : CometChat.CallbackListener<User>() {
|
|
54
|
+
override fun onSuccess(user: User) { unlockChatUi() }
|
|
55
|
+
override fun onError(e: CometChatException) { /* surface */ }
|
|
56
|
+
})
|
|
57
|
+
```
|
|
58
|
+
Prod builds OMIT `credentials.authKey` from `cometchat-settings.json` (`appId`/`region` stay — they're not secrets). Never ship the Auth Key in a release build (docs Warning on both getting-started pages).
|
|
59
|
+
|
|
60
|
+
## Logout
|
|
61
|
+
```kotlin
|
|
62
|
+
CometChatUIKit.logout(object : CometChat.CallbackListener<String>() {
|
|
63
|
+
override fun onSuccess(s: String) { /* route to your sign-in screen */ }
|
|
64
|
+
override fun onError(e: CometChatException?) { /* surface */ }
|
|
65
|
+
})
|
|
66
|
+
```
|
|
67
|
+
Call on app sign-out (it also clears the calls session when calling is enabled). After logout, the next chat entry must pass back through the gate.
|
|
68
|
+
|
|
69
|
+
## Process death & configuration changes
|
|
70
|
+
- **Config change (rotation/theme):** the SDK is a process-level singleton — the Activity recreates, init/login state survives. Do NOT re-run init in every `onCreate` unconditionally; the gate + `isSDKInitialized()` / `getLoggedInUser()` guards make re-entry a no-op.
|
|
71
|
+
- **Process death:** Android may recreate a deep Activity with the process cold. Any Activity that hosts `CometChat*` views must tolerate this: check `CometChatUIKit.isSDKInitialized()` (and `getLoggedInUser() != null`) in `onCreate`; if not ready, bounce to the gate (which re-inits and re-logs-in via the guards) instead of rendering a dead chat surface.
|
|
72
|
+
- **Login session persists** across launches on the device — on warm starts `getLoggedInUser()` is non-null and the gate skips straight past login.
|
|
73
|
+
|
|
74
|
+
## Surfacing CometChatException — never swallow
|
|
75
|
+
Every callback's `onError` hands you a `CometChatException` — log it AND show the user something actionable (`e.message`; wrong Region, a missing settings file, and a missing UID are the three most common). A swallowed `onError` is the #1 cause of "blank screen, no errors" (`troubleshooting.md`). Do not block the main thread waiting for callbacks (no latches/`runBlocking`) — they already arrive on the main thread; drive UI state from them.
|