@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
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
# CometChat Calls Android SDK v4 → v5 migration
|
|
2
|
-
|
|
3
|
-
`com.cometchat:calls-sdk-android:5.+` is a drop-in upgrade for v4 — bump the Gradle dependency, existing code still compiles thanks to deprecated method shims.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/android/migration-guide-v5
|
|
6
|
-
|
|
7
|
-
**Important:** This is the migration for the **Calls SDK** (v4 → v5 of the calls dependency). It is NOT the same as the **UI Kit cohort migration** (V5 cohort → V6 Compose cohort), which is documented in `cometchat-android-v6-migration`. You can be on UI Kit V5 cohort with Calls SDK v5 — they version independently.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Step 1 — Bump the Gradle dependency
|
|
12
|
-
|
|
13
|
-
```kotlin
|
|
14
|
-
// app/build.gradle.kts
|
|
15
|
-
dependencies {
|
|
16
|
-
implementation("com.cometchat:calls-sdk-android:5.+")
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
./gradlew :app:dependencies | grep calls-sdk
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Should show `com.cometchat:calls-sdk-android:5.x.x`.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Step 2 — Migrate init to the v5 builder + `Context`
|
|
29
|
-
|
|
30
|
-
v5 still uses a builder — but the class is the **nested `CallAppSettings.CallAppSettingBuilder`** (singular "Setting"), and `init` now takes `Context` as its first argument.
|
|
31
|
-
|
|
32
|
-
```diff
|
|
33
|
-
- val callAppSettings = CallAppSettings.Builder()
|
|
34
|
-
- .setAppId("APP_ID")
|
|
35
|
-
- .setRegion("REGION")
|
|
36
|
-
- .build()
|
|
37
|
-
- CometChatCalls.init(callAppSettings, object : CometChatCalls.CallbackListener<String>() {
|
|
38
|
-
- override fun onSuccess(s: String) { /* ... */ }
|
|
39
|
-
- override fun onError(e: CometChatException) { /* ... */ }
|
|
40
|
-
- })
|
|
41
|
-
|
|
42
|
-
+ val callAppSettings = CallAppSettings.CallAppSettingBuilder() // nested, singular "Setting"
|
|
43
|
-
+ .setAppId("APP_ID")
|
|
44
|
-
+ .setRegion("REGION")
|
|
45
|
-
+ .build()
|
|
46
|
-
+ CometChatCalls.init(context, callAppSettings, object : CometChatCalls.CallbackListener<String>() {
|
|
47
|
-
+ override fun onSuccess(s: String) { /* ... */ }
|
|
48
|
-
+ override fun onError(e: CometChatException) { /* ... */ }
|
|
49
|
-
+ })
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
> Verified against `calls-sdk-android` 5.x: `CometChatCalls.init(Context, CallAppSettings, CallbackListener<String>)` and `CallAppSettings.CallAppSettingBuilder().setAppId(...).setRegion(...).build()`. There is NO `CallAppSettings(appId =, region =)` constructor and NO `CallAppSettings.Builder()`.
|
|
53
|
-
|
|
54
|
-
(V5 also supports coroutine-suspend `init` via `kotlinx.coroutines` extensions, if you've enabled them.)
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Step 3 — Add Calls SDK login (mandatory)
|
|
59
|
-
|
|
60
|
-
In v5 the Calls SDK has its own auth state, separate from the Chat SDK. Without a Calls SDK login step, the FIRST calls API call (initiate, join, generateToken) throws **"auth token cannot be null"**.
|
|
61
|
-
|
|
62
|
-
The Android v5 Calls SDK exposes two `CometChatCalls.login` overloads — match the API exactly:
|
|
63
|
-
|
|
64
|
-
```kotlin
|
|
65
|
-
import com.cometchat.calls.core.CometChatCalls
|
|
66
|
-
import com.cometchat.calls.exceptions.CometChatException as CallsException
|
|
67
|
-
import com.cometchat.calls.model.CallUser // ← callback returns CallUser, NOT User
|
|
68
|
-
|
|
69
|
-
// Dev mode (Auth Key)
|
|
70
|
-
CometChatCalls.login(uid, AUTH_KEY,
|
|
71
|
-
object : CometChatCalls.CallbackListener<CallUser>() {
|
|
72
|
-
override fun onSuccess(callUser: CallUser) {
|
|
73
|
-
// calls SDK is now ready
|
|
74
|
-
}
|
|
75
|
-
override fun onError(e: CallsException) {
|
|
76
|
-
// surface to user — common cause: typo in app id / auth key
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
// Production mode (server-minted auth token)
|
|
81
|
-
CometChatCalls.login(authToken,
|
|
82
|
-
object : CometChatCalls.CallbackListener<CallUser>() { /* … */ })
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Hard rules:**
|
|
86
|
-
|
|
87
|
-
1. **Call this AFTER `CometChat.login()` succeeds** — the Calls SDK login won't work until the Chat SDK has a valid session.
|
|
88
|
-
2. **The callback receives `com.cometchat.calls.model.CallUser`**, not `com.cometchat.chat.models.User`. Importing the wrong type produces "Type mismatch" at compile time.
|
|
89
|
-
3. **Re-login on every cold start** — the Chat SDK persists login across launches via Shared Prefs; the Calls SDK does NOT. Each app launch where `CometChat.getLoggedInUser()` returns non-null still needs a fresh `CometChatCalls.login` call.
|
|
90
|
-
4. **Don't try `user.authToken`** — `com.cometchat.chat.models.User` does NOT expose `authToken` as a Kotlin property or Java getter on Android. Use the (uid, apiKey) overload for dev, or fetch the auth token from your backend for production. *(This trapped a real smoke run — the chat-side User object hides the auth token.)*
|
|
91
|
-
|
|
92
|
-
After this step, `generateToken()` no longer needs the authToken parameter — the Calls SDK uses its internal session.
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Step 4 — Migrate CallSettings.Builder to SessionSettings
|
|
97
|
-
|
|
98
|
-
```diff
|
|
99
|
-
- val callSettings = CallSettings.Builder(activity)
|
|
100
|
-
- .setSessionType(SessionType.VIDEO)
|
|
101
|
-
- .startWithAudioMuted(false)
|
|
102
|
-
- .showRecordingButton(true)
|
|
103
|
-
- .build()
|
|
104
|
-
|
|
105
|
-
+ val sessionSettings = CometChatCalls.SessionSettingsBuilder()
|
|
106
|
-
+ .setSessionType(SessionType.VIDEO)
|
|
107
|
-
+ .startAudioMuted(false)
|
|
108
|
-
+ .hideRecordingButton(false) // INVERTED — showRecordingButton(true) → hideRecordingButton(false)
|
|
109
|
-
+ .setLayout(LayoutType.TILE)
|
|
110
|
-
+ .build()
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
> There is NO `SessionSettings(sessionType =, startAudioMuted =, hideRecordingButton =, layout =)` data-class constructor on Android — use `CometChatCalls.SessionSettingsBuilder()` with the chained flag methods (cf. `call-session.md` rule 2).
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Step 5 — Migrate listener interface to event listeners
|
|
118
|
-
|
|
119
|
-
v5 splits the old single events interface into five abstract listeners (`SessionStatusListener`,
|
|
120
|
-
`ParticipantEventListener`, `MediaEventsListener`, `ButtonClickListener`, `LayoutListener`).
|
|
121
|
-
Register them on the `CallSession` instance from `joinSession`'s `onSuccess` callback — there is
|
|
122
|
-
NO `CometChatCalls.addEventListener` and NO `CallEvent` enum on Android (cf. `call-session.md`
|
|
123
|
-
rule 3 and `references/event-listeners.md`). The listeners are lifecycle-aware (pass the
|
|
124
|
-
Activity/Fragment as the first arg) and auto-removed on destroy.
|
|
125
|
-
|
|
126
|
-
```diff
|
|
127
|
-
- class MyCallEvents : CometChatCallsEventsListener {
|
|
128
|
-
- override fun onCallEnded() { /* ... */ }
|
|
129
|
-
- override fun onUserJoined(user: User) { /* ... */ }
|
|
130
|
-
- override fun onUserLeft(user: User) { /* ... */ }
|
|
131
|
-
- override fun onError(error: CometChatException) { /* ... */ }
|
|
132
|
-
- }
|
|
133
|
-
|
|
134
|
-
+ // In joinSession's onSuccess(callSession: CallSession):
|
|
135
|
-
+ callSession.addSessionStatusListener(this, object : SessionStatusListener() {
|
|
136
|
-
+ override fun onSessionLeft() { /* ... */ }
|
|
137
|
-
+ })
|
|
138
|
-
+ callSession.addParticipantEventListener(this, object : ParticipantEventListener() {
|
|
139
|
-
+ override fun onParticipantJoined(participant: Participant) { /* ... */ }
|
|
140
|
-
+ override fun onParticipantLeft(participant: Participant) { /* ... */ }
|
|
141
|
-
+ })
|
|
142
|
-
+ // ...plus MediaEventsListener / ButtonClickListener / LayoutListener as needed.
|
|
143
|
-
+ // See references/event-listeners.md for the full override set on each.
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Step 6 — Method renames + receiver shift (Android-specific)
|
|
149
|
-
|
|
150
|
-
v5 moved call-control APIs from static methods on `CometChatCalls` to **instance methods on `CallSession`** (the object returned by `joinSession`'s callback). Session teardown moved from the v4 static `CometChatCalls.endSession()` to the instance method `callSession.leaveSession()` — this is what both calls-sdk-android sample apps use and what the migration guide maps it to. Keep a reference to the `CallSession` (or use `CallSession.getInstance()`); v4 static receivers throw "method not found" against the v5 SDK.
|
|
151
|
-
|
|
152
|
-
```diff
|
|
153
|
-
// session lifecycle — receiver changes from CometChatCalls (static) to CallSession (instance)
|
|
154
|
-
- CometChatCalls.endSession()
|
|
155
|
-
+ callSession.leaveSession() // call on the CallSession from joinSession's onSuccess
|
|
156
|
-
+ // OR if you don't have the reference handy:
|
|
157
|
-
+ CallSession.getInstance().leaveSession()
|
|
158
|
-
|
|
159
|
-
// media controls — same receiver shift
|
|
160
|
-
- CometChatCalls.muteAudio(true)
|
|
161
|
-
+ callSession.muteAudio()
|
|
162
|
-
- CometChatCalls.muteAudio(false)
|
|
163
|
-
+ callSession.unmuteAudio()
|
|
164
|
-
|
|
165
|
-
- CometChatCalls.pauseVideo(true)
|
|
166
|
-
+ callSession.pauseVideo()
|
|
167
|
-
- CometChatCalls.pauseVideo(false)
|
|
168
|
-
+ callSession.resumeVideo()
|
|
169
|
-
|
|
170
|
-
// screen share — Android is RECEIVE-ONLY in v5: there is NO screen-share initiation API.
|
|
171
|
-
// Drop any startScreenShare()/stopScreenShare() calls; observe incoming shares via
|
|
172
|
-
// ParticipantEventListener.onParticipantStartedScreenShare / onParticipantStoppedScreenShare.
|
|
173
|
-
- CometChatCalls.startScreenShare()
|
|
174
|
-
- CometChatCalls.stopScreenShare()
|
|
175
|
-
|
|
176
|
-
// layout — instance method on the CallSession in v5 (NOT static on CometChatCalls)
|
|
177
|
-
- CometChatCalls.setMode(mode)
|
|
178
|
-
+ callSession.setLayout(layout) // or CallSession.getInstance().setLayout(layout)
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Hold onto the `CallSession` reference** returned by `joinSession`'s `onSuccess(callSession: CallSession)` callback — most v5 in-call APIs live there. Stashing it in an Activity field or ViewModel is the canonical pattern; the SDK also exposes `CallSession.getInstance()` as a fallback if you've lost the reference.
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Step 7 — Compose call surface unchanged
|
|
186
|
-
|
|
187
|
-
If you're using XML `CometChatCallActivity`, no changes. If you've embedded the call surface via `CometChatOngoingCallView`, the v5 SDK's view component takes `SessionSettings` directly:
|
|
188
|
-
|
|
189
|
-
```diff
|
|
190
|
-
- callView.startCall(callSettings)
|
|
191
|
-
+ callView.joinSession(sessionSettings)
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## ConnectionService + ForegroundServiceType (no v5 changes)
|
|
197
|
-
|
|
198
|
-
The seven hard rules from `cometchat-android-v5-calls/SKILL.md` still apply post-v5:
|
|
199
|
-
- ConnectionService for incoming calls
|
|
200
|
-
- `foregroundServiceType="microphone"` (or `camera|microphone`) for active calls
|
|
201
|
-
- Hangup teardown sequence
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## Verification checklist
|
|
206
|
-
|
|
207
|
-
- [ ] `app/build.gradle.kts` lists calls-sdk-android v5+
|
|
208
|
-
- [ ] `./gradlew :app:dependencies` shows v5 resolved
|
|
209
|
-
- [ ] `CometChatCalls.login(authToken)` called after `CometChat.login`
|
|
210
|
-
- [ ] `CometChatCallsEventsListener` replaced with the five split listeners on the `CallSession` instance
|
|
211
|
-
- [ ] `CallSettings.Builder` replaced with `CometChatCalls.SessionSettingsBuilder()`
|
|
212
|
-
- [ ] Method renames applied
|
|
213
|
-
- [ ] FCM VoIP push still arrives + ConnectionService still surfaces UI
|
|
214
|
-
- [ ] Real-device smoke: 2 phones, foreground + backgrounded recipient, mic/camera/screenshare/end
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## Pointers
|
|
219
|
-
|
|
220
|
-
- Canonical migration: https://www.cometchat.com/docs/calls/android/migration-guide-v5
|
|
221
|
-
- `cometchat-android-v5-calls/SKILL.md` — seven hard rules (unchanged in v5)
|
|
222
|
-
- `cometchat-android-v5-calls/references/server-fcm-voip.md` — FCM (unchanged in v5)
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: participant-management
|
|
3
|
-
description: Manage call participants — mute, pause video, pin/unpin, raise hand, view participant list. Use when implementing moderation, participant actions, or custom participant UI. Triggers on "mute participant", "pin participant", "participant list", "raise hand", "kick participant", "participant management".
|
|
4
|
-
inclusion: manual
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# CometChat Calls SDK v5 — Participant Management
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
Control other participants during calls: mute their audio, pause their video, pin/unpin in layout. Monitor participant state via `ParticipantEventListener`. Raise hand is available for self.
|
|
12
|
-
|
|
13
|
-
## Key Imports
|
|
14
|
-
|
|
15
|
-
```kotlin
|
|
16
|
-
import com.cometchat.calls.core.CallSession
|
|
17
|
-
import com.cometchat.calls.listeners.ParticipantEventListener
|
|
18
|
-
import com.cometchat.calls.model.Participant
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Implementation
|
|
22
|
-
|
|
23
|
-
### Participant Actions
|
|
24
|
-
|
|
25
|
-
```kotlin
|
|
26
|
-
val callSession = CallSession.getInstance()
|
|
27
|
-
|
|
28
|
-
// Mute a participant's audio
|
|
29
|
-
callSession.muteParticipant(participant.uid)
|
|
30
|
-
|
|
31
|
-
// Pause a participant's video
|
|
32
|
-
callSession.pauseParticipantVideo(participant.uid)
|
|
33
|
-
|
|
34
|
-
// Pin a participant (keeps them prominent in layout)
|
|
35
|
-
callSession.pinParticipant(participant.uid) // per official docs (calls/android/participant-management)
|
|
36
|
-
|
|
37
|
-
// Unpin (return to automatic speaker highlighting)
|
|
38
|
-
callSession.unpinParticipant()
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Raise Hand (Self)
|
|
42
|
-
|
|
43
|
-
Raise hand is controlled via the built-in UI button. Listen for it:
|
|
44
|
-
|
|
45
|
-
```kotlin
|
|
46
|
-
callSession.addButtonClickListener(this, object : ButtonClickListener() {
|
|
47
|
-
override fun onRaiseHandButtonClicked() {
|
|
48
|
-
Log.d(TAG, "Hand raised/lowered")
|
|
49
|
-
}
|
|
50
|
-
// ... other overrides
|
|
51
|
-
})
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Listen for Participant Events
|
|
55
|
-
|
|
56
|
-
```kotlin
|
|
57
|
-
callSession.addParticipantEventListener(this, object : ParticipantEventListener() {
|
|
58
|
-
override fun onParticipantJoined(participant: Participant) {}
|
|
59
|
-
override fun onParticipantLeft(participant: Participant) {}
|
|
60
|
-
override fun onParticipantListChanged(participants: List<Participant>) {
|
|
61
|
-
// Full participant list — use for UI updates
|
|
62
|
-
}
|
|
63
|
-
override fun onParticipantAudioMuted(participant: Participant) {}
|
|
64
|
-
override fun onParticipantAudioUnmuted(participant: Participant) {}
|
|
65
|
-
override fun onParticipantVideoPaused(participant: Participant) {}
|
|
66
|
-
override fun onParticipantVideoResumed(participant: Participant) {}
|
|
67
|
-
override fun onParticipantHandRaised(participant: Participant) {}
|
|
68
|
-
override fun onParticipantHandLowered(participant: Participant) {}
|
|
69
|
-
override fun onDominantSpeakerChanged(participant: Participant) {}
|
|
70
|
-
override fun onParticipantStartedScreenShare(participant: Participant) {}
|
|
71
|
-
override fun onParticipantStoppedScreenShare(participant: Participant) {}
|
|
72
|
-
override fun onParticipantStartedRecording(participant: Participant) {}
|
|
73
|
-
override fun onParticipantStoppedRecording(participant: Participant) {}
|
|
74
|
-
})
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Participant Object Properties
|
|
78
|
-
|
|
79
|
-
| Property | Type | Description |
|
|
80
|
-
|----------|------|-------------|
|
|
81
|
-
| `uid` | String | CometChat user ID |
|
|
82
|
-
| `name` | String | Display name |
|
|
83
|
-
| `avatar` | String | Avatar URL |
|
|
84
|
-
| `isAudioMuted` | Boolean | Audio muted? |
|
|
85
|
-
| `isVideoPaused` | Boolean | Video paused? |
|
|
86
|
-
| `isPinned` | Boolean | Pinned in layout? |
|
|
87
|
-
| `isPresenting` | Boolean | Screen sharing? |
|
|
88
|
-
| `raisedHandTimestamp` | Long | 0 if not raised |
|
|
89
|
-
|
|
90
|
-
### Show/Hide Participant List Button
|
|
91
|
-
|
|
92
|
-
```kotlin
|
|
93
|
-
val sessionSettings = CometChatCalls.SessionSettingsBuilder()
|
|
94
|
-
.hideParticipantListButton(false) // show participant list
|
|
95
|
-
.hideRaiseHandButton(false) // show raise hand
|
|
96
|
-
.build()
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Gotchas
|
|
100
|
-
|
|
101
|
-
- By default, **all participants** have moderator access (can mute/pause others)
|
|
102
|
-
- Implement role-based restrictions in your app logic if needed
|
|
103
|
-
- Pinning only affects **your local view** — other participants can pin independently
|
|
104
|
-
- `unpinParticipant()` takes no arguments — unpins whoever is currently pinned
|
|
105
|
-
- `raisedHandTimestamp > 0` means hand is raised
|
|
106
|
-
- There is no "kick" API — only mute and pause video
|
|
107
|
-
|
|
108
|
-
## Sample App Reference
|
|
109
|
-
|
|
110
|
-
- `CallActivity.kt` — `setupCallListeners()` with `ButtonClickListener`
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: picture-in-picture
|
|
3
|
-
description: Enable Picture-in-Picture mode for calls. Use when implementing PiP, floating call window, auto-PiP on home press, or PiP layout events. Triggers on "picture in picture", "PiP", "pip mode", "floating window".
|
|
4
|
-
inclusion: manual
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# CometChat Calls SDK v5 — Picture-in-Picture
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
PiP lets users continue calls in a floating window while using other apps. Your app manages Android's PiP APIs; the Calls SDK adjusts the call UI layout to fit the smaller window.
|
|
12
|
-
|
|
13
|
-
## Prerequisites
|
|
14
|
-
|
|
15
|
-
- Android 8.0+ (API 26+)
|
|
16
|
-
- Active call session
|
|
17
|
-
|
|
18
|
-
## Key Imports
|
|
19
|
-
|
|
20
|
-
```kotlin
|
|
21
|
-
import android.app.PictureInPictureParams
|
|
22
|
-
import android.util.Rational
|
|
23
|
-
import com.cometchat.calls.core.CallSession
|
|
24
|
-
import com.cometchat.calls.listeners.LayoutListener
|
|
25
|
-
import com.cometchat.calls.model.LayoutType
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Implementation
|
|
29
|
-
|
|
30
|
-
### Manifest Configuration
|
|
31
|
-
|
|
32
|
-
```xml
|
|
33
|
-
<activity
|
|
34
|
-
android:name=".CallActivity"
|
|
35
|
-
android:supportsPictureInPicture="true"
|
|
36
|
-
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" />
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Enable/Disable PiP Layout
|
|
40
|
-
|
|
41
|
-
```kotlin
|
|
42
|
-
val callSession = CallSession.getInstance()
|
|
43
|
-
|
|
44
|
-
// Tell SDK to adjust UI for PiP
|
|
45
|
-
callSession.enablePictureInPictureLayout()
|
|
46
|
-
|
|
47
|
-
// Restore full UI
|
|
48
|
-
callSession.disablePictureInPictureLayout()
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Auto-Enter PiP on Home Press
|
|
52
|
-
|
|
53
|
-
```kotlin
|
|
54
|
-
override fun onUserLeaveHint() {
|
|
55
|
-
super.onUserLeaveHint()
|
|
56
|
-
if (CallSession.getInstance().isSessionActive) {
|
|
57
|
-
enterPictureInPictureMode(
|
|
58
|
-
PictureInPictureParams.Builder()
|
|
59
|
-
.setAspectRatio(Rational(16, 9))
|
|
60
|
-
.build()
|
|
61
|
-
)
|
|
62
|
-
CallSession.getInstance().enablePictureInPictureLayout()
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Handle PiP Mode Changes
|
|
68
|
-
|
|
69
|
-
```kotlin
|
|
70
|
-
override fun onPictureInPictureModeChanged(isInPiPMode: Boolean, config: Configuration) {
|
|
71
|
-
super.onPictureInPictureModeChanged(isInPiPMode, config)
|
|
72
|
-
if (isInPiPMode) {
|
|
73
|
-
CallSession.getInstance().enablePictureInPictureLayout()
|
|
74
|
-
} else {
|
|
75
|
-
CallSession.getInstance().disablePictureInPictureLayout()
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Listen for PiP Events
|
|
81
|
-
|
|
82
|
-
```kotlin
|
|
83
|
-
callSession.addLayoutListener(this, object : LayoutListener() {
|
|
84
|
-
override fun onPictureInPictureLayoutEnabled() {
|
|
85
|
-
// Hide custom overlays/controls
|
|
86
|
-
}
|
|
87
|
-
override fun onPictureInPictureLayoutDisabled() {
|
|
88
|
-
// Show custom overlays/controls
|
|
89
|
-
}
|
|
90
|
-
override fun onCallLayoutChanged(layoutType: LayoutType) {}
|
|
91
|
-
override fun onParticipantListVisible() {}
|
|
92
|
-
override fun onParticipantListHidden() {}
|
|
93
|
-
})
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Gotchas
|
|
97
|
-
|
|
98
|
-
- The SDK only adjusts the **call UI layout** — your app must call `enterPictureInPictureMode()` itself
|
|
99
|
-
- `configChanges` in manifest prevents activity restart during PiP transitions
|
|
100
|
-
- PiP has no effect on Android < 8.0
|
|
101
|
-
- Hide custom controls in PiP mode — they won't be usable in the small window
|
|
102
|
-
- Use `isSessionActive` check before entering PiP to avoid errors
|
|
103
|
-
|
|
104
|
-
## Sample App Reference
|
|
105
|
-
|
|
106
|
-
- `CallActivity.kt` — Call activity that could be extended with PiP support
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
# Raise hand on Android V5 (Java + Kotlin Views)
|
|
2
|
-
|
|
3
|
-
Native CometChat Calls SDK for Android. The shape mirrors web (raise/lower + listener events + button-hide flag); Android-specific is the listener attachment lifecycle (Activity/Fragment) + accessibility via `View.announceForAccessibility`.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/android/raise-hand
|
|
6
|
-
**Read first:** `cometchat-react-calls/references/raise-hand.md` — UX shape + anti-patterns.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## SDK API
|
|
11
|
-
|
|
12
|
-
```kotlin
|
|
13
|
-
import com.cometchat.calls.core.CometChatCalls
|
|
14
|
-
import com.cometchat.calls.core.CallSession
|
|
15
|
-
import com.cometchat.calls.listeners.ParticipantEventListener
|
|
16
|
-
import com.cometchat.calls.model.Participant
|
|
17
|
-
import com.cometchat.calls.model.SessionType
|
|
18
|
-
|
|
19
|
-
// Local user — raiseHand / lowerHand are instance methods on the CallSession singleton.
|
|
20
|
-
CallSession.getInstance().raiseHand()
|
|
21
|
-
CallSession.getInstance().lowerHand()
|
|
22
|
-
|
|
23
|
-
// Listener — raise/lower hand are participant events in v5.
|
|
24
|
-
// Register on the CallSession instance from joinSession's onSuccess callback.
|
|
25
|
-
callSession.addParticipantEventListener(this, object : ParticipantEventListener() {
|
|
26
|
-
override fun onParticipantHandRaised(participant: Participant) {
|
|
27
|
-
// participant.uid, participant.name
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
override fun onParticipantHandLowered(participant: Participant) {
|
|
31
|
-
// ...
|
|
32
|
-
}
|
|
33
|
-
// ... other participant event handlers
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
// Settings flag
|
|
37
|
-
val settings = CometChatCalls.SessionSettingsBuilder()
|
|
38
|
-
.setSessionType(SessionType.VIDEO)
|
|
39
|
-
.hideRaiseHandButton(true)
|
|
40
|
-
.build()
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
For **Java**:
|
|
44
|
-
|
|
45
|
-
```java
|
|
46
|
-
CallSession.getInstance().raiseHand();
|
|
47
|
-
CallSession.getInstance().lowerHand();
|
|
48
|
-
|
|
49
|
-
callSession.addParticipantEventListener(this, new ParticipantEventListener() {
|
|
50
|
-
@Override
|
|
51
|
-
public void onParticipantHandRaised(Participant participant) { /* ... */ }
|
|
52
|
-
|
|
53
|
-
@Override
|
|
54
|
-
public void onParticipantHandLowered(Participant participant) { /* ... */ }
|
|
55
|
-
// ...
|
|
56
|
-
});
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Lifecycle: where to attach the listener
|
|
62
|
-
|
|
63
|
-
For a single-Activity call surface:
|
|
64
|
-
|
|
65
|
-
```kotlin
|
|
66
|
-
class CallActivity : AppCompatActivity() {
|
|
67
|
-
|
|
68
|
-
private lateinit var raiseHandViewModel: RaiseHandViewModel
|
|
69
|
-
private val callListener = object : ParticipantEventListener() {
|
|
70
|
-
override fun onParticipantHandRaised(p: Participant) {
|
|
71
|
-
raiseHandViewModel.onRaised(p)
|
|
72
|
-
}
|
|
73
|
-
override fun onParticipantHandLowered(p: Participant) {
|
|
74
|
-
raiseHandViewModel.onLowered(p)
|
|
75
|
-
}
|
|
76
|
-
// ...
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
override fun onCreate(savedInstanceState: Bundle?) {
|
|
80
|
-
super.onCreate(savedInstanceState)
|
|
81
|
-
raiseHandViewModel = ViewModelProvider(this)[RaiseHandViewModel::class.java]
|
|
82
|
-
// Register on the CallSession instance (from joinSession's onSuccess) when
|
|
83
|
-
// the session starts: callSession.addParticipantEventListener(this, callListener)
|
|
84
|
-
// (rule 1.7 in cometchat-android-v5-calls). Listeners are lifecycle-aware.
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
override fun onDestroy() {
|
|
88
|
-
super.onDestroy()
|
|
89
|
-
// Listeners are lifecycle-aware (bound to the Activity passed as the first
|
|
90
|
-
// arg) and auto-removed on destroy; otherwise leaveSession() tears them down.
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
For Fragment-hosted calls, attach in `onViewCreated`, detach in `onDestroyView`.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## ViewModel pattern (Kotlin coroutines + StateFlow)
|
|
100
|
-
|
|
101
|
-
```kotlin
|
|
102
|
-
data class RaisedParticipant(val uid: String, val name: String, val raisedAt: Long)
|
|
103
|
-
|
|
104
|
-
data class RaiseHandUiState(
|
|
105
|
-
val localRaised: Boolean = false,
|
|
106
|
-
val raised: List<RaisedParticipant> = emptyList(),
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
class RaiseHandViewModel : ViewModel() {
|
|
110
|
-
private val _state = MutableStateFlow(RaiseHandUiState())
|
|
111
|
-
val state: StateFlow<RaiseHandUiState> = _state
|
|
112
|
-
|
|
113
|
-
fun toggle() {
|
|
114
|
-
if (_state.value.localRaised) {
|
|
115
|
-
CallSession.getInstance().lowerHand()
|
|
116
|
-
} else {
|
|
117
|
-
CallSession.getInstance().raiseHand()
|
|
118
|
-
}
|
|
119
|
-
_state.update { it.copy(localRaised = !it.localRaised) }
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
fun onRaised(p: Participant) {
|
|
123
|
-
val entry = RaisedParticipant(p.uid, p.name, System.currentTimeMillis())
|
|
124
|
-
_state.update { state ->
|
|
125
|
-
val next = state.raised.filter { it.uid != p.uid } + entry
|
|
126
|
-
state.copy(raised = next.sortedBy { it.raisedAt })
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
fun onLowered(p: Participant) {
|
|
131
|
-
_state.update { state ->
|
|
132
|
-
state.copy(raised = state.raised.filter { it.uid != p.uid })
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
`StateFlow` is the canonical Android single-source-of-truth pattern. Activities collect via `viewLifecycleOwner.lifecycleScope.launch` + `repeatOnLifecycle(STARTED)`.
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Toggle button
|
|
143
|
-
|
|
144
|
-
```kotlin
|
|
145
|
-
class RaiseHandButton @JvmOverloads constructor(
|
|
146
|
-
context: Context,
|
|
147
|
-
attrs: AttributeSet? = null,
|
|
148
|
-
) : MaterialButton(context, attrs) {
|
|
149
|
-
|
|
150
|
-
init {
|
|
151
|
-
setOnClickListener {
|
|
152
|
-
val raised = (tag as? Boolean) ?: false
|
|
153
|
-
tag = !raised
|
|
154
|
-
// VM toggle handled by Activity wiring — see below
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
fun bind(viewModel: RaiseHandViewModel, lifecycleOwner: LifecycleOwner) {
|
|
159
|
-
setOnClickListener {
|
|
160
|
-
viewModel.toggle()
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
lifecycleOwner.lifecycleScope.launch {
|
|
164
|
-
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
165
|
-
viewModel.state.collect { state ->
|
|
166
|
-
text = if (state.localRaised) "Lower" else "Raise"
|
|
167
|
-
icon = ContextCompat.getDrawable(context,
|
|
168
|
-
if (state.localRaised) R.drawable.ic_hand_raised_filled
|
|
169
|
-
else R.drawable.ic_hand_raised)
|
|
170
|
-
contentDescription = if (state.localRaised) "Lower hand" else "Raise hand"
|
|
171
|
-
// a11y announcement on state change
|
|
172
|
-
announceForAccessibility(if (state.localRaised) "Hand raised" else "Hand lowered")
|
|
173
|
-
isSelected = state.localRaised
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
`announceForAccessibility` is the Android equivalent of web's `aria-live` and iOS's `UIAccessibility.post(.announcement, ...)`. TalkBack picks it up.
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Raised-hands BottomSheet
|
|
186
|
-
|
|
187
|
-
```kotlin
|
|
188
|
-
class RaisedHandsBottomSheet : BottomSheetDialogFragment() {
|
|
189
|
-
|
|
190
|
-
private val viewModel: RaiseHandViewModel by activityViewModels()
|
|
191
|
-
|
|
192
|
-
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
|
193
|
-
val view = inflater.inflate(R.layout.bottomsheet_raised_hands, container, false)
|
|
194
|
-
val recyclerView = view.findViewById<RecyclerView>(R.id.raised_hands_list)
|
|
195
|
-
val adapter = RaisedHandsAdapter()
|
|
196
|
-
recyclerView.adapter = adapter
|
|
197
|
-
|
|
198
|
-
viewLifecycleOwner.lifecycleScope.launch {
|
|
199
|
-
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
200
|
-
viewModel.state.collect { state ->
|
|
201
|
-
adapter.submitList(state.raised)
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return view
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
Use `BottomSheetDialogFragment` from `com.google.android.material.bottomsheet` — the canonical Material Design pattern for raised-hands roster on phones.
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Anti-patterns
|
|
216
|
-
|
|
217
|
-
Web sister reference rules apply, plus Android-specific:
|
|
218
|
-
|
|
219
|
-
1. **Listener in `init { }` of an Activity.** Activity init runs before `onCreate`; SDK might not be ready. Attach in `onCreate` or later.
|
|
220
|
-
2. **Skipping `repeatOnLifecycle(STARTED)`.** Without it, `StateFlow.collect` runs even when Activity is paused — burns CPU during background.
|
|
221
|
-
3. **Forgetting `lifecycleScope`.** Detached coroutines leak across activity destruction.
|
|
222
|
-
4. **`MutableStateFlow.value = ...` from background thread without `_state.update`.** Race conditions on the list. Always use `update { ... }` for atomic state transitions.
|
|
223
|
-
5. **`announceForAccessibility` from `setOnClickListener`** before the visual state has changed. Order matters — update the View first, then announce.
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## Verification checklist
|
|
228
|
-
|
|
229
|
-
- [ ] `RaiseHandViewModel` uses `StateFlow` (not LiveData) for the call state
|
|
230
|
-
- [ ] `ParticipantEventListener` attached on the `CallSession` at session start (lifecycle-aware; also torn down by `leaveSession()`)
|
|
231
|
-
- [ ] `repeatOnLifecycle(Lifecycle.State.STARTED)` wraps every collect
|
|
232
|
-
- [ ] Toggle button has `contentDescription` + `isSelected` set
|
|
233
|
-
- [ ] `announceForAccessibility` on state change
|
|
234
|
-
- [ ] `hideRaiseHandButton(true)` in SessionSettingsBuilder if custom UI
|
|
235
|
-
- [ ] BottomSheetDialogFragment for raised-hands roster (phones) OR side panel (tablets)
|
|
236
|
-
- [ ] Real-device smoke: 3 Android phones in same call, 2 raise → host's sheet shows both
|
|
237
|
-
- [ ] TalkBack smoke: hand raise + lower announces correctly
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## Pointers
|
|
242
|
-
|
|
243
|
-
- `cometchat-react-calls/references/raise-hand.md` — sister reference (UX shape)
|
|
244
|
-
- `cometchat-android-v5-calls` SKILL.md — V5 hard rules
|
|
245
|
-
- `references/participant-management.md` — group call moderation patterns
|
|
246
|
-
- `references/custom-ui.md` — Android custom call UI
|
|
247
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/android/raise-hand
|
|
248
|
-
- For V6 (Compose / Kotlin Views split): `cometchat-android-v6-calls/references/raise-hand.md`
|