Vývoj mobilných aplikácií – záverečný projekt

Do 5. apríla 10:00 pošlite mailom nasledovné:

  • zadanie projektu
  • podobné aplikácie
  • mockupy aktivít

Zadanie projektu

Názov a krátky popis aplikácie (do 100 slov – tento limit je orientačný, nemusíte to brať striktne). Vybrané zadanie bude zverejnené na tejto stránke. Ak zadanie projektu nezmeníte, pri obhajobe získate 1 bod.

Podobné aplikácie

Pošlite 3 odkazy na aplikácie, ktoré sa najviac podobajú, resp. riešia rovnaký problém ako vaša aplikácia. Ideálne ak ide o aplikácie z Google Play. Ak vytvárate aplikáciu, ktorá existuje napr. ako desktopová aplikácia ale nemá alternatívu pre Android, pošlite odkaz na tú aplikáciu (+ dve ďalšie aplikácie z obchodu). Ak vytvárate niečo veľmi unikátne, čo ešte neexistuje, pošlite odkazy na aplikácie, ktoré majú aspoň časť funkcionality spoločnú. Rovnaká aplikácia v Google Play a v App Store sa považuje za 1 odkaz. Pripojte komentár, či vaša aplikácia bude kopírovať nejakú aplikáciu úplne, s obmedzenou funkcionalitou, iným dizajnom alebo sa bude odlišovať (toto je preferovaná možnosť). Ak je to vhodné, spomeňte hlavný rozdiel medzi vašou aplikáciou a odkazovanými aplikáciami. Ak zadanie projektu dodržíte alebo zmeníte iba v malom rozsahu – teda, že 3 odkazy budú stále relevantné, získate pri obhajobe 1 bod.

Mockup

Načrtnite vzhľad dvoch aktivít akýmkoľvek spôsobom – v Android Studio, v skicári, grafickom editore, na papier alebo s využitím nejakej aplikácie na vytvaranie mockup aplikácii. Vyberte si 2 netriviálne aktivity s viacerými widgetmi. Prioritou je návrh rozloženia widgetov na obrazovke a základný dizajn. Nezabudnite ani na ActionBar, prípadne Snackbar/Toast notifikácie. Ak vo výslednej aplikácii bude viditeľné, že aktivity vychádzajú z mockup verzie, získate za každú aktivitu 1 bod, teda za obe aktivity 2 body.

Odoslanie mailu je nepovinné, avšak môžete ľahko získať body.

Obhajoba projektu

Obhajoba projektov je verejná a prebieha v doleuvedených termínoch. Zúčastniť sa môžete ľubovoľného počtu predmetov, pričom sa berie do úvahy hodnotenie len z posledného termínu.

Termíny obhajoby

    1. termín: 29. mája
    1. termín: 5. júna
    1. termín: po dohode, najneskôr do polovice júna

Požiadavky na účasť na termíne obhajoby

  • Účasť na termínoch potvrďte prihlásením sa na termín v AIS2.
  • Súčasne oznámte mailom zoznam technologických čŕt, ktoré chcete obhajovať a to najneskôr v predvečer obhajoby do 20:00. Bez odoslania mailu nebude možné obhajovať projekt, a v prípade oneskoreného odoslania mailu je udelená sankcia mínus 3 body.

Bodové hodnotenie a stupnica

Na úspešnú obhajobu potrebujete aspoň 11 bodov. Štyri bonusové body (za včasný výber zadania, odkazy na podobné aplikácie a mockup návrhy) neznižujú latku povinného minima, ale prispievajú k lepšej známke.

Stupnica hodnotenia

A: 19-18 bodov B: 17-16 bodov C: 15-14 bodov D: 13-12 bodov E: 11 bodov FX: 10 a menej bodov

  • Obhajovať môžete technologické črty v maximálnej hodnote 20 bodov. 4 bonusové body sa do tejto hodnoty nezarátavajú.
  • Za jednotlivú technologickú črtu môžete dostať zadaný počet bodov alebo nulu, ak pôjde o nefunkčný kód alebo nebudete vedieť preukázať autorstvo a vysvetliť implementáciu. Črta môže byť neuznaná aj v prípade ak výrazne nezapadá do aplikácie (teda vyhnite sa obhajovaniu čŕt, ktoré sú tam pridané iba kvôli bodom a nezapadajú do logiky celej aplikácie). Neobhájenú črtu nemôžete zameniť za inú.

