{"id":222,"date":"2023-03-31T10:33:10","date_gmt":"2023-03-31T08:33:10","guid":{"rendered":"https:\/\/ics.science.upjs.sk\/vma\/?page_id=222"},"modified":"2024-02-12T14:47:09","modified_gmt":"2024-02-12T13:47:09","slug":"technologicke-crty","status":"publish","type":"page","link":"https:\/\/ics.science.upjs.sk\/vma\/technologicke-crty\/","title":{"rendered":"Technologick\u00e9 \u010drty"},"content":{"rendered":"<p><span style=\"color: #ff0000\">Verzia z roku 2023. Technologick\u00e9 \u010drty m\u00f4\u017eu by\u0165 aktualizovan\u00e9 v priebehu semestra.<\/span><\/p>\r\n<h3 id=\"_nutn\u00e9_po\u017eiadavky\">Nutn\u00e9 po\u017eiadavky<\/h3>\r\n<h3><!-- \/wp:post-content -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Projekt kompilujte vo\u010di <strong>API level 33<\/strong> (Android 13)<\/li>\r\n<li>Minim\u00e1lna podporovan\u00e1 verzia je API level 26 (Android 8.0). Po dohode m\u00f4\u017eete da\u0165 aj neskor\u0161iu verziu.<\/li>\r\n<li>Pri pou\u017eit\u00ed cudzieho k\u00f3du alebo externej kni\u017enice uve\u010fte odkaz na autora alebo p\u00f4vodinu. \u010crty vyu\u017e\u00edvaj\u00face plagiarizovan\u00fd k\u00f3d bud\u00fa zamietnut\u00e9.<\/li>\r\n<li>Technologick\u00e9 \u010drty a funkcionalita musia vies\u0165 ku konzistentnej a logicky organizovanej aplik\u00e1cii. Funkcionalita implementovan\u00e1 bez oh\u013eadu na zmysluplnos\u0165 v kontexte aplik\u00e1cie nebude ocenen\u00e1 bodmi.<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/h3>\r\n<h3 id=\"_odpor\u00fa\u010dan\u00fd_dizajn\">Odpor\u00fa\u010dan\u00fd dizajn<\/h3>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Pou\u017e\u00edvajte\u00a0ViewModel-y ako poskytovate\u013ea d\u00e1t pre widgety. Z\u00e1rove\u0148 v\u00e1m u\u013eah\u010dia ukladanie perzistentn\u00e9 stavu, i stavu, ktor\u00fd vie pre\u017ei\u0165 zni\u010denie a obnovenie aktivity.<\/li>\r\n<li>Pou\u017e\u00edvajte\u00a0RecyclerView, v\u017edy ke\u010f ide o zoznamy \u010di mrie\u017eky s dynamick\u00fdmi d\u00e1tami; s d\u00e1tami, ktor\u00fdch je mnoho;\u00a0\u010di d\u00e1tami, ktor\u00e9 potrebuj\u00fa zlo\u017eitej\u0161ie vykres\u013eovanie ne\u017e len jeden re\u0165azec.<\/li>\r\n<li>Na datab\u00e1zu pou\u017e\u00edvajte\u00a0Room.<\/li>\r\n<li>Na REST API pou\u017e\u00edvajte\u00a0Retrofit.<\/li>\r\n<li>Ak je to mo\u017en\u00e9, pou\u017e\u00edvajte fragmenty namiesto aktiv\u00edt. Fragmenty sa daj\u00fa pou\u017ei\u0165 v navig\u00e1cii cez\u00a0NavHost.<\/li>\r\n<li>Pou\u017e\u00edvate\u013esk\u00e9 nastavenia a drobn\u00e9 d\u00e1ta ukladajte do\u00a0SharedPreferences, obsiahle \u0161trukt\u00farovan\u00e9 d\u00e1ta do\u00a0Room,<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/h3>\r\n<h3 id=\"_zoznam_technologick\u00fdch_\u010d\u0155t\">Zoznam technologick\u00fdch \u010d\u0155t<\/h3>\r\n<h4>Compose<\/h4>\r\n<p>Compose je aktu\u00e1lna technol\u00f3gia, ktorej sme sa ve\u013emi nevenovali. Za vysk\u00fa\u0161anie tejto technol\u00f3gie m\u00f4\u017eete z\u00edska\u0165 max. 3 body (jedna aktivita\/fragment). Ak bude cel\u00e1 aplik\u00e1cia v Compose, m\u00f4\u017eete z\u00edska\u0165 max. 5 bodov (pod\u013ea rozsahu pou\u017eitia).<\/p>\r\n<p>Odpor\u00fa\u010dam pozrie\u0165 <a href=\"https:\/\/foso.github.io\/Jetpack-Compose-Playground\/material\/scaffold\/\">Scaffold<\/a><\/p>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_aktivity_a_fragmenty\">Aktivity a Fragmenty<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Hodnotenie: 1 bod za ka\u017ed\u00fa aktivitu sp\u013a\u0148aj\u00facu po\u017eiadavky. Maxim\u00e1lny po\u010det hodnoten\u00fdch aktiv\u00edt je 5.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Aktivita mus\u00ed by\u0165 logick\u00e1, zapadaj\u00faca do idey aplik\u00e1cie, netrivi\u00e1lna (pozost\u00e1vaj\u00faca z viacer\u00fdch komplexn\u00fdch widgetov) a unik\u00e1tna (identick\u00e9 aktivity s minim\u00e1lnymi odli\u0161nos\u0165ami nie s\u00fa bran\u00e9 do \u00favahy). Nesplnenie tejto podmienky m\u00e1 za n\u00e1sledok neuznanie projektu.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Ka\u017ed\u00e1 aktivita mus\u00ed ma\u0165 korektne implementovan\u00fd \u017eivotn\u00fd cyklus, korektne uklada\u0165 priebe\u017en\u00fd stav a mus\u00ed by\u0165 schopn\u00e1 vysporiada\u0165 sa so zmenou konfigur\u00e1cie (oto\u010denie zariadenia). Ak aktivita poskytuje len zoznam akci\u00ed (napr\u00edklad tla\u010didiel), nepova\u017euje sa za netrivi\u00e1lnu. Pre navig\u00e1ciu v aplik\u00e1cii sl\u00fa\u017ei widget\u00a0<a href=\"https:\/\/material.io\/components\/bottom-navigation\">Bottom Navigation<\/a>. Ak tla\u010didl\u00e1 reprezentuj\u00fa akcie, vyu\u017eite li\u0161tu aplik\u00e1cie (<strong>app bar<\/strong>).<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Okrem aktiv\u00edt je mo\u017en\u00e9 necha\u0165 si ohodnoti\u0165 aj fragmenty. Fragment mus\u00ed by\u0165 logick\u00fd, zapada\u0165 do idey aplik\u00e1cie, sp\u013a\u0148a\u0165 po\u017eiadavku netrivi\u00e1lnosti a unik\u00e1tnosti. Z\u00e1rove\u0148 mus\u00ed podporova\u0165 korektn\u00e9 zmeny \u017eivotn\u00e9ho cyklu. Z\u00e1rove\u0148 je potrebn\u00e9 obh\u00e1ji\u0165 aj pr\u00edslu\u0161n\u00fd k\u00f3d v aktivite (t\u00e1to aktivita u\u017e nem\u00f4\u017ee by\u0165 hodnoten\u00e1 samostatne).<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Pri obhajobe je mo\u017en\u00e9 kombinova\u0165 aktivity a fragmenty. Celkov\u00fd limit je 5 bodov. O\u010dak\u00e1va sa zd\u00f4vodnenie pre\u010do sa vyu\u017eili fragmenty, resp. pre\u010do je aktivita bez fragmentov.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_sql\">SQL<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Vyu\u017eitie rela\u010dnej datab\u00e1zy pomocou kni\u017enice Room\u00a0(3 body). Je zak\u00e1zan\u00e9 vola\u0165 datab\u00e1zov\u00e9 met\u00f3dy v hlavnom vl\u00e1kne.<\/li>\r\n<li>Pou\u017eitie viacer\u00fdch tabuliek s prepojen\u00edm ent\u00edt 1:1, 1:M, \u010di M:N: dodato\u010dn\u00fd 1 bod<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_komunik\u00e1cia_pomocou_http_rest\">Komunik\u00e1cia pomocou HTTP \/ REST<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Vyu\u017eitie kni\u017enice pre HTTP (Retrofit, OkHttp): 1 bod, v pr\u00edpade obojsmernej komunik\u00e1cie dodato\u010dn\u00fd bod.<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Sie\u0165ov\u00e1 komunik\u00e1cia sa nesmie vykon\u00e1va\u0165 v hlavnom vl\u00e1kne. \u010crta mus\u00ed konzistentne podporova\u0165 asynchr\u00f3nne volania.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_zoznamy_mrie\u017eky_tabu\u013eky\">Zoznamy, mrie\u017eky, tabu\u013eky<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Vyu\u017eitie zoznamu, mrie\u017eky a podobn\u00e9ho widgetu cez RecyclerView: 1 bod za ka\u017ed\u00fd widget.<\/li>\r\n<li>Pou\u017eitie spr\u00e1vania pre zoznamy: 1 bod za ka\u017ed\u00e9 spr\u00e1vanie\r\n<ul>\r\n<li>swipe-to-refresh<\/li>\r\n<li>swipe jednotliv\u00fdch polo\u017eiek<\/li>\r\n<li>hromadn\u00fd v\u00fdber<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_viewmodel_a_livedata\">ViewModel a LiveData<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Pou\u017eitie\u00a0ViewModel, resp.\u00a0LiveData\u00a0v aktivit\u00e1ch \u010di fragmentoch: 1 bod.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_navig\u00e1cia_cez_navhost\">Navig\u00e1cia cez NavHost<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Navig\u00e1cia medzi fragmentami cez NavHost: <del>1 bod<\/del> 2 body<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_slu\u017eby_services\">Slu\u017eby \/ Services<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Slu\u017eba zalo\u017een\u00e1 na Service: 1 bod.<\/li>\r\n<li>Slu\u017eba zalo\u017een\u00e1 na pl\u00e1novan\u00ed \u00faloh napr. cez JobScheduler alebo WorkManager: 2 body<\/li>\r\n<li>Slu\u017eba vyu\u017e\u00edvaj\u00faca Bindery: plus 1 bod.<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_senzory\">Senzory<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Vyu\u017eitie niektor\u00e9ho senzora (GPS, krokomer): 1 bod za ka\u017ed\u00fd senzor.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_preferencie_preferences\">Preferencie \/ Preferences<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>Vyu\u017eitie preferenci\u00ed na ukladanie key-value d\u00e1t: 1 bod.<\/li>\r\n<li>Defin\u00edcia preferen\u010dnej aktivity: 1 bod.<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_korutiny\">Korutiny<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Korektn\u00e9 pou\u017eitie korut\u00edn: 1 bod.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_zdie\u013eanie_sharing\">Zdie\u013eanie \/ Sharing<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Odosielanie \u010di prij\u00edmanie d\u00e1t do in\u00fdch aplik\u00e1ci\u00ed: 1 bod za odosielanie, 1 bod za prij\u00edmanie.<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_webview\">WebView<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph --><\/h3>\r\n<p>Zobrazenie webovej str\u00e1nky vo WebView: 1 bod<\/p>\r\n<h3><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_\u010fal\u0161ie_\u010drty_hodnoten\u00e9_1_bodom\">\u010eal\u0161ie \u010drty hodnoten\u00e9 1 bodom<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>fotoapar\u00e1t\/videokamera: 2 body<\/li>\r\n<li>dial\u00f3g<\/li>\r\n<li>notifik\u00e1cie<\/li>\r\n<li>viewbinding alebo databinding<\/li>\r\n<li>navig\u00e1cia cez BottomNavigationView<\/li>\r\n<li>karty (tabs)<\/li>\r\n<li>swiping view<\/li>\r\n<li>vyu\u017eitie netradi\u010dn\u00e9ho komponentu z kni\u017enice Androidu, \u010di z externej kni\u017enice<\/li>\r\n<li>vlastn\u00fd \u0161t\u00fdl aplik\u00e1cie<\/li>\r\n<li>vlastn\u00e1 modifik\u00e1cia app baru: obohatenie app baru o vlastn\u00e9 komponenty: vyh\u013ead\u00e1vanie, \u0161peci\u00e1lne tla\u010didl\u00e1 (Be\u017en\u00e9 polo\u017eky App Baru reprezentovan\u00e9 ako tla\u010didl\u00e1 nie s\u00fa ohodnoten\u00e9).<\/li>\r\n<li>zobrazovanie fotografi\u00ed pomocou CameraX<\/li>\r\n<li><span style=\"text-decoration: underline\">google mapa<\/span> (pr\u00edpadne FusedLocationProvider)<\/li>\r\n<li>pou\u017eitie Dagger\/Hilt- \u00a01 bod<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":4} --><\/h3>\r\n<h4 id=\"_prekvapte_ma\">Prekvapte ma!<\/h4>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>ak\u00e1ko\u013evek netradi\u010dn\u00e1 \u010drta sa hodnot\u00ed: 1 bod<\/li>\r\n<li>mimoriadne elegantne navrhnut\u00e9 appky \u010di &#8222;wow&#8220; funkcionality: 1 bod<\/li>\r\n<\/ul>\r\n<h3><!-- \/wp:list -->\r\n\r\n<!-- wp:heading {\"level\":3} --><\/h3>\r\n<h3 id=\"_meta\u010drty\">Meta\u010drty<\/h3>\r\n<h3><!-- \/wp:heading -->\r\n\r\n<!-- wp:list --><\/h3>\r\n<ul>\r\n<li>zverejnenie aplik\u00e1cie na Google Play: 2 body.<\/li>\r\n<li><del>zverejnenie zdrojov\u00fdch k\u00f3dov na GitHub, GitLab, BitBucket \u010di inom verejnom \u00falo\u017eisku zdrojov\u00fdch k\u00f3dov: 1 bod.<\/del><\/li>\r\n<li>vyu\u017eitie externej kni\u017enice v projekte, ktor\u00e1 nebola uk\u00e1zan\u00e1 na cvi\u010den\u00ed: 1 bod, ak u\u017e kni\u017enica nebola explicitne spomenut\u00e1 v predo\u0161l\u00fdch \u010drt\u00e1ch<\/li>\r\n<li>podpora ve\u013ek\u00fdch displejov (tabletov): appka, ktor\u00e1 korektne podporuje mal\u00e9 i ve\u013ek\u00e9 zariadenia: 1 bod.<\/li>\r\n<li>kompletn\u00e1 lokaliz\u00e1cia aplik\u00e1cie s vyu\u017eit\u00edm resources. Aplik\u00e1cia nech je dostupn\u00e1 v dvoch \u013eubovo\u013en\u00fdch jazykoch\/n\u00e1re\u010diach: 1 bod.<\/li>\r\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Verzia z roku 2023. Technologick\u00e9 \u010drty m\u00f4\u017eu by\u0165 aktualizovan\u00e9 v priebehu semestra. Nutn\u00e9 po\u017eiadavky Projekt kompilujte vo\u010di API level 33 (Android 13) Minim\u00e1lna podporovan\u00e1 verzia je API level 26 (Android&hellip;<\/p>\n","protected":false},"author":22,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-222","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/pages\/222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/comments?post=222"}],"version-history":[{"count":8,"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/pages\/222\/revisions"}],"predecessor-version":[{"id":268,"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/pages\/222\/revisions\/268"}],"wp:attachment":[{"href":"https:\/\/ics.science.upjs.sk\/vma\/wp-json\/wp\/v2\/media?parent=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}