# Projekat 2 - Aplikacija koja koristi Web API
>Odsjek za matematiku
>Razvoj mobilnih aplikacija
## Logistika
* Projekat nosi 40 bodova
* Rok za predaju projekta je dan pred završni/popravni ispit u 23:59.
* Prezentacije projekata će se održati u terminu zavšnog/popravnog ispita.
* Projekti se rade u parovima koje studenti sami oforme.
* Projekat se ocjenjuje na osnovu kvaliteta samog projekta, dokumentacije, usmene odbrane i brzine izrade.
* Pošto se radi o istom projektu, a postoji više termina za odbranu, brzina izrade projekta utiče na maksimalan boroj bodova koji se može osvojiti i to:
| Rok | Bodovi |
|:-----: |:------:|
| Prvi | 40 |
| Drugi | 36 |
| Septembarski | 30 |
| Septembarski "socijalni" | 27 |
* Ocjene su individualne za svakog studenta na projektu.
* Dokumentacija sadrži opis rada aplikacije sa slikama, opis arhitekture aplikacije, opis funkcionalnosti pojedinačnih klasa, kao i opis opštih koncepata Android frameworka (npr. room, aktivnost, fragment, lifecycle).
* Dokuementacija ne sadži kod (osim eventualno potpisa klase ili metode).
* Dokumentacija sadrži minimalno 3000 riječi
* Plagijarizam će biti ocijenjen sa 0 bodova bez mogućnosti ispravke ovih bodova
* Dokumentacija se piše u Markdownu (ekstenzija .md)
* Predaje se dokumentacija (folder sa md fajlom i ostalim fajlovima poput slika) i Android projekat (izvorni kod i resursi, bez generisanih foldera i fajlova)
* Predavanje projekta će se vršiti putem Google Forme, kao i prethodni put
## Opis aplikacije
Projekta podrazumjeva razvoj Android aplikacije putem koje će se vršiti prezentacija podata dobivenih kroz Web API po vašem izboru. Besplate Web API-e možete pronaći na različitim web stranicama (npr. [RapidAPI](https://rapidapi.com/collection/list-of-free-apis), [APIList](https://apilist.fun/) i [Mixed Analytics](https://mixedanalytics.com/blog/list-actually-free-open-no-auth-needed-apis/)). Iako su servisi besplatni neki od njih zahtijevaju registraciju.
U nastavku su navedena okvirna uputstva kojih se trebate pridržavati prilikom izrade aplikacije, kao i tehnički zahtjevi koje je potrebno ispuniti kako bi se osvojio maksimalan broj bodova. Detaljne funkcionalnosti nisu navedene kako bi se omogućilo iskazivanje kreativnosti studenata, sposobnosti dizajniranja aplikacije, ali kako bi dobili i raznovrsne aplikacije.
Aplikacija treba sadržavati:
* uvodni dio
* izbor grupe podataka koje korisnik želi pregledati (npr. za NBA Api to mogu biti igrači, timovi, utakmice i sl.)
* lista izabranih podataka (npr. za Covid-19 to može biti lista novozaraženih po danima)
* filtriranje podataka po nekom kriteriju putem izbronika (npr. za Movies API to mogu biti žanrovi filmova)
* mogućnost odabira elementa liste kako bi se dobile dodatne informacije (npr. za Weather API to su dodadtni podaci poput vjerovatnoće padavina, brzine vjetra za izabrani dan)
* keširanje podataka kako bi bili dostupni offline
* mogućnost spašavanja podataka koji se dobiju kada tražimo dodatne informacije u bazu (npr. za Geo Api to može dodavanje nekog grada u bazu)
* mogućnost pregleda podataka spašenih u bazi
* prosljeđivanje podataka putem tekstualne poruke
Kako bi se ispunili tehnički zahtjevi aplikacija treba koristiti:
* Fragmente
* Barem jedan constraint layout
* View and data binding
* Navigation komponentu
* Prosljeđivanje podataka putem Safe Args plug-ina
* App bar sa bar jednim item-om i up button-om
* Share button kojim se može poslati predefinisana poruka
* Barem jedan fragment sa različitim horizontalnim i vertikalnim layout-om
* Spašavanje podataka kako bi se sačuvali prilikom zatvaranja aplikacije od samog Android OS-a
* Room database sa entitetima i data access objektima (DAO)
* Recycler View
* Repositoy komponentu
## Dodatne napomene
* Aplikacija se piše u programskom jeziku Kotlin.
* Prilikom dizajna preporučeno je držati se standardnih Android vizuelnih rješenja.