docs: add post-implementation todo list

Tracks build verification, missing tests, polish items, distribution
prep, and future-feature backlog. Replaces the implemented phase docs
which were deleted post-shipping.
This commit is contained in:
2026-04-27 20:21:37 +07:00
parent fe52232a53
commit 9a356867da
+61
View File
@@ -0,0 +1,61 @@
# Lô tô Android — TODO
Outstanding work, grouped by priority. The 11 implementation phases from
`260427-1153-loto-android-port/` are complete and pushed to GitHub.
## P0 — Verify build (cannot do here, no JDK/SDK)
- [ ] Open `/config/workspace/tiennm99/loto-android/` in Android Studio Ladybug+
- [ ] Sync Gradle, fix any version-resolution gaps
- [ ] `./gradlew :app:lint :app:test :app:assembleDebug`
- [ ] Run on emulator (API 24, API 31, API 35) — golden path: generate card → tap row to bingo → "Kinh!" modal + audio
- [ ] Run instrumentation: `./gradlew :app:connectedDebugAndroidTest` (`MainActivityComposeSmokeTest`)
- [ ] Sanity-check first-build CI run: GitHub Actions tab → `build-debug` workflow
## P1 — Tests not written by the agent
- [ ] `CallBusTest` — Turbine: broadcast/reset/monotonic id (specced in phase-06)
- [ ] `PlayerBoardViewModelTest` — bingo idempotency, forward-only auto-tick, mode gating, voice announce rule (specced in phase-06)
- [ ] `MasterPanelViewModelTest``runTest` with `advanceTimeBy` for auto-call cadence, settings-mid-run cancel, remaining-empty stop (specced in phase-06)
- [ ] `VoicePlayerInstrumentationTest` — assets resolve, clip plays end-to-end (specced in phase-04)
- [ ] `MasterBoardLayoutTest` — verify the 11×9 ones-digit layout (90 in row10/col8, edge cells correct)
- [ ] `VoiceManifestTest` — JSON parse, malformed input fallback
## P1 — Known concerns flagged during build
- [ ] `BringIntoViewRequester` carries `@OptIn(ExperimentalFoundationApi::class)` in `MasterPanelScreen.kt` — check if Compose BOM 2025.01+ has stabilized this; if so, drop the annotation
- [ ] Confetti fall-speed multiplier is `screenHeightDp * 3f` — heuristic, tune on real devices if particles look off
- [ ] Auto-call coroutine restarts on every speed change — verify the cancel/restart doesn't leak the prior delay timer
## P2 — Polish before public release
- [ ] Replace the placeholder `ic_launcher_foreground.xml` (stylized "L" stroke) with a real adaptive icon — rose→amber wordmark or a fairground motif
- [ ] App-screenshot generation for Play Store / GitHub README (35 phone shots: cold start, mid-game, master panel, settings, bingo modal)
- [ ] Splash screen via `androidx.core:core-splashscreen` (currently the white themes.xml flash is acceptable but unbranded)
- [ ] Dark mode visual pass — verify each cell/token combination, especially dark-mode empty-cell overlay
- [ ] Per-density rasters for the launcher icon (`ic_launcher.webp` at mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi) for pre-API 26 devices
- [ ] Accessibility: TalkBack content descriptions on every interactive cell + toast; verify 4.5:1 contrast in both themes
## P2 — Distribution
- [ ] Generate release keystore: `keytool -genkey -v -keystore ~/.android/loto-release.jks -keyalg RSA -keysize 4096 -validity 36500 -alias loto`
- [ ] Add GitHub secrets: `KEYSTORE_BASE64`, `KEYSTORE_PASSWORD`, `KEY_ALIAS`, `KEY_PASSWORD`
- [ ] Tag `v1.0.0` and push → exercises `release.yml` (signed AAB+APK to GH Release)
- [ ] (Optional) Play Console listing — privacy policy, content rating, target audience, store listing in Vietnamese
## P3 — Future features (not committed)
- [ ] Host's own player card (web app supports it via `loto_master_card` prefix but doesn't render it; same here)
- [ ] Undo last crossed cell
- [ ] Sound effects on bingo (separate from voice)
- [ ] PWA-style "add to home screen" — N/A on Android (already an app)
- [ ] Multiplayer sync via WebSocket
- [ ] English i18n — `values-en/strings.xml`
## Decisions record
- **Plan archive**: `/config/workspace/plans/260427-1153-loto-android-port/plan.md` (overview only; phase docs deleted post-implementation)
- **Research reports**: `/config/workspace/plans/reports/researcher-260427-1153-{loto-codebase-analysis,android-stack,android-audio}.md`
- **Audio framework pick**: Media3 ExoPlayer (over SoundPool) — see audio research report
- **DI pick**: manual construction in `LotoApp.onCreate` (no Hilt) — revisit at >10 surfaces
- **Theme**: brand-fixed colors, `dynamicColor = false` — Material You system colors would mute the rose→amber identity