Celkový počet bodov: 50 bodov Minimum na zápočet : 25 bodov Platforma: Android (Jetpack Compose)
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 PickVisualMedia kontrakt 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í.

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

  1. Git privátny repozitár: Zdrojový kód s históriou commitov preukazujúcou priebežný vývoj – min. 1 commit týždenne.
  2. Technická dokumentácia (README.md): Stručný popis architektúry, diagram Room databázy a ukážky obrazoviek (screenshots).
  3. Inštalačný balíček: Zostavené a funkčné APK (Debug alebo Release).