Technologické črty

Nutné požiadavky

  • Projekt kompilujte voči API level 28 (Android 9)
  • Minimálna podporovaná verzia je API level 23 (Android 6).
  • Pri použití cudzieho kódu alebo externej knižnice uveďte odkaz na autora alebo pôvodinu. Črty využívajúce plagiarizovaný kód budú zamietnuté.
  • Technologické črty a funkcionalita musia viesť ku konzistentnej a logicky organizovanej aplikácii. Funkcionalita implementovaná bez ohľadu na zmysluplnosť v kontexte aplikácie nebude ocenená bodmi.

Zoznam technologických čŕt

Aktivity a Fragmenty

Hodnotenie: 1 bod za každú aktivitu spĺňajúcu požiadavky. Maximálny počet hodnotených aktivít je 6.

Aktivita musí byť logická, zapadajúca do idey aplikácie, netriviálna (pozostávajúca z viacerých komplexných widgetov) a unikátna (identické aktivity s minimálnymi odlišnosťami nie sú brané do úvahy). Nesplnenie tejto podmienky má za následok neuznanie projektu.

Každá aktivita musí mať korektne implementovaný životný cyklus, korektne ukladať priebežný stav a musí byť schopná vysporiadať sa so zmenou konfigurácie (otočenie zariadenia). Ak aktivita poskytuje len zoznam akcií (napríklad tlačidiel), nepovažuje sa za netriviálnu. Pre navigáciu v aplikácii slúži widget Navigation Drawer. Ak tlačidlá reprezentujú akcie, využite lištu akcií (action bar).

Okrem aktivít je možné nechať si ohodnotiť aj fragmenty. Fragment musí byť logický, zapadať do idey aplikácie, spĺňať požiadavku netriviálnosti a unikátnosti. Zároveň musí podporovať korektné zmeny životného cyklu. Zároveň je potrebné obhájiť aj príslušný kód v aktivite (táto aktivita už nemôže byť hodnotená samostatne).

Pri obhajobe je možné kombinovať aktivity a fragmenty. Celkový limit je 6 bodov. Očakáva sa zdôvodnenie prečo sa využili fragmenty, resp. prečo je aktivita bez fragmentov.

SQL

  • Využitie relačnej databázy, content providery, loadery (3 body). Je zakázané volať databázové metódy v hlavnom vlákne: namiesto nich využite loadery.

  • Viactabuľkový content provider s použitím UriMatcher-a, resp. demonštráciou SQL JOIN-ov: 1 bod.

  • Použitie databázy Android Room (3 body).

Komunikácia pomocou HTTP / REST

  • Využitie URLConnection na komunikáciu so serverom: 1 bod.
  • URLConnection: Demonštrácia obojsmernej komunikácie (HTTP POST a HTTP GET): 1 bod.
  • Využitie knižnice pre HTTP (Retrofit, OkHttp): 1 bod, v prípade obojsmernej komunikácie dodatočný bod.

Sieťová komunikácia sa nesmie vykonávať v hlavnom vlákne. Črta musí konzistentne podporovať asynchrónne volania.

Služby / Services

  • Služba založená na IntentService: 1 bod.
  • Služba založená na plánovaní úloh napr. cez JobScheduler: 2 body

Zoznamy, mriežky, tabuľky

  • Využitie zoznamu, mriežky či podobného widgetu s adaptérom: 1 bod za každý widget
  • Využitie zoznamu, mriežky a podobného widgetu cez §RecyclerView§: 1 bod za každý widget + maximálne 1 dodatočný bod za použitie netradičnej technológie mimo rozsahu cvičení.

ViewModel a LiveData

Použitie ViewModel, resp. LiveData v aktivitách či fragmentoch: 1 bod.

Senzory

Využitie niektorého senzora (GPS, krokomer): 1 bod za každý senzor.

Preferencie / Preferences

Využitie preferencií vrátane preferenčnej aktivity: 1 bod.

Bindery

Služba využívajúca Bindery – 2 body.

Synchronizácia

Synchronizácia s využitím synchronizačného API Androidu: 2 body.

