Jetpack Compose version of the API demo. Mirrors cases from APIExample/ but uses
@Composable functions instead of Fragments + XML layouts. Kotlin only.
./gradlew assembleDebug # build debug APK
./gradlew installDebug # build + install to connected device
./gradlew test # unit tests
./gradlew connectedAndroidTest # instrumented tests (device required)See README.md — Obtain an App Id.
- Do NOT use XML layouts,
Fragment, orViewBinding— Compose only. - Do NOT use
View-based widgets directly in Compose UI — wrap withAndroidViewif unavoidable. RtcEnginemust be created insideremember { }and destroyed insideDisposableEffect(lifecycleOwner) { onDispose { } }— key must belifecycleOwner, notUnit; wrong key means cleanup never fires on back navigation.- Always call
rtcEngine.leaveChannel()beforeRtcEngine.destroy()inonDispose. - Permissions use
rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()). IRtcEngineEventHandlercallbacks are safe to mutate Compose state directly (snapshot system is thread-safe).
| Skill | Path | Description |
|---|---|---|
| upsert-case | .agent/skills/upsert-case/ |
Add a new Compose case or modify an existing one |
| query-cases | .agent/skills/query-cases/ |
Query and browse existing Compose cases |
| review-case | .agent/skills/review-case/ |
Review a case against project red lines |
ARCHITECTURE.md— full directory layout, Composable case pattern, registration details