Zadanie
Cieľ zadania: Návrh a realizácia viacvrstvovej Android aplikácie v súlade s princípmi Clean Architecture / MVVM. Dôraz sa kladie na deklaratívne UI (Jetpack Compose), lokálnu perzistenciu (Room), asynchrónne dopyty na REST API (Retrofit), bezchybný state management a gamifikačnú vrstvu.
1. Technologické a architektonické požiadavky
- Jazyk & Platforma: Kotlin, Kotlin Coroutines, StateFlow / SharedFlow.
- Používateľské rozhranie: Výhradne Jetpack Compose (Material 3) s dôsledným dodržaním jednosmerného toku dát (Unidirectional Data Flow).
- Architektúra: MVVM s vrstvou Repository ako jediným zdrojom pravdy (Single Source of Truth).
- Lokálna databáza: Room Database (relačné väzby 1:N, indexy, TypeConverters).
- Sieťová komunikácia: Retrofit Client + serializátor (kotlinx.serialization / Moshi / Gson).
- Časovač a notifikácia: WorkManager na opakované spúšťanie, kontroly používania aplikácie a následné zobrazenie notifikácií.
- Dependency Injection (odporúčané): Hilt alebo Koin.
2. Funkčné moduly aplikácie
A. Používateľský profil & Onboarding
- Prvé spustenie: Zadanie mena a voľba profilového obrázka (výber z galérie cez
PickVisualMediakontrakt alebo sada predpripravených avatarov). - Ukladanie: Trvalé uloženie profilu v aplikácii (DataStore Preferences).
- Správa profilu: Možnosť kedykoľvek aktualizovať meno a fotografiu v nastaveniach.
B. Konfigurácia kvízu (Lobby)
Používateľ konfiguruje test prostredníctvom parametrov z Open Trivia DB API:
- Kategória: Dynamicky načítaný zoznam z endpointu
https://opentdb.com/api_category.php. - Náročnosť: Any, Easy, Medium, Hard.
- Typ otázok: Multiple Choice (4 možnosti) alebo True / False.
- Časový limit: 15 sekúnd od zobrazenia otázky s možnosťami; ak čas vyprší, otázka sa považuje za nesprávne zodpovedanú.
- Herný mód:
- Klasický kvíz: Pevný počet 10 otázok, na konci štatistika správnych a nesprávnych odpovedí.
- Maratón: Nekonečný režim trvajúci do prvej nesprávnej odpovede. Otázky sa dočítavajú na pozadí v dávkach po 50 otázkach.
C. Herná obrazovka a logika
- Zobrazenie znenia otázky, poradového čísla a náhodne zamiešaných možností. Vždy sa zobrazuje len 1 otázka.
- HTML entity decoding: Korektné ošetrenie kódovania textov z API (napr.
",'). - Časomiera: Meranie celkového trvania hry aj času stráveného na jednotlivých otázkach.
- V režime Maratón nasleduje po prvej chybe okamžité ukončenie a prechod na obrazovku vyhodnotenia.
D. Lokálna databáza, história a štatistiky (Room)
- Ukladanie výsledku: Atomický zápis po skončení hry – dátum, čas, kategória, náročnosť, herný mód, trvanie v sekundách, celkový počet otázok, správne/nesprávne odpovede.
- História odpovedí (relácia 1:N): Zaznamenanie každej položenej otázky, ponúkaných volieb, zvolenej odpovede a času odpovede.
- Obrazovka histórie:
- Skrolovateľný zoznam odohraných kvízov (
LazyColumn). - Filtrovanie a radenie: podľa najlepšieho skóre, najrýchlejšieho času či kategórie.
- Detail odohraného testu: Po kliknutí na položku zoznamu zobrazenie kompletného rozboru otázok s farebným zvýraznením odpovedí.
- Skrolovateľný zoznam odohraných kvízov (
E. Gamifikácia (Výzvy a úspechy)
- 7 in a row (Streak): Požiadavka odohrať aspoň jednu hru denne počas 7 po sebe idúcich dní s úspešnosťou minimálne 80 %. Zobrazenie postupu a reset pri vynechaní dňa.
- Marathon Personal Best: Sledovanie a notifikácia o prekonaní osobného maxima v počte správnych odpovedí v maratóne.
- Externý trigger: Sledovanie používania aplikácie – či používateľ dnes už vykonal test v rámci 7-dňovej výzvy (ak nie, pripomenúť notifikáciou). Ak aplikáciu dlho nepoužil, pripomenúť mu, že ho čakajú ďalšie otázky.
F. Natívne zdieľanie
- Tlačidlo na obrazovke výsledkov s integráciou
Intent.ACTION_SEND. - Generovanie predformátovaného textu s dosiahnutým skóre, kategóriou a časom pre sociálne siete.
3. Hodnotiace kritériá (50 bodov)
| Kategória | Popis požiadavky | Body |
|---|---|---|
| Architektúra & Kód | Čisté oddelenie vrstiev (UI – ViewModel – Repository – DataSource), Single Source of Truth, reaktívne toky (Flow / StateFlow). | 10 b |
| Databáza (Room) | Návrh relačnej schémy (Entity, 1:N Relations, DAO, TypeConverters), integrita údajov a efektívnosť dopytov. | 8 b |
| Sieťová vrstva (API) | Retrofit, spracovanie chýb (timeout, offline stav), plynulý batch-prefetching (50 otázok) pri maratóne. | 7 b |
| UI (Jetpack Compose) | Material 3 komponenty, čisté rozdelenie na Composable celky, LazyColumn, responzivita a UX. | 10 b |
| Gamifikácia & Logika | Správna implementácia dátumovej logiky pre 7-dňový streak a maratónskeho mechanizmu. Externý trigger – WorkManager a notifikácie. | 10 b |
| Doplnkové funkcie | Profil používateľa (výber fotky), HTML decoding, Android Share Sheet integrácia. | 5 b |
4. Požiadavky na odovzdanie
- Git privátny repozitár: Zdrojový kód s históriou commitov preukazujúcou priebežný vývoj – min. 1 commit týždenne.
- Technická dokumentácia (README.md): Stručný popis architektúry, diagram Room databázy a ukážky obrazoviek (screenshots).
- Inštalačný balíček: Zostavené a funkčné APK (Debug alebo Release).