ViewBinder

Návrh vlastného adaptéra s ViewBinderom: 1 bod.

AsyncTask

Korektné využitie AsyncTasku s primeraným zvážením okolností použitia: 1 bod.

Headless Fragment

Využitie headless fragmentu pre dlhotrvajúce úlohy s použitím AsyncTask: 1 bod.

Zdieľanie / Sharing

Odosielanie či prijímanie dát do iných aplikácií: 1 bod za odosielanie, 1 bod za prijímanie.

WebView

Zobrazenie webovej stránky vo WebView: 1 bod

 Ďalšie črty hodnotené 1 bodom

  • fotoaparát/videokamera. Použitie inej knižnice než Fotoapparat: 2 body
  • vlastné loadery
  • komunikácia s aktivitou cez broadcasty
  • zdieľania cez Android Easy Share
  • dialóg
  • notifikácie
  • lišta navigácie (navigation drawer)
  • karty (tabs)
  • swiping view -využitie netradičného komponentu z knižnice Androidu, či z externej knižnice
  • vlastný štýl aplikácie
  • vlastná modifikácia ActionBaru: obohatenie ActionBaru o vlastné komponenty: vyhľadávanie, špeciálne tlačidlá (Bežné položky Action Baru reprezentované ako tlačidlá nie sú ohodnotené).
  • vlastné vykresľovanie náhľadu fotografie

Metačrty

  • zverejnenie aplikácie na Google Play: 2 body.
  • zverejnenie zdrojových kódov na GitHub, BitBucket, SourceForge či inom verejnom úložisku zdrojových kódov: 1 bod.
  • využitie externej Java knižnice v projekte, ktorá nebola ukázaná na cvičení: 1 bod, ak už knižnica nebola explicitne spomenutá v predošlých črtách
  • podpora veľkých displejov (tabletov): appka, ktorá korektne podporuje malé i veľké zariadenia: 1 bod.
  • kompletná lokalizácia aplikácie s využitím resources. Aplikácia nech je dostupná v dvoch ľubovoľných jazykoch/nárečiach: 1 bod.
  • implementácia appky v inom jazyku než Java: 2 body

FAQ

Môžeme používať Kotlin namiesto Javy?

Áno. V zásade môžete použiť akýkoľvek dostupný jazyk, a použitie Kotlinu je vítané. Takáto črta je hodnotená 2 bodmi. Ak sa rozhodnete pre túto možnosť, konzultujte to vopred mailom.

Ráta sa publikácia aplikácie v obchode F-Droid ako náhrada za Play Store?

Zverejnenie aplikácie mimo Google Play je vítané, avšak nebude ohodnotené ďalšími bodmi. Cieľom je pozrieť sa na proces zverejnenia svojej aplikácie v oficiálnom markete aplikácii Google Play.

Považuje sa WebView za netradičný komponent?

Nie, WebView je dostatočne používaný komponent. Avšak zobrazenie webovej stránky vo WebView bolo pridané medzi technologické črty hodnotené 1 bodom

Ako mám chápať lokalizáciu?

Aplikácia nech je dostupná v dvoch ľubovoľných jazykoch. Predpokladám, že to bude SK/EN, ale spokojne môžu byť použité aj iné jazyky/nárečia.

V bodovaní sa spomína 1 bod za každú aktivitu. Ráta sa tento bod, aj pokiaľ použijem fragment na celú obrazovku, ktorý spĺňa požiadavky pre aktivitu?

Tento rok nie je požiadavka na minimálny počet aktivít. V niektorých projektoch má zmysel obmedziť počet aktivít a preferovať fragmenty. Pre vývojára-začiatočníka nie je vždy jednoduché a priamočiare rozlíšiť, či je vhodnejšie použiť aktivitu alebo fragment. Pri obhajobe sa očakáva nejaký argument, prečo bola zvolená možnosť s fragmentom resp. bez neho. Hodnotenie bolo upravené a bod je za každú komplexnú aktivitu so svojím životným cyklom ako aj za každý komplexný fragment. K obhajobe fragmentu patrí aj obhajoba kódu aktivity, ku ktorej sa pripája. Samozrejme jednoduché aktivity a fragmenty s jediným widgetom a pod. nemôžu byť ohodnotené bodom.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *