@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.
Files changed (490) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +36 -0
  4. package/LICENSE +21 -0
  5. package/README.md +41 -163
  6. package/RULES.md +114 -0
  7. package/bin/cometchat-skills.mjs +1180 -0
  8. package/bin/legacy-skills.json +95 -0
  9. package/catalogs/android-v6.json +1646 -0
  10. package/catalogs/flutter-v6.json +651 -0
  11. package/catalogs/ios-v5.json +1383 -0
  12. package/catalogs/rn-calls-v5.json +134 -0
  13. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  14. package/catalogs/rn-sdk-v4.json +672 -0
  15. package/catalogs/rn-v5.json +449 -0
  16. package/catalogs/rn-v5.symbols.txt +216 -0
  17. package/catalogs/sdk-android-v5.json +514 -0
  18. package/contracts.android-calls-v5.json +122 -0
  19. package/contracts.android-v6.json +135 -0
  20. package/contracts.angular-v5.json +694 -0
  21. package/contracts.flutter-calls-v5.json +77 -0
  22. package/contracts.flutter-v6.json +126 -0
  23. package/contracts.ios-calls-v5.json +67 -0
  24. package/contracts.ios-v5.json +436 -0
  25. package/contracts.json +82 -0
  26. package/contracts.rn-calls-v5.json +77 -0
  27. package/contracts.rn-v5.json +727 -0
  28. package/contracts.sdk-android-v5.json +15 -0
  29. package/contracts.web-calls-v5.json +45 -0
  30. package/features.android-calls-v5.json +246 -0
  31. package/features.android-v6.json +65 -0
  32. package/features.angular-v5.json +521 -0
  33. package/features.flutter-calls-v5.json +286 -0
  34. package/features.flutter-v6.json +484 -0
  35. package/features.ios-calls-v5.json +236 -0
  36. package/features.ios-v5.json +573 -0
  37. package/features.json +61 -0
  38. package/features.rn-calls-v5.json +187 -0
  39. package/features.rn-v5.json +614 -0
  40. package/features.sdk-android-v5.json +40 -0
  41. package/features.sdk-jsv4.json +24 -0
  42. package/features.web-calls-v5.json +108 -0
  43. package/package.json +151 -74
  44. package/peers.yaml +312 -0
  45. package/registry/README.md +31 -0
  46. package/registry/android-calls-v5.json +54 -0
  47. package/registry/android-v6.json +137 -0
  48. package/registry/angular-v5.json +114 -0
  49. package/registry/flutter-calls-v5.json +54 -0
  50. package/registry/flutter-v6.json +119 -0
  51. package/registry/ios-calls-v5.json +59 -0
  52. package/registry/ios-v5.json +97 -0
  53. package/registry/rn-calls-v5.json +59 -0
  54. package/registry/rn-v5.json +129 -0
  55. package/registry/sdk-android-v5.json +53 -0
  56. package/registry/sdk-jsv4.json +53 -0
  57. package/registry/web-calls-v5.json +54 -0
  58. package/registry/web-v7.json +99 -0
  59. package/skills/cometchat/SKILL.md +42 -2096
  60. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  67. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  68. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  69. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  70. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  71. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  72. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  73. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  74. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  75. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  76. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  77. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  78. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  79. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  80. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  81. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  82. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  83. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  84. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  85. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  86. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  87. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  88. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  89. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  90. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  91. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  92. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  93. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  94. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  95. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  96. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  97. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  98. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  99. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  100. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  101. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  102. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  103. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  104. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  105. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  106. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  107. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  108. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  109. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  110. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  111. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  112. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  113. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  114. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  115. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  116. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  117. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  118. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  119. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  120. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  121. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  122. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  123. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  127. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  128. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  129. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  130. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  131. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  132. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  133. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  134. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  135. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  136. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  137. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  138. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  139. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  140. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  141. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  142. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  143. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  144. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  145. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  146. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  147. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  148. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  149. package/skills/cometchat-ios-components/SKILL.md +44 -834
  150. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  151. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  152. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  153. package/skills/cometchat-ios-core/references/install.md +23 -0
  154. package/skills/cometchat-ios-core/references/layout.md +186 -0
  155. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  156. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  157. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  158. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  159. package/skills/cometchat-ios-features/SKILL.md +29 -738
  160. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  161. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  162. package/skills/cometchat-ios-push/SKILL.md +24 -602
  163. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  164. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  165. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  166. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  167. package/skills/cometchat-onboarding/SKILL.md +89 -0
  168. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  169. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  170. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  171. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  172. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  173. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  174. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  175. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  176. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  177. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  178. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  179. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  180. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  181. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  182. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  183. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  184. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  185. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  186. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  187. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  188. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  189. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  190. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  191. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  192. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  193. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  194. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  195. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  196. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  198. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  199. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  200. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  201. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  202. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  203. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  204. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  205. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  206. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  207. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  208. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  209. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  210. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  211. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  212. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  213. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  214. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  215. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  216. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  217. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  218. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  219. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  220. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  221. package/test-suite/README.md +70 -0
  222. package/test-suite/catalogs/android-calls-v5.json +830 -0
  223. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  224. package/test-suite/catalogs/android-v6.json +1646 -0
  225. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  226. package/test-suite/catalogs/angular-v5.json +7587 -0
  227. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  228. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  229. package/test-suite/catalogs/flutter-v6.json +651 -0
  230. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  231. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  232. package/test-suite/catalogs/ios-v5.json +1383 -0
  233. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  234. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  235. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  236. package/test-suite/catalogs/rn-v5.json +449 -0
  237. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  238. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  239. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  240. package/test-suite/catalogs/web-calls-v5.json +195 -0
  241. package/test-suite/catalogs/web-v7.json +1243 -0
  242. package/test-suite/scripts/build-registry.mjs +113 -0
  243. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  244. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  245. package/test-suite/scripts/lint-skills.mjs +909 -0
  246. package/test-suite/scripts/measure-tokens.mjs +169 -0
  247. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  248. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  249. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  250. package/test-suite/scripts/verify-catalog.mjs +242 -0
  251. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  252. package/test-suite/scripts/verify-detection.mjs +178 -0
  253. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  254. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  255. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  256. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  257. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  258. package/test-suite/typecheck/angular-v5/package.json +21 -0
  259. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  260. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  261. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  262. package/test-suite/typecheck/web-v7/package.json +18 -0
  263. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  264. package/bin/install.js +0 -1003
  265. package/skills/.claude-plugin/marketplace.json +0 -86
  266. package/skills/cometchat/references/asking-questions.md +0 -48
  267. package/skills/cometchat-a11y/SKILL.md +0 -477
  268. package/skills/cometchat-android-v5/SKILL.md +0 -121
  269. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  270. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  271. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  272. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  273. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  274. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  275. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  276. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  277. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  278. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  279. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  280. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  281. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  282. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  283. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  284. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  285. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  286. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  287. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  288. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  289. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  290. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  291. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  292. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  293. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  294. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  295. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  296. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  297. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  298. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  299. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  300. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  301. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  302. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  303. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  304. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  305. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  306. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  307. package/skills/cometchat-android-v6/SKILL.md +0 -108
  308. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  309. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  310. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  311. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  312. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  313. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  314. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  315. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  316. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  317. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  318. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  319. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  320. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  321. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  322. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  323. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  324. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  325. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  326. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  327. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  328. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  329. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  330. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  331. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  332. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  333. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  334. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  335. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  336. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  337. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  338. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  339. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  340. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  341. package/skills/cometchat-angular-components/SKILL.md +0 -235
  342. package/skills/cometchat-angular-core/SKILL.md +0 -386
  343. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  344. package/skills/cometchat-angular-features/SKILL.md +0 -329
  345. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  346. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  347. package/skills/cometchat-angular-production/SKILL.md +0 -564
  348. package/skills/cometchat-angular-push/SKILL.md +0 -389
  349. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  350. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  351. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  352. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  353. package/skills/cometchat-calls/SKILL.md +0 -364
  354. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  355. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  356. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  357. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  358. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  359. package/skills/cometchat-components/SKILL.md +0 -1142
  360. package/skills/cometchat-core/SKILL.md +0 -1048
  361. package/skills/cometchat-customization/SKILL.md +0 -580
  362. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  363. package/skills/cometchat-features/SKILL.md +0 -861
  364. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  365. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  366. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  367. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  368. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  369. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  370. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  371. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  372. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  373. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  374. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  375. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  376. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  377. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  378. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  379. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  380. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  381. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  382. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  383. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  384. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  385. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  386. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  387. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  388. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  389. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  390. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  391. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  392. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  393. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  394. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  395. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  396. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  397. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  398. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  399. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  400. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  401. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  402. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  403. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  404. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  405. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  406. package/skills/cometchat-i18n/SKILL.md +0 -419
  407. package/skills/cometchat-ios/SKILL.md +0 -325
  408. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  409. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  410. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  411. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  412. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  413. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  414. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  415. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  416. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  417. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  418. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  419. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  420. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  421. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  422. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  423. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  424. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  425. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  426. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  427. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  428. package/skills/cometchat-ios-production/SKILL.md +0 -738
  429. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  430. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  431. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  432. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  433. package/skills/cometchat-native-calls/SKILL.md +0 -671
  434. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  435. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  436. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  437. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  438. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  439. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  440. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  441. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  442. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  443. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  444. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  445. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  446. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  447. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  448. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  449. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  450. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  451. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  452. package/skills/cometchat-native-components/SKILL.md +0 -628
  453. package/skills/cometchat-native-core/SKILL.md +0 -679
  454. package/skills/cometchat-native-customization/SKILL.md +0 -716
  455. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  456. package/skills/cometchat-native-features/SKILL.md +0 -638
  457. package/skills/cometchat-native-placement/SKILL.md +0 -509
  458. package/skills/cometchat-native-production/SKILL.md +0 -700
  459. package/skills/cometchat-native-push/SKILL.md +0 -594
  460. package/skills/cometchat-native-testing/SKILL.md +0 -582
  461. package/skills/cometchat-native-theming/SKILL.md +0 -681
  462. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  463. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  464. package/skills/cometchat-placement/SKILL.md +0 -1360
  465. package/skills/cometchat-production/SKILL.md +0 -1027
  466. package/skills/cometchat-react-calls/SKILL.md +0 -752
  467. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  468. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  469. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  470. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  471. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  472. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  473. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  474. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  475. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  476. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  477. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  478. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  479. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  480. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  481. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  482. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  483. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  484. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  485. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  486. package/skills/cometchat-react-push/SKILL.md +0 -634
  487. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  488. package/skills/cometchat-react-testing/SKILL.md +0 -413
  489. package/skills/cometchat-theming/SKILL.md +0 -498
  490. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,87 +0,0 @@
