Architecture Overview
App follows a layered approach with Hilt DI, strong accessibility, and Excel-driven content.
Layers
- Presentation: Fragments and view logic (e.g., GameFragment, per-mode fragments) with ViewBinding.
- Domain: Models and use cases (e.g., GameQuestion, LoadQuestionsUseCase).
- Data: Excel loaders and caches (Apache POI + in-memory cache).
Key Components
- Base gameplay: core/base/BaseGameFragment.kt
- Loads questions (cache โ Excel), manages TTS, hint menu, validation, and announcements.
- Data loading: core/utility/excel/ExcelQuestionLoader.kt
- Reads
assets/questions/{lang}.xlsx
and filters bymode
anddifficulty
. - Cache: core/utility/excel/QuestionCache.kt
- Preloads on splash; keyed by
lang-mode-difficulty
.
DI
- Hilt setup in ZMantra.kt (
@HiltAndroidApp
). - Modules wire repositories/use cases (e.g., di/UserGuideModule.kt).
Accessibility & TTS
- Announcements in base fragment; TalkBack-friendly flows.
- TTS lifecycle via core/utility/common/TTSUtility.java.
Startup
- SplashScreen.kt preloads questions and navigates to main hub.
Tech Highlights
- Kotlin + some Java utilities
- AndroidX, Material, Glide, Lottie
- Apache POI (Excel), exp4j (expressions)