1
- # Android V6 — advanced in-call features (Recording, PiP, Screen-share)
2
-
3
- These use the same `calls-sdk-android:5.x` the rest of V6 calls relies on (the W1 peer dep). Every symbol below is verified against the decompiled `calls-sdk-android` 5.x API. Works in both the Compose and Kotlin-Views surfaces — drive UI state from a ViewModel; the SDK calls are surface-agnostic.
4
-
5
- **Session handle:** `CallSession.getInstance()` returns the active `CallSession` singleton. Several controls also have static convenience methods directly on `CometChatCalls`.
6
-
7
- ---
8
-
9
- ## 1. Recording
10
-
11
- Server-gated — recording must be enabled for the app in the CometChat dashboard first; otherwise the calls below no-op.
12
-
13
- ```kotlin
14
- // Start / stop on demand (static convenience)
15
- CometChatCalls.startRecording()
16
- CometChatCalls.stopRecording()
17
-
18
- // …or on the active session
19
- CallSession.getInstance().startRecording()
20
- CallSession.getInstance().stopRecording()
21
- ```
22
-
23
- **Auto-start + hide the default button** at session config time (both builders expose these):
24
-
25
- ```kotlin
26
- val sessionSettings = CometChatCalls.SessionSettingsBuilder(activity) // or no-arg SessionSettingsBuilder()
27
- .enableAutoStartRecording(true) // begin recording when the call connects
28
- .hideRecordingButton(false) // keep the kit's built-in record toggle (default UI)
29
- .build()
30
- ```
31
-
32
- **React to recording state** via `MediaEventsListener` (registered the same way as the other call event listeners in this skill):
33
-
34
- ```kotlin
35
- object : MediaEventsListener() {
36
- override fun onRecordingStarted() { /* show REC indicator */ }
37
- override fun onRecordingStopped() { /* hide REC indicator */ }
38
- }
39
- ```
40
-
41
- Verified: `CometChatCalls.startRecording()/stopRecording()` (static + `CallSession` instance), `SessionSettingsBuilder.enableAutoStartRecording(boolean)` + `hideRecordingButton(boolean)` (NOTE: `CallSettingsBuilder` is the deprecated v4 name, replaced by `SessionSettingsBuilder` in calls-sdk v5 — it no longer exists on android-v6), `MediaEventsListener.onRecordingStarted()/onRecordingStopped()`.
42
-
43
- ---
44
-
45
- ## 2. Picture-in-Picture
46
-
47
- Two distinct things — don't confuse them:
48
-
49
- - **In-call compact layout** (the SDK shrinks the call grid to a floating tile *inside your app*): `CallSession.enablePictureInPictureLayout()` / `disablePictureInPictureLayout()`.
50
- - **System PiP** (the OS floats the call over other apps when the user leaves): static `CometChatCalls.enterPIPMode()` / `exitPIPMode()`. For OS-level PiP you must also declare the Activity `android:supportsPictureInPicture="true"` in the manifest and call `enterPIPMode()` from `onUserLeaveHint()`.
51
-
52
- ```kotlin
53
- // in-call compact layout
54
- CallSession.getInstance().enablePictureInPictureLayout()
55
- CallSession.getInstance().disablePictureInPictureLayout()
56
-
57
- // system PiP (manifest: android:supportsPictureInPicture="true")
58
- override fun onUserLeaveHint() {
59
- super.onUserLeaveHint()
60
- CometChatCalls.enterPIPMode()
61
- }
62
- ```
63
-
64
- Verified: `CallSession.enablePictureInPictureLayout()/disablePictureInPictureLayout()`, static `CometChatCalls.enterPIPMode()/exitPIPMode()`.
65
-
66
- ---
67
-
68
- ## 3. Screen sharing — receive only
69
-
70
- **Android cannot locally INITIATE screen share** (that's a web-only capability). It *renders a remote participant's* shared screen automatically inside the call grid. You only wire a listener to react to it (e.g. switch to spotlight layout, show a banner):
71
-
72
- ```kotlin
73
- object : ParticipantEventListener() {
74
- override fun onParticipantStartedScreenShare(participant: Participant) {
75
- // optional: CallSession.getInstance().setLayout(LayoutType.SPOTLIGHT)
76
- }
77
- override fun onParticipantStoppedScreenShare(participant: Participant) { }
78
- }
79
- ```
80
-
81
- Verified: `ParticipantEventListener.onParticipantStartedScreenShare(Participant)/onParticipantStoppedScreenShare(Participant)`. There is NO local `startScreenShare` symbol in `calls-sdk-android` 5.x — do not author one.
82
-
83
- ---
84
-
85
- ## Audio modes (cross-reference)
86
-
87
- Speaker / earpiece / Bluetooth routing is already covered in `references/device-management.md` (`setAudioMode(AudioMode.SPEAKER/EARPIECE/BLUETOOTH/HEADPHONES)` + `MediaEventsListener.onAudioModeChanged`). Virtual Background is **not supported** by `calls-sdk-android` 5.x (no symbol) — it is a web / React Native / Flutter capability only; do not author it for Android.
@@ -1,100 +0,0 @@
1
- # Call layouts on Android V6 (Compose)
2
-
3
- Same SDK API as V5; V6 adds Compose-native `SegmentedButton` for the switcher.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/android/call-layouts
6
- **Read first:** `cometchat-android-v5-calls/references/call-layouts.md` — full Java/Kotlin SDK API.
7
-
8
- ---
9
-
10
- ## ViewModel
11
-
12
- Layout is the `LayoutType` enum (`TILE` / `SIDEBAR` / `SPOTLIGHT`) — there is no `CometChatCallsConstants.LAYOUT_*` and `setLayout` is an instance method on the `CallSession` singleton (not a static on `CometChatCalls`).
13
-
14
- ```kotlin
15
- import com.cometchat.calls.core.CallSession
16
- import com.cometchat.calls.listeners.LayoutListener
17
- import com.cometchat.calls.model.LayoutType
18
-
19
- class CallLayoutViewModel : ViewModel() {
20
- private val _layout = MutableStateFlow(LayoutType.TILE)
21
- val layout: StateFlow<LayoutType> = _layout
22
-
23
- fun set(next: LayoutType) {
24
- CallSession.getInstance().setLayout(next)
25
- _layout.value = next
26
- }
27
-
28
- fun onSDKChanged(next: LayoutType) {
29
- _layout.value = next // already updated by kit's switcher
30
- }
31
- }
32
-
33
- // Register a LayoutListener via CallSession.addLayoutListener(lifecycleOwner, ...).
34
- // onCallLayoutChanged is a LayoutListener member (NOT a CometChatCallsEventsListener one).
35
- CallSession.getInstance().addLayoutListener(lifecycleOwner, object : LayoutListener() {
36
- override fun onCallLayoutChanged(layout: LayoutType) {
37
- Handler(Looper.getMainLooper()).post {
38
- callLayoutViewModel.onSDKChanged(layout)
39
- }
40
- }
41
- })
42
- ```
43
-
44
- ---
45
-
46
- ## Compose switcher (SingleChoiceSegmentedButtonRow)
47
-
48
- ```kotlin
49
- @OptIn(ExperimentalMaterial3Api::class)
50
- @Composable
51
- fun LayoutSwitcher(viewModel: CallLayoutViewModel = viewModel()) {
52
- val layout by viewModel.layout.collectAsStateWithLifecycle()
53
-
54
- val options = listOf(
55
- LayoutType.TILE to "Tile",
56
- LayoutType.SIDEBAR to "Sidebar",
57
- LayoutType.SPOTLIGHT to "Spotlight",
58
- )
59
-
60
- SingleChoiceSegmentedButtonRow {
61
- options.forEachIndexed { index, (value, label) ->
62
- SegmentedButton(
63
- selected = layout == value,
64
- onClick = { viewModel.set(value) },
65
- shape = SegmentedButtonDefaults.itemShape(index = index, count = options.size),
66
- ) {
67
- Text(label)
68
- }
69
- }
70
- }
71
- }
72
- ```
73
-
74
- ---
75
-
76
- ## Anti-patterns
77
-
78
- V5 sister rules apply, plus Compose-specific:
79
-
80
- 1. **`collectAsState()` instead of `collectAsStateWithLifecycle()`.** State updates while paused → wasted work.
81
- 2. **`Row` of `OutlinedButton`s instead of `SegmentedButton`.** Visually similar but missing the radio-group accessibility semantics; TalkBack announces it as 3 separate buttons.
82
- 3. **Calling `setLayout` directly from the composable.** Move it to ViewModel — survives config changes.
83
-
84
- ---
85
-
86
- ## Verification checklist
87
-
88
- - [ ] `CallLayoutViewModel` exposes `StateFlow<LayoutType>`
89
- - [ ] `SingleChoiceSegmentedButtonRow` wraps the layout options
90
- - [ ] `collectAsStateWithLifecycle` (not `collectAsState`)
91
- - [ ] `LayoutListener.onCallLayoutChanged` (registered via `addLayoutListener`) syncs the ViewModel on main thread
92
- - [ ] Real-device smoke: cycles all 3, survives rotation
93
-
94
- ---
95
-
96
- ## Pointers
97
-
98
- - `cometchat-android-v5-calls/references/call-layouts.md` — V5 sister (Views patterns)
99
- - `cometchat-android-v6-calls` SKILL.md
100
- - Canonical docs: https://www.cometchat.com/docs/calls/android/call-layouts
@@ -1,163 +0,0 @@
1
- # Call session — joinSession with no ringing (Android V6 / Compose)
2
-
3
- V6 uses the same SDK (`com.cometchat.calls-sdk-android`) as V5. The canonical SDK API surface is documented in the V5 sister; this file documents only the Compose-specific delta (bridging `AndroidView` to the SDK's `RelativeLayout` container).
4
-
5
- **Read first:**
6
- - `cometchat-android-v5-calls/references/call-session.md` — canonical SDK API (single-call `joinSession`, `SessionSettingsBuilder`, `SessionStatusListener`, `CometChatOngoingCallService`)
7
- - `cometchat-react-calls/references/call-session.md` — cross-platform architecture
8
-
9
- **Source of truth:** `calls-sdk-android-5/samples/sample-app/src/main/kotlin/com/cometchat/samplecalls/ui/activity/CallActivity.kt` (no Compose-specific upstream sample exists; the SDK surface is identical).
10
-
11
- ---
12
-
13
- ## Hard rules
14
-
15
- All V5 rules apply (single-call `joinSession(sessionId, settings, container, callback)`, `CometChatCalls.SessionSettingsBuilder()`, `SessionStatusListener` on the `CallSession` instance, `CometChatOngoingCallService.launch/abort`, runtime permissions, no Chat SDK for session-only). The V6 Compose-specific deltas:
16
-
17
- 1. **`AndroidView` with `remember`-stable factory** to host the SDK's `RelativeLayout` container. The factory MUST be wrapped in `remember { }` — re-creating the layout on every recomposition flickers / re-joins the session.
18
- 2. **`LaunchedEffect(sessionId)` to fire `joinSession` once**, not in a Composable body. Composable bodies re-run on recomposition; the SDK would join multiple times.
19
- 3. **`DisposableEffect` for cleanup**, NOT `LaunchedEffect`'s cleanup lambda. `LaunchedEffect`'s cleanup fires on key change too, not just final dispose. `DisposableEffect.onDispose` is the correct teardown hook.
20
- 4. **State observation via `mutableStateOf` set from listener callbacks** — the listener callbacks must hop to `Main` dispatcher (or use `runOnUiThread` from a hosting activity ref) before touching Compose state.
21
-
22
- ---
23
-
24
- ## Compose CallRoom
25
-
26
- ```kotlin
27
- @Composable
28
- fun CallRoom(sessionId: String, onLeft: () -> Unit) {
29
- val context = LocalContext.current
30
- val activity = context as Activity
31
- val containerRef = remember { mutableStateOf<RelativeLayout?>(null) }
32
- val joined = remember { mutableStateOf(false) }
33
- val callSession = remember { mutableStateOf<CallSession?>(null) }
34
-
35
- AndroidView(
36
- factory = { ctx ->
37
- RelativeLayout(ctx).apply {
38
- layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
39
- setBackgroundColor(android.graphics.Color.BLACK)
40
- containerRef.value = this
41
- }
42
- },
43
- modifier = Modifier.fillMaxSize(),
44
- )
45
-
46
- LaunchedEffect(sessionId) {
47
- if (joined.value) return@LaunchedEffect
48
- val container = containerRef.value ?: return@LaunchedEffect
49
- joined.value = true
50
-
51
- val sessionSettings = CometChatCalls.SessionSettingsBuilder()
52
- .setTitle("CometChat Meeting")
53
- .startVideoPaused(false)
54
- .startAudioMuted(false)
55
- .build()
56
-
57
- CometChatCalls.joinSession(
58
- sessionId,
59
- sessionSettings,
60
- container,
61
- object : CometChatCalls.CallbackListener<CallSession>() {
62
- override fun onSuccess(session: CallSession) {
63
- callSession.value = session
64
-
65
- // Single guarded termination handler — the v5 Calls SDK fires
66
- // onSessionLeft + onConnectionClosed in sequence on every hangup.
67
- // Without the guard, abort() + onLeft() fire 3 times (wasteful;
68
- // can race the composable's exit transition).
69
- val isTerminating = mutableStateOf(false)
70
- fun handleTermination() {
71
- if (isTerminating.value) return
72
- isTerminating.value = true
73
- activity.runOnUiThread {
74
- CometChatOngoingCallService.abort(activity)
75
- onLeft()
76
- }
77
- }
78
-
79
- session.addSessionStatusListener(activity, object : SessionStatusListener() {
80
- override fun onSessionJoined() {
81
- CometChatOngoingCallService.launch(activity)
82
- }
83
-
84
- override fun onSessionLeft() = handleTermination()
85
- override fun onConnectionClosed() = handleTermination()
86
- override fun onSessionTimedOut() = handleTermination()
87
-
88
- override fun onConnectionLost() {}
89
- override fun onConnectionRestored() {}
90
- })
91
-
92
- session.addButtonClickListener(activity, object : ButtonClickListener() {
93
- override fun onLeaveSessionButtonClicked() {
94
- val active = CallSession.getInstance()
95
- if (active.isSessionActive) active.leaveSession()
96
- // The listener chain calls handleTermination().
97
- }
98
- })
99
- }
100
-
101
- override fun onError(e: CometChatException) {
102
- activity.runOnUiThread {
103
- Toast.makeText(activity, "Failed to join: ${e.message}", Toast.LENGTH_LONG).show()
104
- onLeft()
105
- }
106
- }
107
- }
108
- )
109
- }
110
-
111
- DisposableEffect(sessionId) {
112
- onDispose {
113
- val active = CallSession.getInstance()
114
- if (active.isSessionActive) active.leaveSession()
115
- CometChatOngoingCallService.abort(activity)
116
- }
117
- }
118
- }
119
- ```
120
-
121
- **Why this shape:**
122
-
123
- - **`AndroidView` factory wrapped in `remember`** — Compose otherwise re-creates the `RelativeLayout` on every recomposition; the SDK's video tile dies along with it.
124
- - **`LaunchedEffect(sessionId)` for the join call** — Composable body re-runs on every recomposition; `LaunchedEffect` runs once per key. The `joined` guard handles configuration changes (rotation re-keys the effect).
125
- - **`runOnUiThread` inside listener callbacks** — SDK callbacks fire on background threads; touching Compose state from them throws without the dispatcher hop.
126
- - **`DisposableEffect.onDispose` for `leaveSession`** — `LaunchedEffect`'s cleanup runs on key change too. `DisposableEffect.onDispose` only runs when the composable actually leaves composition.
127
-
128
- ---
129
-
130
- ## Anti-patterns
131
-
132
- V5 sister rules apply, plus V6 Compose-specific:
133
-
134
- 1. **`AndroidView` without `remember { }` around the layout reference.** Each recomposition creates a new layout → call surface flickers, joinSession orphans previous container.
135
- 2. **`leaveSession()` in `LaunchedEffect`'s cleanup lambda.** Fires on every key change, not just dispose. Use `DisposableEffect.onDispose`.
136
- 3. **Skipping the `joined` guard.** Configuration changes (rotation) re-run `LaunchedEffect` with the same key (StrictMode-like behavior in dev); guard prevents double-join.
137
- 4. **Touching `mutableStateOf` from listener callbacks without `runOnUiThread`.** Compose state isn't thread-safe; race conditions corrupt state.
138
- 5. **Putting `joinSession` directly in the Composable body** (not in `LaunchedEffect`). Recomposition re-runs the call → multiple sessions.
139
-
140
- ---
141
-
142
- ## Verification checklist
143
-
144
- V5 checklist applies, plus Compose-specific:
145
-
146
- - [ ] `AndroidView` factory creates `RelativeLayout` once, stored via `remember { mutableStateOf<RelativeLayout?>(null) }`
147
- - [ ] `joinSession` fired inside `LaunchedEffect(sessionId)`, NOT in Composable body
148
- - [ ] `joined` flag guards re-entry on rotation / key re-trigger
149
- - [ ] `DisposableEffect.onDispose` calls `leaveSession` + `CometChatOngoingCallService.abort`
150
- - [ ] Listener callbacks use `activity.runOnUiThread { ... }` before touching Compose state
151
- - [ ] `onSessionLeft`, `onConnectionClosed`, `onSessionTimedOut` ALL fire the `onLeft` callback
152
- - [ ] **Standalone session-only:** no chat-sdk-android dependency
153
- - [ ] Real-device smoke: rotation doesn't double-join, dispose tears down cleanly, foreground-service notification clears
154
-
155
- ---
156
-
157
- ## Pointers
158
-
159
- - `cometchat-android-v5-calls/references/call-session.md` — canonical SDK API + Views patterns
160
- - `cometchat-android-v6-calls/SKILL.md` — V6 Compose architecture (W1–W5 workarounds for the kit)
161
- - `cometchat-android-v6-calls/references/share-invite.md` — App Links config
162
- - Upstream Android sample — `calls-sdk-android-5/samples/sample-app/src/main/kotlin/com/cometchat/samplecalls/ui/activity/CallActivity.kt`
163
- - Canonical docs: https://www.cometchat.com/docs/calls/android/join-session
@@ -1,172 +0,0 @@
1
- # Device management on Android V6
2
-
3
- V6 inherits the V5 SDK API for device management — `CallSession.muteAudio()` / `pauseVideo()` / `setAudioMode()` / camera flip. V5 has detailed audio-controls + video-controls references; this V6 reference covers the Compose-specific UI patterns.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/android/device-management
6
- **Read first:**
7
- - `cometchat-android-v5-calls/references/audio-controls.md` — full audio control SDK API (carries over)
8
- - `cometchat-android-v5-calls/references/video-controls.md` — camera flip + pause/resume
9
-
10
- ---
11
-
12
- ## Compose toggle controls
13
-
14
- ```kotlin
15
- @Composable
16
- fun CallControls(viewModel: CallControlsViewModel = viewModel()) {
17
- val state by viewModel.state.collectAsStateWithLifecycle()
18
-
19
- Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
20
- IconButton(onClick = { viewModel.toggleMic() }) {
21
- Icon(
22
- imageVector = if (state.micMuted) Icons.Filled.MicOff else Icons.Filled.Mic,
23
- contentDescription = if (state.micMuted) "Unmute microphone" else "Mute microphone",
24
- tint = if (state.micMuted) Color.Red else Color.White,
25
- )
26
- }
27
-
28
- IconButton(onClick = { viewModel.toggleCamera() }) {
29
- Icon(
30
- imageVector = if (state.cameraOff) Icons.Filled.VideocamOff else Icons.Filled.Videocam,
31
- contentDescription = if (state.cameraOff) "Turn on camera" else "Turn off camera",
32
- tint = if (state.cameraOff) Color.Red else Color.White,
33
- )
34
- }
35
-
36
- IconButton(onClick = { viewModel.flipCamera() }) {
37
- Icon(
38
- imageVector = Icons.Filled.FlipCameraIos,
39
- contentDescription = "Flip camera",
40
- tint = Color.White,
41
- )
42
- }
43
-
44
- IconButton(onClick = { viewModel.toggleSpeaker() }) {
45
- Icon(
46
- imageVector = when (state.audioMode) {
47
- AudioMode.SPEAKER -> Icons.Filled.VolumeUp
48
- AudioMode.EARPIECE -> Icons.Filled.PhoneInTalk
49
- AudioMode.BLUETOOTH -> Icons.Filled.Bluetooth
50
- },
51
- contentDescription = "Audio output: ${state.audioMode.name}",
52
- tint = Color.White,
53
- )
54
- }
55
- }
56
- }
57
- ```
58
-
59
- ---
60
-
61
- ## ViewModel
62
-
63
- ```kotlin
64
- data class CallControlsState(
65
- val micMuted: Boolean = false,
66
- val cameraOff: Boolean = false,
67
- val audioMode: AudioMode = AudioMode.SPEAKER,
68
- )
69
-
70
- class CallControlsViewModel : ViewModel() {
71
- private val _state = MutableStateFlow(CallControlsState())
72
- val state: StateFlow<CallControlsState> = _state
73
-
74
- fun toggleMic() {
75
- val callSession = CallSession.getInstance()
76
- if (_state.value.micMuted) {
77
- callSession.unmuteAudio()
78
- } else {
79
- callSession.muteAudio()
80
- }
81
- _state.update { it.copy(micMuted = !it.micMuted) }
82
- }
83
-
84
- fun toggleCamera() {
85
- val callSession = CallSession.getInstance()
86
- if (_state.value.cameraOff) {
87
- callSession.resumeVideo()
88
- } else {
89
- callSession.pauseVideo()
90
- }
91
- _state.update { it.copy(cameraOff = !it.cameraOff) }
92
- }
93
-
94
- fun flipCamera() {
95
- // switchCamera() takes NO argument — it toggles front/rear internally.
96
- // (The enum, when you need it, is CameraFacing.{FRONT,REAR} — there is no BACK,
97
- // and CallSession has no currentCameraFacing getter.)
98
- CallSession.getInstance().switchCamera()
99
- }
100
-
101
- fun toggleSpeaker() {
102
- val callSession = CallSession.getInstance()
103
- val nextMode = when (_state.value.audioMode) {
104
- AudioMode.SPEAKER -> AudioMode.EARPIECE
105
- AudioMode.EARPIECE -> AudioMode.SPEAKER
106
- AudioMode.BLUETOOTH -> AudioMode.SPEAKER
107
- }
108
- callSession.setAudioMode(nextMode)
109
- _state.update { it.copy(audioMode = nextMode) }
110
- }
111
- }
112
- ```
113
-
114
- ---
115
-
116
- ## Bluetooth audio routing
117
-
118
- V6 still uses the V5 SDK's `MediaEventsListener` for audio mode change detection:
119
-
120
- ```kotlin
121
- class CallControlsViewModel(
122
- lifecycleOwner: LifecycleOwner,
123
- ) : ViewModel(), MediaEventsListener {
124
- init {
125
- // addMediaEventsListener takes (LifecycleOwner, MediaEventsListener) — there is no String-keyed overload.
126
- CallSession.getInstance().addMediaEventsListener(lifecycleOwner, this)
127
- }
128
-
129
- override fun onAudioModeChanged(mode: AudioMode) {
130
- _state.update { it.copy(audioMode = mode) }
131
- }
132
-
133
- override fun onCleared() {
134
- // There is no removeMediaEventsListener — clear all listeners on teardown.
135
- CallSession.getInstance().clearAllListeners()
136
- }
137
- // ... other MediaEventsListener methods
138
- }
139
- ```
140
-
141
- When the user connects Bluetooth headphones mid-call, `onAudioModeChanged(BLUETOOTH)` fires. Update the UI button accordingly. (Lifecycle-scoped registration auto-removes when the owner is destroyed; `clearAllListeners()` is the explicit teardown.)
142
-
143
- ---
144
-
145
- ## Anti-patterns
146
-
147
- V5 audio-controls + video-controls references list the SDK-level anti-patterns; V6 Compose-specific:
148
-
149
- 1. **`Icons.Filled.MicOff` without `tint`.** Default tint is theme-dependent; on dark call surfaces, the icon may be invisible.
150
- 2. **`collectAsState()` instead of `collectAsStateWithLifecycle()`.** State updates run while paused; CPU waste.
151
- 3. **Calling `switchCamera(CameraFacing)` with an argument.** No such overload exists — `switchCamera()` takes no arg and toggles front/rear internally. There is also no `currentCameraFacing` getter, and the enum is `CameraFacing.{FRONT,REAR}` (no `BACK`).
152
-
153
- ---
154
-
155
- ## Verification checklist
156
-
157
- - [ ] ViewModel uses `StateFlow` + `collectAsStateWithLifecycle()`
158
- - [ ] All toggle buttons have `contentDescription` (a11y)
159
- - [ ] `MediaEventsListener` registered via `addMediaEventsListener(lifecycleOwner, this)`
160
- - [ ] Listeners cleared in `onCleared()` via `clearAllListeners()`
161
- - [ ] Real-device smoke: mute / camera / flip / speaker all work
162
- - [ ] Bluetooth smoke: connect headphones → audio mode icon updates
163
-
164
- ---
165
-
166
- ## Pointers
167
-
168
- - `cometchat-android-v5-calls/references/audio-controls.md` — full audio SDK API (mute/audio mode)
169
- - `cometchat-android-v5-calls/references/video-controls.md` — camera pause/resume/flip
170
- - `cometchat-android-v6-calls` SKILL.md
171
- - `cometchat-android-v6-calls/references/raise-hand.md` — Compose pattern sibling
172
- - Canonical docs: https://www.cometchat.com/docs/calls/android/device-management