• Nebyly nalezeny žádné výsledky

DuˇsanJaniˇs AndroidAplikaceslouˇz´ıc´ıkesledov´an´ıaktivit Bakal´aˇrsk´apr´ace

N/A
N/A
Protected

Academic year: 2022

Podíl "DuˇsanJaniˇs AndroidAplikaceslouˇz´ıc´ıkesledov´an´ıaktivit Bakal´aˇrsk´apr´ace"

Copied!
65
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Ing. Michal Valenta, Ph.D.

vedoucí katedry doc. RNDr. Ing. Marcel Jiřina, Ph.D.

děkan

ZADÁNÍ BAKALÁŘSKÉ PRÁCE

Název: Android Aplikace sloužící ke sledování aktivit

Student: Dušan Janiš

Vedoucí: Ing. Miroslav Balík, Ph.D.

Studijní program: Informatika

Studijní obor: Webové a softwarové inženýrství Katedra: Katedra softwarového inženýrství Platnost zadání: Do konce letního semestru 2019/20

Pokyny pro vypracování

Vytvořte Android aplikaci pro sledování aktivit.

1. Celková správa uživatelů bude realizována pomocí cloudové služby Google Firebase (registrace uživatele, přihlášení uživatele, odhlášení uživatele).

2. Android aplikace bude umožňovat přihlášení pomocí emailu, účtu Google a účtu Facebook.

3. Android aplikace bude komunikovat s existující REST API částí, kde komunikací je myšleno:

a. založení nových záznamů (skupin nebo aktivit), b. editace existujících záznamů,

c. čtení existujících záznamů, d. mazání existujících záznamů,

To vše dle obecně známých principů popsaných v https://www.restapitutorial.com

4. Android aplikace bude umět odesílat a přijímat notifikace pomocí služby Google Firebase.

5. Student nastuduje, popíše a aplikuje nahrání android aplikace Google play a to i do její testovací verze.

6. Student nastuduje, popíše a aplikuje různé způsoby testování android aplikace. (unit testy, integrační testy, akceptační testy).

Seznam odborné literatury

Dodá vedoucí práce.

(2)
(3)

Bakal´ aˇrsk´ a pr´ ace

Android Aplikace slouˇ z´ıc´ı ke sledov´ an´ı aktivit

Duˇ san Janiˇ s

Katedra softwarov´eho inˇzen´yrstv´ı

Vedouc´ı pr´ace: Ing. Miroslav Bal´ık, Ph.D.

(4)
(5)

Podˇ ekov´ an´ı

Pˇredevˇs´ım chci podˇekovat sv´emu vedouc´ımu pr´ace, kter´y mˇe sv´ym pozitivn´ım pˇr´ıstupem a konstruktivn´ı kritikou podporoval po celou dobu zpracov´an´ı t´eto pr´ace. Z´aroveˇn bych r´ad podˇekoval sv´emu oponentovi a spolu s n´ım i spoleˇcnosti

(6)
(7)

Prohl´ sen´ı

Prohlaˇsuji, ˇze jsem pˇredloˇzenou pr´aci vypracoval(a) samostatnˇe a ˇze jsem uvedl(a) veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ym pokynem o etick´e pˇr´ıpravˇe vysokoˇskolsk´ych z´avˇereˇcn´ych prac´ı.

Beru na vˇedom´ı, ˇze se na moji pr´aci vztahuj´ı pr´ava a povinnosti vypl´yvaj´ıc´ı ze z´akona ˇc. 121/2000 Sb., autorsk´eho z´akona, ve znˇen´ı pozdˇejˇs´ıch pˇredpis˚u.

V souladu s ust.§46 odst. 6 tohoto z´akona t´ımto udˇeluji nev´yhradn´ı opr´avnˇen´ı (licenci) k uˇzit´ı t´eto moj´ı pr´ace, a to vˇcetnˇe vˇsech poˇc´ıtaˇcov´ych program˚u, jeˇz jsou jej´ı souˇc´ast´ı ˇci pˇr´ılohou, a veˇsker´e jejich dokumentace (d´ale souhrnnˇe jen

”D´ılo“), a to vˇsem osob´am, kter´e si pˇrej´ı D´ılo uˇz´ıt. Tyto osoby jsou opr´avnˇeny D´ılo uˇz´ıt jak´ymkoli zp˚usobem, kter´y nesniˇzuje hodnotu D´ıla, a za jak´ymkoli

´

uˇcelem (vˇcetnˇe uˇzit´ı k v´ydˇeleˇcn´ym ´uˇcel˚um). Toto opr´avnˇen´ı je ˇcasovˇe, teri- tori´alnˇe i mnoˇzstevnˇe neomezen´e. Kaˇzd´a osoba, kter´a vyuˇzije v´yˇse uvedenou licenci, se vˇsak zavazuje udˇelit ke kaˇzd´emu d´ılu, kter´e vznikne (byt’ jen zˇc´asti) na z´akladˇe D´ıla, ´upravou D´ıla, spojen´ım D´ıla s jin´ym d´ılem, zaˇrazen´ım D´ıla do d´ıla souborn´eho ˇci zpracov´an´ım D´ıla (vˇcetnˇe pˇrekladu), licenci alespoˇn ve v´yˇse uveden´em rozsahu a z´aroveˇn zpˇr´ıstupnit zdrojov´y k´od takov´eho d´ıla ale- spoˇn srovnateln´ym zp˚usobem a ve srovnateln´em rozsahu, jako je zpˇr´ıstupnˇen zdrojov´y k´od D´ıla.

(8)

Cesk´ˇ e vysok´e uˇcen´ı technick´e v Praze Fakulta informaˇcn´ıch technologi´ı

c 2020 Duˇsan Janiˇs. Vˇsechna pr´ava vyhrazena.

Tato pr´ace vznikla jako ˇskoln´ı d´ılo na ˇCesk´em vysok´em uˇcen´ı technick´em v Praze, Fakultˇe informaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena pr´avn´ımi pˇredpisy a mezin´arodn´ımi ´umluvami o pr´avu autorsk´em a pr´avech souvisej´ıc´ıch s pr´avem autorsk´ym. K jej´ımu uˇzit´ı, s v´yjimkou bez´uplatn´ych z´akonn´ych licenc´ı a nad r´amec opr´avnˇen´ı uveden´ych v Prohl´aˇsen´ı na pˇredchoz´ı stranˇe, je nezbytn´y sou- hlas autora.

Odkaz na tuto pr´aci

Janiˇs, Duˇsan.Android Aplikace slouˇz´ıc´ı ke sledov´an´ı aktivit. Bakal´aˇrsk´a pr´ace.

Praha: ˇCesk´e vysok´e uˇcen´ı technick´e v Praze, Fakulta informaˇcn´ıch techno- logi´ı, 2020.

(9)

Abstrakt

C´ılem t´eto bakal´aˇrsk´e pr´ace je vytvoˇrit aplikaci pro syst´em Android slouˇz´ıc´ı ke sledov´an´ı aktivit uˇzivatel˚u. Tato mobiln´ı aplikace komunikuje s jiˇz existuj´ıc´ı backend aplikac´ı a poskytuje uˇzivateli rozhran´ı, kter´e mu umoˇzˇnuje ukl´adat a n´aslednˇe sledovat sv´e aktivity. Souˇc´ast´ı pr´ace je i nahr´an´ı aplikace do sluˇzby Google Play a vypracov´an´ı test˚u pro aplikaci.

K samotn´e komunikaci s backend aplikac´ı je pouˇzito rozhran´ı REST. Pro ovˇeˇrov´an´ı identity uˇzivatel˚u za ´uˇcelem ukl´ad´an´ı dat na backend, je implemen- tov´ano pˇrihlaˇsov´an´ı pomoc´ı sluˇzby Google Firebase. Google Firebase je tak´e vyuˇz´ıv´an pro pˇrij´ım´an´ı notifikac´ı.

V´ysledn´e ˇreˇsen´ı splˇnuje funkcionalitu vymezenou v zad´an´ı pr´ace. Aplikace poskytuje pˇrihlaˇsov´an´ı pomoc´ı vˇsech hlavn´ıch pˇrihlaˇsovac´ıch sluˇzeb (Google, Facebook), aplikace umoˇzˇnuje uˇzivateli sledovat sv´e aktivity a aplikace je i schopna pˇrij´ımat notifikace zas´ılan´e backendem. K aplikaci jsou vypracov´any testy. Tato funkcionalita byla n´aslednˇe d´ale rozˇsiˇrov´ana nad r´amec vymezen´y zad´an´ım.

Kl´ıˇcov´a slova v´yvoj aplikace, mobiln´ı aplikace, Android, Google Firebase, REST, Kotlin

(10)

Abstract

The goal of this bachelor thesis is to create an Android application for activity tracking. This mobile application is to communicate with an already existing backend application and it provides the user with an interface which allows him to save and subsequently track his activities. The application will be a published on the Google Play service. Part of the thesis is implementation of tests for this application along with its upload to the Google Play service.

REST interface is used for communication with the backend application.

To save user data to backend a user authentication is required. Authentication is implemented using Google Firebase service. Google Firebase is also used for receiving of notifications.

The final solution implements the functionality as described in the thesis assignment. Application provides using sign up and sing in using all the main identity providers (Google, Facebook), the user can track his activities and the application can receive notifications sent by the backend application. Tests for this application are implemented. This functionality has been further extended above what is required by the thesis assignment.

Keywords application development, mobile application, Android, Google Firebase, REST, Kotlin

viii

(11)

Obsah

Uvod´ 1

1 C´ıl pr´ace 3

2 Anal´yza 5

2.1 Anal´yza pouˇzit´ych technologi´ı . . . 5

2.2 Funkˇcn´ı poˇzadavky . . . 8

2.3 Nefunkˇcn´ı poˇzadavky . . . 9

2.4 Anal´yza konkurenˇcn´ıch aplikac´ı . . . 9

3 N´avrh 13 3.1 Architektura aplikace . . . 13

3.2 Diagram komunikac´ı . . . 14

3.3 Datov´y model . . . 15

4 Android aplikace 17 4.1 Struktura aplikace . . . 17

4.2 Pˇrihlaˇsov´an´ı . . . 22

4.3 REST API . . . 23

4.4 Notifikace . . . 24

4.5 Lokalizace . . . 25

4.6 V´yvojov´e n´astroje . . . 25

4.7 Verzov´an´ı . . . 25

4.8 Pouˇzit´e extern´ı knihovny . . . 25

5 Backend aplikace 27 5.1 Stav backendu . . . 27

5.2 Rozˇs´ıˇren´ı . . . 28

6 Testov´an´ı 31

(12)

6.1 Unit testy . . . 32

6.2 Integraˇcn´ı testy . . . 32

6.3 Akceptaˇcn´ı testy . . . 33

6.4 Uˇzivatelsk´e testov´an´ı . . . 35

7 Nahr´an´ı na Google Play 37

8 Dalˇs´ı rozvoj 39

Z´avˇer 41

Literatura 43

A Seznam pouˇzit´ych zkratek 47

B Obsah pˇriloˇzen´eho CD 49

x

(13)

Seznam obr´ azk˚ u

2.1 Tabulka ukazuj´ıc´ı procentu´aln´ı zastoupen´ı jednotliv´ych verz´ı An- droidu na uˇzivatelsk´ych zaˇr´ızen´ıch . . . 6 3.1 Komunikaˇcn´ı diagram zobrazuj´ıc´ı pˇrihl´aˇsen´ı v Android aplikaci a

n´asledn´e naˇcten´ı vˇsech skupin uˇzivatele z backendu . . . 14 3.2 Tento diagram zn´azorˇnuje tˇr´ıdy a jejich vazby, kter´e tvoˇr´ı datov´y

model aplikace. . . 15 4.1 Pˇrihlaˇsovac´ı aktivita po ´uspˇeˇsn´em pˇrihl´aˇsen´ı . . . 18 4.2 Skupinov´a aktivita zobrazuj´ıc´ı sv˚uj obsah . . . 19 4.3 Skupinov´a aktivita zobrazuj´ıc´ı aktivity seskupen´e po dnech . . . . 20 4.4 Grafov´a aktivita zobrazuj´ıc´ı kol´aˇcov´y graf . . . 21 4.5 Kalend´aˇrov´a aktivita zobrazuj´ıc´ı nˇekolik z´aznam˚u . . . 22 6.1 Graf zobrazuj´ıc´ı vztah poˇctu test˚u jednotliv´ych typ˚u ku jejich vˇernosti

realitˇe, d´elce spouˇstˇen´ı, n´aroˇcnosti ´udrˇzby a debugov´an´ı. . . 31

(14)
(15)

Seznam tabulek

2.1 Srovn´an´ı aplikac´ı . . . 11

(16)
(17)

Uvod ´

V dneˇsn´ı hektick´e dobˇe je pro mnoho lid´ı snadn´e ztratit se ve vˇsech sv´ych povinnostech a aktivit´ach. C´ılem t´eto pr´ace je tedy vytvoˇrit mobiln´ı aplikaci, kter´a bude umoˇzˇnovat uˇzivatel˚um l´epe si sv´e aktivity sledovat, aby si byli v´ıce vˇedomi toho, jak nakl´adaj´ı se sv´ym drahocenn´ym ˇcasem.

Nelze v dneˇsn´ı dobˇe upˇr´ıt d˚uleˇzitost mobiln´ıch technologi´ı. Ty se v po- sledn´ıch letech posunuly znaˇcnˇe dopˇredu. Telefon uˇz uˇzivateli neslouˇz´ı pouze jako komunikaˇcn´ı zaˇr´ızen´ı, ale jedn´a se o pˇrenosn´y poˇc´ıtaˇc, kter´y lze pouˇz´ıt pro organizaci ˇcasu a jako z´abavn´ı platformu. Nav´ıc d´ıky masov´emu rozˇs´ıˇren´ı chytr´ych telefon˚u jsou mobiln´ı aplikace dostupn´e vˇetˇsinˇe lid´ı.

Pr´ace je zejm´ena urˇcena pro spoleˇcnost Skills Fighters. Jedn´a se o komu- nitu program´ator˚u, kter´ym je problematika spr´avy ˇcasu d˚uvˇernˇe zn´am´a. To vˇsak neznamen´a, ˇze tato aplikace nebude vyuˇziteln´a i pro ˇsirokou veˇrejnost.

Z v´yˇse uveden´ych d˚uvod˚u jsem shledal t´ema jako zaj´ımav´e a rozhodl jsem se na nˇem pracovat. Velice oceˇnuji fakt, ˇze t´ema je praktick´eho r´azu a v kaˇzdodenn´ım ˇzivotˇe m˚uˇze b´yt pro aplikaci vyuˇzit´ı.

(18)
(19)

Kapitola 1

C´ıl pr´ ace

C´ılem t´eto bakal´aˇrsk´e pr´ace je vytvoˇrit Android aplikaci slouˇz´ıc´ı ke sledov´an´ı aktivit. V aplikaci je tˇreba identifikovat uˇzivatele za ´uˇcelem ukl´ad´an´ı dat na backend. Spr´ava uˇzivatel˚u bude tedy realizov´ana pomoc´ı sluˇzby Google Fire- base, kde si bude uˇzivatel moci vytvoˇrit ´uˇcet na z´akladˇe sv´eho emailu nebo se pˇrihl´asit pomoc´ı ´uˇctu Google ˇci ´uˇctu Facebook. D´ale bude aplikace komu- nikovat s jiˇz existuj´ıc´ı backend aplikac´ı a to pomoc´ı rozhran´ı REST, pˇriˇcemˇz komunikac´ı je myˇsleno zakl´ad´an´ı, editace, ˇcten´ı a maz´an´ı z´aznam˚u a to skupin ˇ

ci aktivit.

Aplikace bude schopna odes´ılat a pˇrij´ımat notifikace, pˇriˇcemˇz toto bude implementov´ano opˇet pomoc´ı sluˇzby Google Firebase. D´ılˇc´ım c´ılem pr´ace je pak aplikace r˚uzn´ych zp˚usob˚u automatizovan´eho testov´an´ı jako jsou unit testy, integraˇcn´ı testy ˇci testy akceptaˇcn´ı. Na z´avˇer bude aplikace nahr´ana do sluˇzby Google Play a to i do jej´ı testovac´ı verze.

(20)
(21)

Kapitola 2

Anal´ yza

2.1 Anal´ yza pouˇ zit´ ych technologi´ı

Android je operaˇcn´ı syst´em s linuxov´ym j´adrem, kter´y se v dneˇsn´ı dobˇe vy- skytuje na valn´e vˇetˇsinˇe mobiln´ıch zaˇr´ızen´ı na trhu. D´ıky jeho rozˇs´ıˇren´ı a ˇsirok´e uˇzivatelsk´e z´akladnˇe m˚uˇze aplikace dos´ahnout vˇetˇs´ıho ´uspˇechu neˇz na syst´emech ostatn´ıch. Dalˇs´ı v´yhodou vysok´eho mnoˇzstv´ı uˇzivatel˚u je i velk´a v´yvoj´aˇrsk´a komunita. V´yvoj aplikac´ı pro syst´em Android usnadˇnuje tedy i velk´a m´ıra pomoc´ı ze strany komunity v´yvoj´aˇr˚u[1].

2.1.1 Jazyky pro v´yvoj aplikac´ı

Ofici´aln´ı podporu pro v´yvoj aplikac´ı mˇela pˇri vyd´an´ı syst´emu Android pouze Java. Java je multiplatformn´ı a velmi rozˇs´ıˇren´a. D´ıky tomu pro ni existuje velk´e mnoˇzstv´ı knihoven a nen´ı probl´em s podporou ze strany ostatn´ıch v´yvoj´aˇr˚u, vzhledem k jiˇz zm´ınˇen´e velk´e uˇzivatelsk´e z´akladnˇe. Java je ovˇsem jazyk navrˇzen´y jiˇz pˇred v´ıce neˇz dvaceti lety, a proto m´a ˇradu nev´yhod. Pˇri zmˇen´ach v sa- motn´em jazyce, je nutn´e hledˇet na zpˇetnou kompatibilitu a je tedy problema- tick´e zav´adˇet funkce, kter´e obsahuj´ı modernˇejˇs´ı jazyky.

Proto se v posledn´ı dobˇe zaˇcal pouˇz´ıvat jazyk Kotlin. Jazyk Kotlin vy- vinut´y spoleˇcnost´ı Jetbrains je od z´aklad˚u navrˇzen k pln´e kompatibilitˇe s jazykem Java. Je plnˇe schopen vyuˇz´ıvat knihoven Javy, ale z´aroveˇn obsahuje funkce, kter´e usnadˇnuj´ı v´yvoj aplikac´ı a podporuj´ı psan´ı ˇcist´eho k´odu. V roce 2017 byl na konferenci Google I/O prohl´aˇsen za ofici´alnˇe podporovan´y ja- zyk pro v´yvoj Android aplikac´ı, nejsou tedy probl´emy s podporou a vˇsechny ofici´aln´ı n´avody pro v´yvoj´aˇre, jsou psan´e jak pro jazyk Java, tak pro jazyk Kotlin[2].

(22)

2. Anal´yza

2.1.2 Verze syst´emu Android

Jako nejniˇzˇs´ı kompatibiln´ı verze syst´emu Android byla zvolena verze 5.0.

T´ımto je zajiˇstˇena kompatibilita aplikace pro 90% uˇzivatel˚u syst´emu An- droid. Verze byla volena jednak na z´akladˇe poˇctu uˇzivatel˚u, jednak na z´akladˇe poˇzadovan´e funkcionality. Sluˇzba Firebase Cloud Messaging totiˇz vyˇzaduje Android API alespoˇn verze 21. Ta je poskytov´ana pr´avˇe verz´ı 5.0 syst´emu Android.

Z´aroveˇn d´ıky snaze zvolit verzi syst´emu Android co nejniˇzˇs´ı moˇznou, je aplikace potencion´alnˇe dostupn´a velk´emu mnoˇzstv´ı uˇzivatel˚u. Na z´akladˇe dat o uˇz´ıv´an´ı syst´emu Android, kter´a jsou dostupn´a z ofici´aln´ıch zdroj˚u, je mnoˇzstv´ı uˇzivatel˚u pouˇz´ıvaj´ıc´ıch verze Androidu niˇzˇs´ı neˇz 5.0 pouh´ych 10,7%[3].

Obr´azek 2.1: Tabulka ukazuj´ıc´ı procentu´aln´ı zastoupen´ı jednotliv´ych verz´ı An- droidu na uˇzivatelsk´ych zaˇr´ızen´ıch

2.1.3 Firebase

Google Firebase je platforma pro v´yvoj mobiln´ıch aplikac´ı s podporou pro vˇsechny hlavn´ı druhy mobiln´ıch zaˇr´ızen´ı, tedy jak Android, tak i iOS. V r´amci t´eto platformy jsou v´yvoj´aˇr˚um poskytov´any n´astroje a sluˇzby k rozˇs´ıˇren´ı moˇznost´ı a k usnadnˇen´ı v´yvoje mobiln´ıch aplikac´ı. Vˇetˇsina sluˇzeb je posky- tov´ana alespoˇn v z´akladn´ı variantˇe zcela zdarma[4].

6

(23)

2.1. Anal´yza pouˇzit´ych technologi´ı 2.1.3.1 Firebase Authentication

V aplikaci je nutn´a identifikace uˇzivatel˚u, za ´uˇcelem ukl´ad´an´ı dat na cloudu a jejich synchronizaci mezi zaˇr´ızen´ımi. Proto je tˇreba zajistit, aby se kaˇzd´y uˇzivatel mohl pˇrihl´asit. Pˇri zajiˇstˇen´ı pˇrihl´aˇsen´ı je nutn´e se zamˇeˇrit prim´arnˇe na bezpeˇcnost. Obecnˇe implementovat si autentizaˇcn´ı syst´em zcela s´am, je ˇreˇsen´ım ˇspatn´ym, jelikoˇz je zde velk´y prostor pro chyby, kter´e by mohly ohrozit osobn´ı data uˇzivatel˚u.

Firebase Authentication poskytuje moˇznost autentizovat uˇzivatele pomoc´ı hlavn´ıch poskytovatel˚u pˇrihl´aˇsen´ı - Google, Facebook ˇci Twitter, a d´ale po- skytuje moˇznost autentizovat uˇzivatele jen na z´akladˇe jejich emailu. V tomto pˇr´ıpadˇe si Google Firebase ukl´ad´a email i heslo ve sv´e datab´azi. V´yvoj´aˇr se tedy nemus´ı starat o zabezpeˇcen´ı pˇrihlaˇsovac´ıch ´udaj˚u, nebot’ se o vˇse star´a Google Firebase. Ten po pˇrihl´aˇsen´ı poskytne v´yvoj´aˇri

”token“, kter´y slouˇz´ı jako identifik´ator, pomoc´ı nˇejˇz mohou dalˇs´ı sluˇzby identifikovat pˇrihl´aˇsen´eho uˇzivatele[5].

2.1.3.2 Firebase Cloud Messaging

Jedn´a se o sluˇzbu poskytuj´ıc´ı pos´ıl´an´ı zpr´av a upozornˇen´ı mezi zaˇr´ızen´ımi.

Funguje napˇr´ıˇc platformami, je tedy pouˇziteln´a jak na Androidu tak i na syst´emu iOS a lze ji pouˇz´ıt i pro webov´e klientsk´e aplikace. Zajiˇst’uje bezpeˇcn´e doruˇcen´ı zpr´av z backend aplikace skrz webovou sluˇzbu Firebase Cloud Messa- ging aˇz ke klient˚um. Klienty identifikuje pomoc´ı unik´atn´ıch identifik´ator˚u, kter´e jsou pˇridˇeleny kaˇzd´emu zaˇr´ızen´ı, na nˇemˇz je aplikace nainstalov´ana[6].

2.1.4 REST API

Representational State Transfer, ve zkratce REST je architektura rozhran´ı urˇcen´a pro distribuovan´e prostˇred´ı. Pod pojmem distribuovan´a prostˇred´ı je myˇsleno to, ˇze ˇc´asti programu bˇeˇz´ı na r˚uzn´ych stroj´ıch a spolu n´aslednˇe ko- munikuj´ı s vyuˇzit´ım s´ıtˇe. REST navrhnul a popsal v roce 2000 Roy Fielding v r´amci sv´e disertaˇcn´ı pr´ace. V t´eto sv´e pr´aci, Fielding tak´e odvozuje principy RESTu na z´akladˇe zn´am´ych pˇr´ıstup˚u k architektuˇre[7].

Za z´akladn´ı principy RESTu stanovil, ˇze

• stav aplikace a jej´ı chov´an´ı je vyj´adˇreno takzvan´ym zdrojem;

• kaˇzd´y zdroj m´a unik´atn´ı identifik´ator (URL ˇci URN);

• je definov´an jednotn´y pˇr´ıstup pro z´ısk´an´ı a manipulaci se zdrojem v podobˇe operac´ı CRUD;

• zdroj m˚uˇze m´ıt r˚uzn´e reprezentace (XML, HTML, JSON).

(24)

2. Anal´yza

Pro komunikaˇcn´ı protokol pak plat´ı, ˇze

• klient / server - oddˇelen´ı odpovˇednosti;

• bezestavovost - kaˇzd´y poˇzadavek mus´ı obsahovat vˇsechny informace nutn´e k jeho vykon´an´ı;

• cache - kaˇzd´y poˇzadavek lze explicitnˇe oznaˇcit, zdali m´a b´yt moˇznost jej uloˇzit do cache. Toto umoˇzˇnuje zv´yˇsit v´ykonnost komunikace mezi klientem a serverem;

• Code-On-Demand - funkcionalita klienta lze rozˇs´ıˇrit k´odem, kter´y zaˇsle server;

• vrstevnatost - umoˇzˇnuje skl´ad´an´ı vrstev poskytuj´ıc´ı sluˇzby za ´uˇcelem zv´yˇsen´ı variabilnosti.

Krom RESTu existuj´ı i dalˇs´ı pˇr´ıstupy k ˇreˇsen´ı distribuovan´e architektury, jako je Remote Procedure Call (RPC).

2.2 Funkˇ cn´ı poˇ zadavky

• Pˇrihl´aˇsen´ı do Firebase Pomoc´ı emailu Pomoc´ı ´uˇctu Google Pomoc´ı ´uˇctu Facebook

• Odhl´aˇsen´ı z Firebase

• Smaz´an´ı ´uˇctu ve Firebase

• Komunikace s backend aplikac´ı pomoc´ı REST API Zaloˇzen´ı skupiny

Zaloˇzen´ı aktivity Smaz´an´ı skupiny Smaz´an´ı aktivity

• Pˇrij´ım´an´ı notifikac´ı s vyuˇzit´ım Google Firebase 8

(25)

2.3. Nefunkˇcn´ı poˇzadavky

2.3 Nefunkˇ cn´ı poˇ zadavky

• Testov´an´ı aplikace Unit testy Integraˇcn´ı testy Akceptaˇcn´ı testy

• Publikace na Google Play

• Minim´aln´ı verze syst´emu Android 5.0

2.4 Anal´ yza konkurenˇ cn´ıch aplikac´ı

Hled´an´ı konkurenˇcn´ıch aplikac´ı v Google Play bylo prov´adˇeno na z´akladˇe kl´ıˇcov´ych slov pomoc´ı v´yraz˚u

”activity tracker“,

”habit tracker“ a

”daily log“.

Pod pojmem

”activity tracker“ se nach´az´ı aplikace slouˇz´ıc´ı prim´arnˇe ke sledov´an´ı fyzick´ych aktivit tedy toho, jak moc se uˇzivatel h´ybe a v jak´e je fyzick´e kondici. ˇCasto to b´yvaj´ı aplikace spolupracuj´ıc´ı se smart hodinkami a podobn´ym pˇr´ısluˇsenstv´ım, kter´e sleduj´ı moment´aln´ı stav tˇelesn´ych funkc´ı nositele, tj. tep, krevn´ı tlak ˇci tˇelesnou teplotu. Toto ovˇsem nebude ´uˇcelem vyv´ıjen´e aplikace, a proto ˇz´adn´e takto nalezen´e aplikace ke srovn´an´ı vybr´any nebyly.

Pˇri hled´an´ı pomoc´ı v´yrazu

”habit tracker“ byly nalezeny aplikace, kter´e jsou ´uˇcelovˇe bl´ıˇze aplikaci, kter´a je vytv´aˇrena v r´amci t´eto pr´ace. Jsou to apli- kace, kter´e maj´ı za ´ukol sledovat a ukl´adat, kdy nˇejak´a aktivita nastala a tedy i jak ˇcasto. Tyto aplikace slouˇz´ı k vytvoˇren´ı n´avyk˚u a k jejich zaznamen´av´an´ı.

Uˇzivatel si pak m˚uˇze vyb´ırat z r˚uzn´ych aktivit a pl´an˚u, kter´e aplikace nab´ızej´ı.

Poskytuj´ı moˇznosti pl´anovat si ˇzivot dopˇredu. ˇCasto obsaˇzen´a funkce je ka- lend´aˇr, ve kter´em si uˇzivatel s´am zaklik´av´a, jestli sv˚uj c´ıl splnil nebo ne.

Posledn´ı v´yraz pouˇzit´y pˇri pr˚uzkumu je

”daily log“. Takto nalezen´e apli- kace, byly ˇcasto aplikace slouˇz´ıc´ı bud’ jako den´ıˇcky, nebo aplikace, kter´e po- skytovaly moˇznost vytv´aˇret reporty ve firemn´ım prostˇred´ı.

Pˇri v´ybˇeru konkurenˇcn´ıch aplikac´ı pro srovn´an´ı byly zvoleny tyto tˇri apli- kace, onda,HabitBull a Daily Log.

2.4.1 Aplikace onda

Aplikace onda je zcela zdarma a poskytuje sledov´an´ı aktivit. Uˇzivatel si m˚uˇze s´am vytvoˇrit aktivitu, zvolit si jej´ı kategorii z pˇredem dan´eho seznamu a na- stavit ˇcas, jak dlouho m´a tato aktivita trvat. N´aslednˇe m˚uˇze uˇzivatel tuto aktivitu spustit. To m´a za n´asledek spuˇstˇen´ı ˇcasovaˇce, coˇz by mˇelo uˇzivatele motivovat k vykon´av´an´ı dan´e aktivity. Uˇzivatel m´a d´ale moˇznost zobrazit si seznam j´ım vytvoˇren´ych aktivit. Aplikace je ryze offline.

(26)

2. Anal´yza

Aplikace je rozdˇelena do tˇr´ı obrazovek. Prvn´ı z nich zobrazuje seznam jiˇz probˇehl´ych aktivit. U kaˇzd´e takto probˇehl´e aktivity je zobrazeno jej´ı datum a trv´an´ı. Druh´a obrazovka nab´ız´ı nˇekolik z´akladn´ıch jiˇz vytvoˇren´ych aktivit a moˇznost vytv´aˇret nov´e. Na t´eto obrazovce je uˇzivatel tak´e spouˇst´ı. Posledn´ı obrazovka pak uˇzivateli poskytuje z´akladn´ı statistiku o tom, kolik ˇcasu str´avil vybranou aktivitou[8].

2.4.2 HabitBull

HabitBull umoˇzˇnuje uˇzivateli vytvoˇrit si vlastn´ı aktivity. Pˇri vytv´aˇren´ı akti- vity si uˇzivatel vol´ı, do jak´e skupiny aktivit ji chce zaˇradit, jak m´a aplikace sledovat plnˇen´ı t´eto aktivity a n´azev zvolen´e aktivity. N´asledn´e plnˇen´ı akti- vit je zapisov´an do kalend´aˇre obsaˇzen´eho v aplikaci. V tomto kalend´aˇri je vidˇet, nakolik je uˇzivatel v plnˇen´ı j´ım vymyˇslen´ych aktivit ´uspˇeˇsn´y. C´ılem t´eto aplikace je budovat v ˇclovˇeku n´avyky t´ım, ˇze mu ukazuje, jestli se mu daˇr´ı plnit aktivity kaˇzd´y den, nebo zda nˇekter´e dny vynech´av´a. Aplikace po- skytuje i moˇznost vytvoˇren´ı profilu, toto ovˇsem ve verzi zdarma poskytuje pouze moˇznost uzamˇcen´ı aplikace heslem. V pr´emiov´e verzi je poskytnuto i z´alohov´an´ı dat na cloud.

Tato aplikace m´a pomˇernˇe jednoduch´e uˇzivatelsk´e rozhran´ı. Na hlavn´ı str´ance zobrazuje pro kaˇzdou zvolenou aktivitu kalend´aˇr s ´uspˇeˇsn´ymi dny a pod n´ım graf zn´azorˇnuj´ıc´ı, zdali kaˇzd´y den pln´ı svou tuto aktivitu ˇci ni- koliv. V hlavn´ım menu aplikace se pak nach´az´ı tlaˇc´ıtko pˇridat dalˇs´ı aktivitu nebo zmˇenit zobrazen´ı kalend´aˇre z t´ydenn´ıho na mˇes´ıˇcn´ı. Dalˇs´ı moˇznosti, jako zakoupen´ı pr´emiov´e verze, se nach´azej´ı v menu na lev´e stranˇe obrazovky[9].

2.4.3 Daily Log

Daily Log umoˇzˇnuje uˇzivateli vytv´aˇret si kategorie, pro kter´e si vol´ı jeden ze tˇr´ı typ˚u, a to boolean, ˇc´ıslo s jednotkou ˇci ˇretˇezec. N´aslednˇe si uˇzivatel pro j´ım zvolenou kategorii zaznamen´av´a, ve kter´e dny doˇslo k aktivitˇe, a to v kalend´aˇri obsaˇzen´em v aplikaci. U jednotliv´ych kategori´ı si m˚uˇze uˇzivatel zobrazovat jednoduch´e statistiky v podobˇe grafu zn´azorˇnuj´ıc´ıho data zapsan´e v aplikaci.

Aplikace sice m´a tlaˇc´ıtko Import, kter´e by mohlo umoˇzˇnovat import dat ze serializovan´e podoby, ale nebyla nalezena moˇznost data z aplikace exportovat.

Aplikace nevyuˇz´ıv´a pˇripojen´ı k Internetu.

Hlavn´ı obrazovka aplikace je na zaˇc´atku pr´azdn´a, pozdˇeji se v n´ı zobra- zuj´ı vytvoˇren´e kategorie. Stisknut´ım tlaˇc´ıtka pro pˇrid´an´ı kategorie se uˇzivateli zobraz´ı dialogov´e okno, v nˇemˇz si vytvoˇr´ı kategorii. Zvolen´ım kategorie se otevˇre kalend´aˇr zobrazuj´ıc´ı aktivity. Zde m˚uˇze uˇzivatel zapisovat aktivity do kalend´aˇre a z´aroveˇn vid´ı aktivity uˇz dˇr´ıve zapsan´e[10].

10

(27)

2.4. Anal´yza konkurenˇcn´ıch aplikac´ı 2.4.4 Srovn´an´ı aplikac´ı

Zde je srovn´an´ı aplikac´ı na z´akladˇe jejich funkcionalit. Vˇsechny tyto aplikace funguj´ı pouze v offline reˇzimu. Pouze aplikace HabitBull poskytuje moˇznost ukl´adat si data na cloud a to pouze v pr´emiov´e verzi.

Funkce Activity Tracker onda HabitBull Daily Log

Vytv´aˇren´ı aktivit ANO ANO ANO ANO

Vytv´aˇren´ı skupin ANO NE NE NE

Nutnost pˇrihl´aˇsen´ı ANO NE NE NE

Ukl´ad´an´ı na cloud ANO NE Pouze premium NE

Moˇznost pr´ace offline NE ANO ANO ANO

Tabulka 2.1: Srovn´an´ı aplikac´ı

Uˇzivatelsk´e rozhran´ı vˇsech tˇechto aplikac´ı m´a nˇekolik spoleˇcn´ych prvk˚u.

Jedna obrazovka typicky slouˇz´ı k vytv´aˇren´ı aktivit a aˇz dalˇs´ı k jejich zob- razov´an´ı. ˇCasto je v aplikac´ıch uˇz pˇredem pˇripraven´ych nˇekolik aktivit na v´ybˇer. Z´aroveˇn aplikace poskytuj´ı pˇrehledn´y zp˚usob, jak aktivity zpˇetnˇe sle- dovat. Kalend´aˇr je k dispozici v aplikac´ıchHabitBull aDaily Log.

(28)
(29)

Kapitola 3

avrh

3.1 Architektura aplikace

Pˇri v´yvoji aplikace byl kladen d˚uraz na rozdˇelen´ı aplikace na jednotliv´e vrstvy a to dle architektonick´eho vzoru MVC. Dle vzoru MVC se aplikace skl´ad´a ze tˇr´ı oddˇelen´ych vrstev[11]:

Model, kter´y ukl´ad´a a pak n´aslednˇe poskytuje data, s nimiˇz aplikace pracuje;

Viewobsahuje vˇse, co se zobrazuje na obrazovku a s ˇc´ım uˇzivatel inter- aguje;

Controller je zodpovˇedn´y za logiku aplikace a zprostˇredkov´av´a komu- nikaci mezi vrstvamiModel a View.

Android aplikac´ım je toto rozdˇelen´ı do jist´e m´ıry pˇrirozen´e.Controller je reprezentov´an aktivitami. Ty jsou zodpovˇedn´e za logiku aplikace a komunikuj´ı s View, kter´y je reprezentov´an

”layout“ soubory ve form´atu XML. V tˇechto souborech je pops´an samotn´y vzhled aplikace. Typicky existuje alespoˇn jeden pro kaˇzdou aktivitu.Model samotn´y je pak tvoˇren entitn´ımi tˇr´ıdami a klienty, kteˇr´ı zajiˇst’uj´ı komunikuj´ı s backendem.

D˚uleˇzitost pouˇzit´ı spr´avn´e architektury a jej´ı dodrˇzov´an´ı tkv´ı jednak ve vylepˇsen´ı udrˇzovatelnosti aplikace, je tedy snazˇs´ı na n´ı v budoucnu prov´adˇet dalˇs´ı zmˇeny a aplikaci rozˇsiˇrovat, jednak tato separace usnadˇnuje psan´ı test˚u.

(30)

3. N´avrh

3.2 Diagram komunikac´ı

Diagram komunikac´ı zde popisuje komunikaci mezi Android aplikac´ı, kter´a se pˇrihlaˇsuje do Google Firebase a n´aslednˇe uˇz pak komunikuje pouze s backend aplikac´ı. Pro identifikaci pos´ıl´a Android aplikace backendu identifikaˇcn´ı to- ken, kter´y Android aplikace dostala od sluˇzby Google Firebase pˇri pˇrihl´aˇsen´ı.

Pomoc´ı tohoto tokenu si pak backend aplikace ovˇeˇruje uˇzivatele, aniˇz by musel pracovat pˇr´ımo s pˇrihlaˇsovac´ımi ´udaji uˇzivatele.

Android App Firebase

Backend App

2.1 showGroups(firebaseToken)

2.4 returnGroups 2.3 returnUserUid 1.1 loginRequest(loginInfo)

1.2 FirebaseToken

2.2 getUserUid(firebaseToken)

Obr´azek 3.1: Komunikaˇcn´ı diagram zobrazuj´ıc´ı pˇrihl´aˇsen´ı v Android aplikaci a n´asledn´e naˇcten´ı vˇsech skupin uˇzivatele z backendu

14

(31)

3.3. Datov´y model

3.3 Datov´ y model

Datov´y model popisuje strukturu dat, s nimiˇz pracuje tato aplikace. Z´aklad modelu byl vytvoˇren jiˇz dˇr´ıve pˇri tvorbˇe backend aplikace. Datov´y model se skl´ad´a z:

Group reprezentuje skupinu, kter´a d´ale sdruˇzuje dalˇs´ı skupiny nebo aktivity dohromady. Pro kaˇzdou skupinu je specifikov´an n´azev;

Activityje v podstatˇe pouze ˇcasov´y z´aznam. Vˇzdy spad´a do nˇekter´e ze skupin. V´yznam aktivitˇe dod´av´a skupina, do n´ıˇz aktivita spad´a;

User je z´aznam o uˇzivateli, s n´ımˇz pracuje backend aplikace. Android aplikace samotn´a s n´ım nepracuje pˇr´ımo, v Android aplikaci je uˇzivatel identifikov´an pouze pomoc´ı sv´eho Firebase identifik´atoru. Se z´aznamem o uˇzivateli pracuje prim´arnˇe backend, kter´y jej ukl´ad´a v datab´azi;

UIOptionsreprezentuj´ı grafick´e informace skupiny.UIOptionsmohou obsahovat ikonu skupiny, jej´ı barvu nebo popˇr´ıpadˇe jednotku skupiny.

Ta popisuje, co jednotliv´e aktivity ve skupinˇe vyjadˇruj´ı.

V pr˚ubˇehu v´yvoje Android aplikace byl tento model rozˇs´ıˇren o tˇr´ıduUIOp- tions, kter´a rozˇsiˇruje tˇr´ıduGroup o grafick´a data. Tˇr´ıdaUser byla rozˇs´ıˇrena o polefcmTokens, obsahuj´ıc´ı seznam identifik´ator˚u zaˇr´ızen´ı, na kter´ych je dan´y uˇzivatel pˇrihl´aˇsen´y pro ´uˇcely sluˇzby Firebase Messaging.

Group createdAt updatedAt name

UIOptions color

unit icon

Activity createdAt updatedAt timestamp User

firebaseUid fcmTokens

Obr´azek 3.2: Tento diagram zn´azorˇnuje tˇr´ıdy a jejich vazby, kter´e tvoˇr´ı datov´y model aplikace.

(32)
(33)

Kapitola 4

Android aplikace

Aplikace byla vyv´ıjena v pr˚ubˇehu roku 2019 ve spolupr´aci se spoleˇcnost´ı Skills Fighters. Spoleˇcnost poskytla backend aplikaci, firemn´ı GitHub ´uˇcet, firemn´ı Google ´uˇcet pro v´yvoj Android aplikac´ı a pˇr´ıstup k firemn´ımu ´uˇctu na Amazon Web Services pro ´uˇcely nahr´an´ı backendu. D´ale byly poskytov´any konzultace, co se v´yvoje samotn´e Android aplikace t´yˇce. Aplikace je napsan´a kompletnˇe v Kotlinu, kter´y byl zvolen v r´amci snahy pouˇzit co nejaktu´alnˇejˇs´ı technologie a nejnovˇejˇs´ı pˇr´ıstupy k v´yvoji Android aplikac´ı.

4.1 Struktura aplikace

Aplikace je rozdˇelena do ˇctyˇr aktivit. Z pohledu uˇzivatele aplikace funguje tak, ˇ

ze se uˇzivatel pouze pohybuje mezi tˇemito ˇctyˇrmi aktivitami v z´avislosti na ˇ

cinnosti, kterou pr´avˇe vykon´av´a. Pokud se pˇrihlaˇsuje, o vˇse s t´ım souvisej´ıc´ı se star´a pouzeAuthenticationActivity, pokud si uˇzivatel zobrazuje nebo manipu- luje se skupinami ˇci z´aznamy v nich, nach´az´ı se vGroupActivity. O zobrazov´an´ı graf˚u souvisej´ıc´ıch se skupinou se star´a aktivita GraphActivity. Posledn´ı akti- vitou je pak CalendarActivity, ta zobrazuje uˇzivateli vˇsechny z´aznamy pr´avˇe zvolen´e skupiny v kalend´aˇri. Aktivity jsou jasnˇe rozdˇeleny na z´akladˇe jejich

´

uˇcelu. Aktivity d´ale pracuj´ı s dalˇs´ımi ˇc´astmi aplikace, jako jsou klienti pro ko- munikaci s backendem a adapt´ery pro zpracov´an´ı pˇrijat´ych dat od backendu do podoby vhodn´e k zobrazen´ı.

(34)

4. Android aplikace

4.1.1 AuthenticationActivity

Tato aktivita zajiˇst’uje uˇzivateli veˇskerou funkcionalitu spojenou s pˇrihl´aˇsen´ım.

Jelikoˇz je pˇrihl´aˇsen´ı pro funkˇcnost aplikace nutnost, je toto tak´e prvn´ı aktivita, kter´a se uˇzivateli pˇri spuˇstˇen´ı aplikace zobraz´ı. Stisknut´ım tlaˇc´ıtka pˇrihl´asit se, dojde k zavol´an´ı metody knihovny FirebaseUI, kter´a se o samotn´e pˇrihl´aˇsen´ı uˇzivatele star´a.

Po pˇrihl´aˇsen´ı m´a uˇzivatel moˇznost pokraˇcovat d´ale do aplikace a to k zob- razov´an´ı skupin. Stisknut´ım tlaˇc´ıtka Pokraˇcovat se nastartuje GroupActivity a aplikace ji pˇresune do popˇred´ı. D´ale se uˇzivateli v hlavn´ım menu aplikace na horn´ı liˇstˇe zpˇr´ıstupn´ı moˇznost odhl´aˇsen´ı z aplikace a moˇznost smaz´an´ı sv´eho

´

uˇctu v aplikaci.

Obr´azek 4.1: Pˇrihlaˇsovac´ı aktivita po ´uspˇeˇsn´em pˇrihl´aˇsen´ı

V pˇr´ıpadˇe, ˇze se uˇzivatel z aplikace v pr˚ubˇehu posledn´ıho pouˇz´ıv´an´ı ne- odhl´asil, z˚ust´av´a pˇrihl´aˇsen´y i pˇri dalˇs´ım spuˇstˇen´ı aplikace a opˇetovn´e pˇrihl´aˇsen´ı nen´ı vyˇzadov´ano.

V hlavn´ım menu aplikace se kromˇe moˇznost´ı odhl´aˇsen´ı a smaz´an´ı ´uˇctu nach´azej´ı tak´e dalˇs´ı dvˇe moˇznosti a to Info a Licence. Moˇznost Info zobraz´ı moment´alnˇe nainstalovanou verzi aplikace, Licence pak zobraz´ı interaktivn´ı seznam licenc´ı vˇsech knihoven pouˇz´ıvan´ych v aplikaci.

18

(35)

4.1. Struktura aplikace 4.1.2 GroupActivity

Zde aplikace poskytuje svou hlavn´ı funkcionalitu. Uˇzivateli se v t´eto ˇc´asti aplikace zobrazuj´ı j´ım vytvoˇren´e z´aznamy (tedy skupiny nebo aktivity) a to v podobˇe seznamu. Uˇzivatel vˇzdy vid´ı jednu skupinu a jej´ı obsah. Jej´ım ob- sahem mohou b´yt bud’ dalˇs´ı skupiny nebo aktivity. V pˇr´ıpadˇe, ˇze se jedn´a o dalˇs´ı skupiny, je u kaˇzd´e z nich vidˇet poˇcet aktivit, kter´e obsahuj´ı bud’ pˇr´ımo ony nebo dalˇs´ı skupiny v nich obsaˇzen´e. Kliknut´ım na nˇekterou zobrazenou skupinu dojde k naˇcten´ı obsahu t´eto skupiny. T´ımto zp˚usobem mohou b´yt v sobˇe skupiny zanoˇren´e bez omezen´ı.

Obr´azek 4.2: Skupinov´a aktivita zobrazuj´ıc´ı sv˚uj obsah Po vstupu do t´eto aktivity se uˇzivateli zobraz´ı

”Koˇrenov´a skupina“. Tato skupina re´alnˇe v datab´azi neexistuje, jedn´a se pouze o prostor pro zobrazen´ı vˇsech skupin uˇzivatele, kter´e nen´aleˇz´ı pod ˇz´adnou jinou. Nemohou se zde vy- skytovat aktivity. V dalˇs´ıch skupin´ach se jiˇz aktivity vyskytovat mohou.

(36)

4. Android aplikace

Nach´az´ı-li se uˇzivatel ve skupinˇe nejniˇzˇs´ı ´urovnˇe, tedy ve skupinˇe, kter´a jiˇz dalˇs´ı skupiny neobsahuje a zobrazuje tedy aktivity, m´a uˇzivatel k dispozici moˇznost aktivity seskupit. Nam´ısto toho, aby uˇzivatel vidˇel pouze seznam aktivit, m´a moˇznost nechat si aktivity seskupit podle dn˚u, t´ydn˚u, mˇes´ıc˚u ˇci let. Toto zobraz´ı uˇzivateli zvolen´y ˇcasov´y interval a poˇcet aktivit do nˇej spadaj´ıc´ıch.

Obr´azek 4.3: Skupinov´a aktivita zobrazuj´ıc´ı aktivity seskupen´e po dnech V pˇr´ıpadˇe, ˇze se v nejvyˇsˇs´ı ´urovni ˇz´adn´e skupiny nevyskytuj´ı, tedy je- li ”Koˇrenov´a skupina“ pr´azdn´a, aplikace sama nab´ıdne uˇzivateli moˇznost si nechat vygenerovat nˇekolik z´akladn´ıch skupin. Aplikace poˇsle ˇz´adost na bac- kend, kter´y m´a uloˇzen´y seznam tˇechto skupin, vytvoˇr´ı je a n´aslednˇe upozorn´ı aplikaci, aby opˇetovnˇe naˇcetla data z backendu.

Pro kaˇzdou skupinu je moˇzn´e nastavit barvu. Jm´eno skupiny v horn´ı ˇc´asti obrazovky funguje z´aroveˇn jako tlaˇc´ıtko, kter´e vyvol´a obrazovku pro v´ybˇer barvy. Tato barva je zn´azornˇena barevn´ym okrajem kolem jm´ena skupiny. Po v´ybˇeru je barva zasl´ana na backend, kde je uloˇzena v datab´azi. V seznamu skupin je u kaˇzd´e skupiny, kter´a m´a nastavenou barvu, pˇr´ıtomen barevn´y pruh.

20

(37)

4.1. Struktura aplikace 4.1.3 GraphActivity

Tato aktivita je odpovˇedn´a pouze za zobrazov´an´ı graf˚u. Pˇri spuˇstˇen´ı zGrou- pActivity je j´ı pˇred´ana skupina, kter´a je zrovna otevˇren´a. K t´eto skupinˇe si GraphActivity z´ısk´a z backendu veˇsker´e skupiny, kter´e pod spadaj´ı spolu s poˇctem aktivit, kter´e tyto skupiny obsahuj´ı. Na z´akladˇe tohoto aktivita zob- razuje dva druhy graf˚u, kol´aˇcov´y a sloupcov´y. Oba tyto grafy zn´azorˇnuj´ı poˇcet aktivit obsaˇzen´y v jednotliv´ych skupin´ach.

Obr´azek 4.4: Grafov´a aktivita zobrazuj´ıc´ı kol´aˇcov´y graf

Pˇri generov´an´ı grafu si aplikace vyˇz´ad´a informace o vzhledu skupiny, kte- rou zobrazuje a o vzhledu vˇsech skupin, kter´e pod zvolenou skupinu spadaj´ı.

V pˇr´ıpadˇe, ˇze je v tˇechto informac´ıch o vzhledu definovan´a barva pro jednot- liv´e skupiny, je pouˇzita pro jejich zn´azornˇen´ı v grafech. V opaˇcn´em pˇr´ıpadˇe aplikace zvol´ı n´ahodnou barvu z pˇreddefinovan´eho seznamu barev v aplikaci.

(38)

4. Android aplikace

4.1.4 CalendarActivity

Posledn´ı vytvoˇren´a aktivita obsahuje kalend´aˇr, kter´y zobrazuje zapsan´e z´aznamy.

Podobnˇe jako uGraphActivity, pˇri spuˇstˇen´ı aktivity je j´ı pˇred´ana pr´avˇe otevˇren´a skupina. N´aslednˇe si aktivita naˇcte skupiny, kter´e pˇr´ımo spadaj´ı pod mo- ment´alnˇe otevˇrenou skupinu. Podle tˇechto skupin si CalendarActivity naˇc´ıt´a vˇsechny z´aznamy pod nˇe spadaj´ıc´ı a podle nastaven´eho vzhledu tˇechto skupin je zakresluje do kalend´aˇre. Pro kaˇzd´y den, pro kter´y existuje z´aznam, se objev´ı barevn´e koleˇcko v barvˇe z´aznamu. Je-li v dan´y den evidov´ano v´ıce z´aznam˚u z r˚uzn´ych skupin, toto koleˇcko m´a ˇsedou barvu.

Obr´azek 4.5: Kalend´aˇrov´a aktivita zobrazuj´ıc´ı nˇekolik z´aznam˚u

4.2 rihlaˇ sov´ an´ı

Jak jiˇz je zm´ınˇeno v´yˇse v teoretick´e ˇc´asti, pro pˇrihlaˇsov´an´ı je pouˇzita sluˇzba Firebase Authentication. Za ´uˇcelem zajiˇstˇen´ı funkˇcnosti a spolehlivosti, byla vyuˇzita knihovnaFirebaseUI, v n´ıˇz je pˇrihlaˇsov´an´ı pomoc´ı vˇsech v zad´an´ı defi- novan´ych poskytovatel˚u pˇrihl´aˇsen´ı implementov´ano. Z´aroveˇn je tato knihovna doporuˇcen´a pˇr´ımo ze strany spoleˇcnosti Google v ofici´aln´ı dokumentaci sluˇzby Firebase.

22

(39)

4.3. REST API

4.3 REST API

Z´asadn´ı ˇc´ast´ı aplikace pro jej´ı funkˇcnost je implementace rozhran´ı REST pro komunikace aplikace s backendem. K implementaci tohoto rozhran´ı je vyuˇzita knihovna Retrofit.

V aplikaci jsou vytvoˇreni ˇctyˇri klienti pro komunikaci s backendem. Tito klienti definuj´ı rozhran´ı, kter´e popisuje form´at a obsah jednotliv´ych request˚u.

Toto rozhran´ı je n´aslednˇe knihovnou Retrofit rozˇs´ıˇreno. Kaˇzd´y z tˇechto ˇctyˇr klient˚u je zodpovˇedn´y za jeden druh dat odes´ılan´y Android aplikac´ı na bac- kend. Jsou jimi:

1. ActivityApiClient pouˇzit´y pro komunikaci t´ykaj´ıc´ı se aktivit;

2. GroupApiClientpro komunikaci t´ykaj´ıc´ı se skupin;

3. UIOptionsApiClientpro zas´ıl´an´ı a pˇr´ıjem informac´ı o vzhledu skupin;

4. TokenApiClient pro odes´ıl´an´ı registraˇcn´ıho tokenu aplikace.

(40)

4. Android aplikace

Toto je uk´azka klienta ActivityApiClient. Jedn´a se o rozhran´ı popisuj´ıc´ı jednotliv´e metody pro komunikaci s backendem.

i n t e r f a c e A c t i v i t y A p i C l i e n t {

@GET(" activity / showall ")

fun g e t A c t i v i t i e s ( @Query (" groupid ") i d : Long) : O b s e r v a b l e<L i s t<A c t i v i t y>>

@GET(" activity / showall ")

fun g e t A c t i v i t i e s ( @Query (" groupid ") i d : Long,

@Query (" startdate ") s t a r t D a t e : Long,

@Query (" enddate ") endDate : Long) : O b s e r v a b l e<L i s t<A c t i v i t y>>

@PUT(" activity / add ")

fun a d d A c t i v i t y ( @Body a c t i v i t y : A c t i v i t y C r e a t e d ) : C o m p l e t a b l e

@DELETE(" activity / delete ")

fun d e l e t e A c t i v i t y ( @Query (" activityid ") i d : Long) : C o m p l e t a b l e

@POST(" activity / update ")

fun u p d a t e A c t i v i t y ( @Body a c t i v i t y : A c t i v i t y U p d a t e d ) : C o m p l e t a b l e

}

Kaˇzd´y request na backend potˇrebuje v hlaviˇcce identifikaˇcn´ı token uˇzivatele poskytnut´y knihovnou Firebase. O z´ısk´an´ı a doplnˇen´ı t´eto hlaviˇcky se star´a interceptor. Interceptor je implementov´an jako samostatn´a tˇr´ıda a je pˇred´an jednotliv´ym klient˚um pˇri jejich vytv´aˇren´ı. Tentointerceptor je pˇrid´an ke vˇsem ˇctyˇrem rozhran´ım pˇri jejich vytv´aˇren´ı, jelikoˇz kaˇzd´y request zas´ılan´y na bac- kend mus´ı identifikovat uˇzivatele od nˇejˇz poch´az´ı. Kaˇzd´y request je jeˇstˇe pˇred odesl´an´ım interceptorem zachycen a je k nˇemu doplnˇena patˇriˇcn´a hlaviˇcka.

4.4 Notifikace

Souˇc´ast´ı zad´an´ı je vyuˇzit´ı sluˇzby Firebase Messaging k zas´ıl´an´ı notifikac´ı. V nynˇejˇs´ı verzi aplikace slouˇz´ı tato sluˇzba k zas´ıl´an´ı notifikac´ı na vˇsechna zaˇr´ızen´ı uˇzivatele o tom, ˇze byla zmˇenˇena data uˇzivatele na backendu. V reakci na pˇrijet´ı t´eto notifikace provede Android aplikace obnoven´ı dat. Samotn´a An- droid aplikace ˇz´adn´e notifikace pomoc´ı sluˇzby Firebase Messaging nepos´ıl´a.

Pro pˇrij´ım´an´ı tˇechto notifikac´ı je v aplikaci implementov´ana sluˇzbaMessa- gingService. Tato sluˇzba bˇeˇz´ı st´ale v pozad´ı. Pˇrijde-li do aplikace notifikace, 24

(41)

4.5. Lokalizace sluˇzba ji zpracuje a upozorn´ı pr´avˇe bˇeˇz´ıc´ı aktivitu na pˇr´ıchoz´ı notifikaci. V tuto chv´ıli jedin´a notifikace, kter´a m˚uˇze pˇrij´ıt, je upozornˇen´ı na zmˇenu dat uˇzivatele v backendu. Snadno lze ovˇsem sluˇzbu upravit i pro zpracov´an´ı jin´ych typ˚u notifikac´ı.

4.5 Lokalizace

Aplikace je lokalizov´ana v angliˇctinˇe a ˇceˇstinˇe. Pˇreloˇzeny jsou veˇsker´e texty a popisky tlaˇc´ıtek. Str´anka na Google Play je takt´eˇz k dispozici v obou jazyc´ıch.

4.6 yvojov´ e n´ astroje

K v´yvoji Android aplikace bylo pouˇzito Android Studio, ofici´aln´ı v´yvojov´e prostˇred´ı doporuˇcovan´e a poskytovan´e spoleˇcnost´ı Google. Aplikace byla bˇehem v´yvoje spouˇstˇena prim´arnˇe pomoc´ı emul´atoru syst´emu Android obsaˇzen´eho v Android Studiu a to na virtu´aln´ım zaˇr´ızen´ıPixel 2 nejprve s verz´ı syst´emu Android 9.0 a po jej´ım vyd´an´ı i s verz´ı 10.0. V r´amci v´yvoje byla aplikace testov´ana i na fyzick´ych zaˇr´ızen´ıch a to zejm´ena na autorovˇe zaˇr´ızen´ıXiaomi Redmi 4X s verz´ı syst´emu 7.1.

Pro spuˇstˇen´ı backendu aplikace lok´alnˇe za ´uˇcelem v´yvoje Android apli- kace, je tˇreba lok´alnˇe nastartovat datab´azi. K tomuto ´uˇcelu byl pouˇzit n´astroj Docker, v nˇemˇz byla nastartov´ana datab´aze MySQL. Ke spuˇstˇen´ı samotn´e backend aplikace bylo pak pouˇzito v´yvojov´e prostˇred´ıIntelliJ IDEA.

V pozdˇejˇs´ıch f´az´ıch byl vyuˇz´ıv´an backend bˇeˇz´ıc´ı naAWS. V tomto pˇr´ıpadˇe uˇz byla vyuˇz´ıv´ana MySQL datab´aze pˇr´ıtomna tamt´eˇz.

4.7 Verzov´ an´ı

Verzov´an´ı bylo vyˇzadov´ano zadavatelem. K verzov´an´ı byla pouˇzita sluˇzbaGi- tHub, kde m´a zadavatelsk´a firma sv˚uj soukrom´y repozit´aˇr. D´ıky tomu byla po celou dobu v´yvoje zajiˇstˇeno z´alohov´an´ı a verzov´an´ı k´odu. Z´aroveˇn byla pomoc´ı n´astroj˚u poskytovan´ych sluˇzbou GitHubumoˇznˇena kontrola vypraco- van´eho k´odu zadavatelem.

4.8 Pouˇ zit´ e extern´ı knihovny

V r´amci v´yvoje aplikace bylo vyuˇzito nˇekolik extern´ıch knihoven. Pˇri v´ybˇeru knihoven byl br´an ohled na vhodnost knihovny pro tuto aplikace, na m´ıru jej´ıho pouˇz´ıv´an´ı k v´yvoji Android aplikac´ı a na licenci pod kterou je knihovna ˇs´ıˇrena.

Knihovny byla do aplikace pˇrid´any pomoc´ı n´astrojeGradle, doporuˇcen´eho pro v´yvoj Android aplikac´ı.

(42)

4. Android aplikace

4.8.1 FirebaseUI

Knihovna obsahuje uˇzivatelsk´e rozhran´ı pro jednotliv´e funkcionality posky- tovan´e sluˇzbou Firebase. V aplikaci je vyuˇzita tato knihovna pro Firebase pˇrihlaˇsov´an´ı. Staˇc´ı pouze pouˇz´ıt rozhran´ı knihovny pro zvolen´ı zp˚usob˚u pˇrihl´aˇsen´ı, tedy v tomto pˇr´ıpadˇe email,Google a Facebook, a knihovna uˇz sama vytvoˇr´ı aktivitu, v n´ıˇz se uˇzivatel n´aslednˇe pˇrihl´as´ı. Tato knihovna je doporuˇcen´a ze strany spoleˇcnosti Google[12].

4.8.2 Retrofit

Retrofit je knihovna pouˇz´ıvan´a pˇri v´yvoji Android aplikac´ı k vytv´aˇren´ı HTTP rozhran´ı pro jazyky Java a tedy i Kotlin. Tato HTTP rozhran´ı knihovna ge- neruje na z´akladˇe rozhran´ı, kter´a definuje v´yvoj´aˇr v jazyce Java, potaˇzmo Kotlin[13].

4.8.3 RxJava

Jedn´a se o knihovnu rozˇsiˇruj´ıc´ı moˇznosti reaktivn´ıho programov´an´ı v jazyce Java. V reaktivn´ım programov´an´ı paralelnˇe vol´ame metody, kter´e mohou m´ıt delˇs´ı dobu bˇehu. V t´eto aplikaci takto vol´ame metody komunikuj´ıc´ı s backen- dem, ˇci metody zajiˇst’uj´ıc´ı autentizaci ve sluˇzbˇe Firebase. Je pouˇz´ıv´anObserver pattern k reakci na dobˇehnut´ı tˇechto metod. V Android aplikac´ıch obzvl´aˇstˇe je toto ˇsiroce vyuˇz´ıv´ano a to pˇredevˇs´ım za ´uˇcelem zachov´an´ı responzivity aplikace[14].

4.8.4 MPAndroidChart

Tato knihovna umoˇzˇnuje vykreslov´an´ı graf˚u v aplikac´ıch pro syst´em Android.

Podporuje vˇsechny bˇeˇzn´e typy graf˚u a umoˇzˇnuje jejich uzp˚usoben´ı konkr´etn´ımu pˇr´ıpadu uˇzit´ı. Dokonce existuje i verze t´eto knihovny pro iOS, coˇz v budoucnu usnadn´ı tvorbu pˇr´ıpadn´eho portu[15].

4.8.5 Material-Calendar-View

Obsahem t´eto knihovny je kalend´aˇr, kter´y umoˇzˇnuje zobrazov´an´ı ud´alost´ı, coˇz nen´ı poskytov´ano z´akladn´ım CalendarView v Android knihovn´ach. Tato knihovna nab´ız´ı i vylepˇsen´y widget pro v´ybˇer data, ale pro ´uˇcely aplikace postaˇcuje widget pˇr´ıtomn´y v z´akladn´ıch knihovn´ach syst´emu Android. Tento kalend´aˇr je vyuˇzit v aktivitˇeCalendarActivity[16].

26

(43)

Kapitola 5

Backend aplikace

Jedn´ım z kl´ıˇcov´ych bod˚u t´eto pr´ace je vyuˇzit´ı REST API ke komunikaci s jiˇz existuj´ıc´ım backendem. Tento backend byl vyvinut jiˇz dˇr´ıve ve spoleˇcnosti Skills Fighters pro intern´ı vyuˇzit´ı v r´amci zauˇcov´an´ı nov´eho ˇclena. Soubˇeˇznˇe nebyla vyvinuta ˇz´adn´a frontend aplikace, kter´a by umoˇzˇnovala interakci s backendem a tedy jeho vyuˇzit´ı. Toto m´a nyn´ı poskytnout aplikace vyv´ıjen´a v r´amci t´eto pr´ace.

5.1 Stav backendu

Backend je napsan´y na z´akladˇe aplikaˇcn´ıho r´amce Spring Framework. Toto ˇreˇsen´ı bylo zvoleno prim´arnˇe z d˚uvod˚u praktick´ych. SpoleˇcnostSkills Fighters se z velk´e m´ıry zab´yv´a v´yvojem backend˚u pro sv´e z´akazn´ıky a pro tyto ´uˇcely je pr´avˇe v´yˇse zm´ınˇen´a technologie vyuˇz´ıvan´a.

Rozhran´ı REST, jak je popsan´e v druh´em bodˇe zad´an´ı t´eto pr´ace, je v backend aplikaci kompletnˇe implementovan´e. Pro aktivity a skupiny jsou im- plementovan´e samostatn´e controllery v nichˇz jednotliv´e metody pˇredstavuj´ı endpointy, se kter´ymi n´aslednˇe komunikuj´ı frontend aplikace, jako je pr´avˇe tato Android aplikace.

Ovˇeˇrov´an´ı pomoc´ı sluˇzby Firebase je jiˇz v backend aplikaci zcela vyˇreˇsen´e.

Kaˇzd´y pˇr´ıchoz´ı request proch´az´ı filtry, kter´e ovˇeˇruj´ı pˇr´ıtomnost hlaviˇcky ob- sahuj´ıc´ı ovˇeˇrovac´ı token vygenerovan´y pro uˇzivatele pˇrihl´aˇsen´eho ve frontend aplikaci.

Komunikace s datab´az´ı, v tomto pˇr´ıpadˇe MySQL datab´az´ı, je zajiˇstˇena pomoc´ı frameworku Hibernate. V datab´azi aplikace ukl´ad´a uˇzivatele, aktivity a skupiny. Uˇzivatel´e jsou registrov´an´ı pˇri prvn´ı pˇrijat´em requestu od dan´eho uˇzivatele z frontend aplikace, nen´ı tˇreba pos´ılat zvl´aˇst’ request o registraci. Za

´

uˇcelem zjednoduˇsen´ı v´yvoje byl vyuˇzit n´astrojDocker pro spouˇstˇen´ıMySQL datab´aze. Toto ˇreˇsen´ı zjednoduˇsuje pˇr´ıpadn´e testov´an´ı jin´ych druh˚u datab´az´ı, usnadˇnuje pˇrenos v´yvoje mezi r˚uzn´ymi zaˇr´ızen´ımi a pˇri opˇetovn´em spuˇstˇen´ı poskytuje ˇcist´e prostˇred´ı pro spouˇstˇen´ı test˚u.

(44)

5. Backend aplikace

Cel´y backend je d˚ukladnˇe otestovan´y sadou unit, integraˇcn´ıch a akceptaˇcn´ıch test˚u. Funkˇcnost jeho implementovan´ych ˇc´ast´ı je tedy jiˇz z velk´e ˇc´asti ovˇeˇrena a bˇehem psan´ı frontend aplikace se d´ıky tomu ˇz´adn´e pot´ıˇze s funkcionalitou backendu nevyskytovaly.

Backend aplikace ovˇsem nebyla na zaˇc´atku v´yvoje Android aplikace trvale bˇeˇz´ıc´ı na ˇz´adn´em serveru. Bylo tedy nutn´e nejprve zprovoznit backend aplikaci lok´alnˇe a eventu´alnˇe vyˇreˇsit nasazen´ı backend aplikace na server, kter´y umoˇzn´ı provoz aplikace v produkci.

5.2 Rozˇ s´ıˇ ren´ı

Aˇckoliv byla backend aplikace z velk´e m´ıry funkˇcn´ı, nepodporovala celou funk- cionalitu Android aplikace, tak jak byla funkcionalita stanovena zad´an´ım. V r´amci rozˇs´ıˇren´ı byl kladen velk´y d˚uraz na minim´aln´ı z´asahy do jiˇz dˇr´ıve vy- tvoˇren´ych rozhran´ı. Backend byl tedy mˇenˇen prim´arnˇe formou pˇrid´av´an´ı dalˇs´ı funkcionality s d˚urazem na minim´aln´ı z´asahy do jiˇz funkˇcn´ıch ˇc´ast´ı. K v´yvoji bylo pouˇzito v´yvojov´e prostˇred´ıIntelliJ IDEA od spoleˇcnosti Jetbrains.

5.2.1 Nasazen´ı na cloud

Nejz´asadnˇejˇs´ım pˇredmˇetem zmˇen bylo nasazen´ı backend aplikace na server.

Jelikoˇz Skills Fighters je mal´a spoleˇcnost, nem´a k dispozici vlastn´ı server, na nˇemˇz by backend mohl trvale bˇeˇzet. M´a ovˇsem k dispozici ´uˇcet ve sluˇzbˇe Amazon Web Services. Jedn´a se o subjekt ve vlastnictv´ı spoleˇcnost´ı Amazon, kter´y poskytuje cloudov´e platformy pro nasazen´ı webov´ych aplikac´ı.

Pro nasazen´ı aplikace byla zvolena sluˇzbaElastic Beanstalk, kter´a umoˇzˇnuje nasazen´ı aplikace zabalen´e ve form´atu war. Tato sluˇzba automaticky vytvoˇr´ı dle nastaven´ı virtu´aln´ı poˇc´ıtaˇc a datab´azi pro nasazenou aplikaci. Po nahr´an´ı aplikace zabalen´e v jiˇz v´yˇse zm´ınˇen´em form´atuwar ji tato automaticky sluˇzba nasad´ı. N´aslednˇe sluˇzba poskytne endpoint, kter´y mohou vyuˇz´ıt frontend aplikace k pˇripojen´ı k bˇeˇz´ıc´ı backend aplikaci. Elastic Beanstalk poskytuje i moˇznost automatick´eho ˇsk´alov´an´ı pˇri vysok´em vyt´ıˇzen´ı spuˇstˇen´e aplikace, to ovˇsem vzhledem k moment´aln´ı m´ıˇre vyuˇzit´ı nehraje roli.

5.2.2 Firebase Messaging na backendu

D´ale bylo tˇreba uzp˚usobit backend aplikaci k vyuˇzit´ı sluˇzby Firebase Messa- ging. Tato sluˇzba je v aplikaci pouˇz´ıvan´a k zas´ıl´an´ı notifikac´ı vˇsem zaˇr´ızen´ım uˇzivatele o tom, ˇze doˇslo ke zmˇenˇe dat a v reakci na tuto notifikaci si vˇsechna zaˇr´ızen´ı uˇzivatele znovu naˇctou data z backendu.

Firebase Messaging funguje tak, ˇze backend pos´ıl´a requesty o zasl´an´ı no- tifikace sluˇzbˇe Firebase. Teprve Firebase tyto notifikace pos´ıl´a samotn´ym zaˇr´ızen´ım. V tˇechto requestech je definov´ano, jak m´a notifikace vypadat a 28

(45)

5.2. Rozˇs´ıˇren´ı jak´ym zaˇr´ızen´ım se m´a zaslat. Nen´ı ovˇsem moˇzn´e pos´ılat zpr´avy pˇr´ımo uˇzivatel˚um na z´akladˇe jejich identifikaˇcn´ıch token˚u.

Zaˇr´ızen´ı jsou rozliˇsov´ana pomoc´ı registraˇcn´ıch token˚u unik´atn´ıch pro jed- notliv´a zaˇr´ızen´ı uˇzivatel˚u. Tyto registraˇcn´ı tokeny je tedy nutn´e v backendu ukl´adat. V backend aplikaci byla vytvoˇrena nov´a entita, kter´a reprezentuje tyto registraˇcn´ı tokeny a jejich vazbu ke konkr´etn´ımu uˇzivateli v datab´azi.

Tyto registraˇcn´ı tokeny pos´ıl´a Android aplikace. Byl tedy pro jejich zpra- cov´an´ı vytvoˇren nov´y controller, kter´y kontroluje pˇr´ıtomnost pˇrijat´eho to- kenu v datab´azi a pokud se tam jeˇstˇe nenach´az´ı, token do datab´aze zap´ıˇse k uˇzivateli, kter´y mu dan´y token zaslal.

Na z´avˇer bylo tˇreba upravit controllery pro aktivity a skupiny. Do vˇsech metod, kter´e jak´ymkoliv zp˚usobem mˇen´ı v datab´azi uloˇzen´e aktivity a skupiny, bylo pˇrid´ano pos´ıl´an´ı Firebase zpr´avy vˇsem zaˇr´ızen´ım uˇzivatele, za ´uˇcelem proveden´ı obnovy pr´avˇe naˇcten´ych dat v aplikaci.

5.2.3 Zb´yvaj´ıc´ı zmˇeny

Bylo doplnˇeno zobrazov´an´ı skupin na z´akladˇe parentId dan´e skupiny. Pˇredt´ım backend podporoval pouze zobrazen´ı vˇsech skupin dan´eho uˇzivatele a bylo tedy tˇreba skupiny filtrovat aˇz v Android aplikaci. Toto zvˇetˇsovalo prodlevu mezi zvolen´ım skupiny v aplikaci a zobrazen´ım jej´ıho obsahu.

Pro rozˇs´ıˇren´ı funkcionality aplikace bylo pˇrid´ano poˇc´ıt´an´ı aktivit ve sku- pin´ach. Backend tedy umoˇzˇnuje pro zvolenou skupinu spoˇc´ıtat vˇsechny akti- vity, kter´e pod ni spadaj´ı.

Na backend byla doplnˇena entita UIOptions, kter´a m´a vazbu pr´avˇe s jed- nou skupinou a obsahuje informace o jej´ım vzhledu. Pro komunikaci s Android aplikac´ı v souvislosti s touto entitou byl vytvoˇren controller, kter´y tuto ko- munikaci zajiˇst’uje.

(46)
(47)

Kapitola 6

Testov´ an´ı

V r´amci v´yvoje softwaru je d˚uleˇzit´e software spr´avnˇe testovat. Psan´ım test˚u bˇehem v´yvoje je zajiˇstˇena spolehlivost a stabilita k´odu. Toto je d˚uleˇzit´e zejm´ena pˇri pokraˇcuj´ıc´ım v´yvoji, abychom se ujistili, ˇze nov´a funkcionalita a zmˇeny v k´odu nenaruˇsuj´ı jiˇz dˇr´ıve hotovou funkcionalitu.

Obr´azek 6.1: Graf zobrazuj´ıc´ı vztah poˇctu test˚u jednotliv´ych typ˚u ku jejich vˇernosti realitˇe, d´elce spouˇstˇen´ı, n´aroˇcnosti ´udrˇzby a debugov´an´ı.

Test˚u je pouˇzito nˇekolik druh˚u, kter´e se liˇs´ı nejen mnoˇzstv´ım testovan´eho k´odu a funkcionality, ale i zp˚usobem, jak´ym je k´od testov´an. Aˇckoli unit testy, kter´e testuj´ı pouze jednotliv´e metody, jsou velice rychl´e a je snazˇs´ı jejich

´

udrˇzba, oproti rozs´ahlejˇs´ım test˚um netestuj´ı aplikaci jako celek a tedy plnˇe ne- testuj´ı v´yslednou funkˇcnost. Jak napov´ıd´a obr´azek v´yˇse, c´ılem je m´ıt vˇetˇsinu

(48)

6. Testov´an´ı

test˚u v podobˇe unit test˚u. Dokumentace pro v´yvoj´aˇre k syst´emu Android do- poruˇcuje m´ıt 70% unit test˚u, 20% integraˇcn´ıch test˚u a 10% test˚u uˇzivatelsk´eho rozhran´ı[17].

Vˇsechny tyto testy jsou spouˇstˇeny prostˇrednictv´ım v´yvojov´eho prostˇred´ı Android Studio.

6.1 Unit testy

Unit testy maj´ı za c´ıl testovat nejmenˇs´ı jednotku funkcionality, tedy v pˇr´ıpadˇe Android aplikac´ı typicky jednotliv´e metody. Vˇzdy si vytv´aˇr´ıme pouze tˇr´ıdu, do n´ıˇz metoda spad´a a na m´ısto z´avislost´ı, kter´e tˇr´ıda vyˇzaduje, vytv´aˇr´ıme

”Mock” objekty. Tyto objekty neimplementuj´ı ˇz´adnou funkcionalitu a tedy po- kud nˇekterou z jejich metod vol´ame, v r´amci testu je j´ı nastavena n´avratov´a hodnota. T´ımto je dosaˇzeno maxim´aln´ı izolace testovan´e metody, potaˇzmo tˇr´ıdy a je tedy testov´ana pokud moˇzno pouze jedna konkr´etn´ı funkcionalita[18].

Na syst´emu Android rozliˇsujeme dva typy unit test˚u podle zp˚usobu jak´ym jsou spouˇstˇeny. Jedn´a se o:

• Lok´aln´ı testy jsou spouˇstˇeny pˇr´ımo ve v´yvojov´em prostˇred´ı a nevyˇzaduj´ı tedy ke sv´emu spuˇstˇen´ı bˇeˇz´ıc´ı Android zaˇr´ızen´ıˇci emul´ator. Jejich v´yhodou je vysok´a rychlost, ale nejsou vhodn´e pro testov´an´ı objekt˚u se sloˇzitˇejˇs´ımi z´avislostmi;

• Instrumentovan´e testy narozd´ıl od lok´aln´ıch test˚u vyˇzaduj´ı bud’ bˇeˇz´ıc´ı Android zaˇr´ızen´ı nebo emul´ator. D´ıky tomu je moˇzn´e v aplikaci testovat i funkce, kter´e vyˇzaduj´ı z´avislosti v syst´emu v Android.

V t´eto aplikaci jsou vyuˇzity testy lok´aln´ı, ale s vyuˇzit´ım ofici´aln´ı knihovnyRo- bolectric, kter´a umoˇzˇnuje pouˇzit´ı kontextu aplikace t´ım, ˇze prostˇred´ı syst´emu Android simuluje. D´ıky tomu nen´ı nutn´e spouˇstˇet testy v emul´atoru nebo na re´aln´em zaˇr´ızen´ı, coˇz zvyˇsuje jejich rychlost[19].

6.2 Integraˇ cn´ı testy

Integraˇcn´ı testy se od unit test˚u liˇs´ı t´ım, ˇze netestuj´ı pouze funkce samy o sobˇe v izolaci, ale uˇz v kombinaci s dalˇs´ımi ˇc´astmi k´odu. A to at’ uˇz uvnitˇr aplikace, tedy napˇr´ıklad spolupr´aci dvou tˇr´ıd, ale i mimo samotnou aplikaci, tedy napˇr´ıklad komunikaci se serverem. Test tedy nereflektuje vnitˇrn´ı obsah metody, tak jako to dˇelaj´ı unit testy, ale testuje aˇz v´ystup tˇechto metod[17].

Pomoc´ı integraˇcn´ıch test˚u je v t´eto aplikaci testov´ana zejm´ena komunikace mezi Android aplikac´ı a backend aplikac´ı pomoc´ı REST API. Tyto testy fun- guj´ı s plnˇe bˇeˇz´ıc´ı backend aplikac´ı a testuj´ı tedy komunikaci tak, jak prob´ıh´a pˇri norm´aln´ım bˇehu aplikace. Pˇri bˇehu integraˇcn´ıch test˚u ovˇsem nelze za- jistit pˇrihl´aˇsen´ı uˇzivatele. M´ısto prav´eho Firebase autentizaˇcn´ıho tokenu je 32

(49)

6.3. Akceptaˇcn´ı testy tedy vyuˇzito napevno zvolen´eho debuggovac´ıho tokenu. V pˇr´ıpadˇe, ˇze bac- kend pˇrijme request s takov´ym tokenem, aplikace pˇreskoˇc´ı autentizaci po- moc´ı sluˇzby Firebase a povaˇzuje uˇzivatele za spr´avnˇe pˇrihl´aˇsen´eho testovac´ıho uˇzivatele. Tato moˇznost byla v backendu vytvoˇrena jiˇz dˇr´ıve a to v r´amci tes- tov´an´ı backendu. Tyto testy jsou spouˇstˇeny pomoc´ı knihoven Robolectric a JUnit.

6.3 Akceptaˇ cn´ı testy

Akceptaˇcn´ı testy maj´ı za c´ıl testovat, zda aplikace splˇnuje specifikaci, jak je definovan´a zad´an´ım. Tyto testy pˇristupuj´ı k aplikaci z pohledu uˇzivatele.

Akceptaˇcn´ı testy nutnˇe nepracuj´ı s vnitˇrn´ı strukturou aplikace, pˇristupuj´ı k n´ı jako k ˇcern´e skˇr´ıˇnce[20].

Na Androidu jsou ekvivalentem akceptaˇcn´ıch test˚u takzvan´e UI testy. Apli- kace je spuˇstˇena cel´a a tyto testy napodobuj´ı chov´an´ı uˇzivatele. V testech nejsou vol´any samostatn´e metody jednotliv´ych tˇr´ıd. V testech je simulov´ana interakce uˇzivatele s uˇzivatelsk´ym rozhran´ım aplikace. Netestujeme tedy, zda stisk tlaˇc´ıtka zavol´a nˇekterou z metod aplikace, ale testujeme, jestli se n´am po stisknut´ı tlaˇc´ıtka spr´avnˇe zobraz´ı menu, ˇci zdali se n´am spr´avnˇe zobrazuje dalˇs´ı ˇc´ast aplikace[21].

Knihovna pro vytv´aˇren´ı tˇechto test˚u v syst´emu Android se naz´yv´aEspresso.

Espresso umoˇzˇnuje pˇristupovat k jednotliv´ym komponent´am obrazovky, tes- tovat jejich stav a volat nad nimi metody, kter´e napodobuj´ı interakci uˇzivatele s aplikac´ı. Tyto testy jsou spouˇstˇeny nad bˇeˇz´ıc´ı aplikac´ı, pˇriˇcemˇz tato aplikace m˚uˇze b´yt spuˇstˇena bud’ v emul´atoru nebo na fyzick´em zaˇr´ızen´ı[22].

(50)

6. Testov´an´ı

Pomoc´ı tˇechto test˚u je otestov´ano nˇekolik z´akladn´ıch funkcionalit, jako je pˇrid´an´ı skupiny ˇci spr´avn´e naˇcten´ı skupiny po jej´ım zvolen´ı. Jelikoˇz komu- nikace s backend aplikac´ı nemus´ı b´yt nutnˇe okamˇzit´a, jsou do test˚u pˇrid´any ˇcasov´e prodlevy, aby aplikace pˇrijala data a test tedy probˇehl spr´avnˇe. Zde je uk´azka akceptaˇcn´ıho testu, kter´y testuje pˇrid´av´an´ı nov´ych skupin.

@Test

fun addGroup ( ) {

onView ( w i t h I d (R . i d . r e f r e s h ) ) . p e r f o r m ( c l i c k ( ) )

Thread . s l e e p ( 5 0 0 0 )

val numberOfItems = a c t i v i t y T e s t R u l e . a c t i v i t y . r v i t e m l i s t . a d a p t e r ! ! . itemCount

onView ( w i t h I d (R . i d . f a b a d d ) ) . p e r f o r m ( c l i c k ( ) )

onView ( withText (R . s t r i n g . new group ) ) . c h e c k ( matches ( i s D i s p l a y e d ( ) ) )

onView ( withClassName ( endsWith (" EditText ") ) ) . p e r f o r m ( r e p l a c e T e x t ( testGroupName ) ) onView ( withText (R . s t r i n g . s a v e ) )

. p e r f o r m ( c l i c k ( ) ) Thread . s l e e p ( 5 0 0 0 )

onView ( w i t h I d (R . i d . r e f r e s h ) ) . p e r f o r m ( c l i c k ( ) )

Thread . s l e e p ( 5 0 0 0 )

a s s e r t E q u a l s ( numberOfItems + 1 , a c t i v i t y T e s t R u l e .

a c t i v i t y . r v i t e m l i s t . a d a p t e r ! ! . itemCount )

}

34

(51)

6.4. Uˇzivatelsk´e testov´an´ı

6.4 zivatelsk´ e testov´ an´ı

Aplikace byla v pr˚ubˇehu v´yvoje testov´ana mnohokr´at r˚uzn´ymi uˇzivateli. Jed- nalo se ovˇsem pouze o drobn´e testy, nebyly vytvoˇreny konkr´etn´ı testovac´ı sc´en´aˇre. Sp´ıˇse se vˇzdy jednalo o vyzkouˇsen´ı nov´e funkcionality a vyuˇzit´ı zpˇetn´e vazby k dalˇs´ımu v´yvoji. Tyto pˇripom´ınky slouˇzily prim´arnˇe k dalˇs´ım ´uprav´am uˇzivatelsk´eho rozhran´ı a k v´yvoji dalˇs´ı funkcionality aplikace.

(52)
(53)

Kapitola 7

Nahr´ an´ı na Google Play

Souˇc´ast´ı zad´an´ı je i nahr´an´ı aplikace na Google Play. Pro nahr´av´an´ı aplikac´ı na Google Play je nezbytn´y v´yvoj´aˇrsk´y Google ´uˇcet. Pro aktivaci v´yvoj´aˇrsk´ych moˇznost´ı na jiˇz existuj´ıc´ım Google ´uˇctu staˇc´ı pouze zaplatit poplatek ve v´yˇsi 25 $ spoleˇcnosti Google[23].

Aplikace lze na Google Play nahr´avat ve dvou podob´ach:

APK, cel´ym n´azvemAndroid Package je standardn´ı form´at pro distri- buci aplikac´ı na operaˇcn´ım syst´emu Android. Kaˇzd´y APK soubor obsa- huje vˇsechna data, kter´a jsou potˇrebn´a pro spuˇstˇen´ı aplikace[1];

Android App Bundle je novˇejˇs´ı form´at pro nahr´av´an´ı aplikac´ı na Google Play. Tento form´at zahrnuje zkompilovan´y k´od a vˇsechny dalˇs´ı souˇc´ast´ı aplikace, ale samotnou tvorbu instalaˇcn´ıch soubor˚u APK po- nech´av´a na sluˇzbˇe Google Play. Sluˇzba Google Play tak m˚uˇze posky- tovat r˚uzn´ym uˇzivatel˚um r˚uzn´e podoby aplikace, v z´avislosti na jimi pouˇz´ıvan´em zaˇr´ızen´ı, coˇz m˚uˇze zmenˇsit velikost stahovan´e aplikace[24].

Pro nahr´an´ı aplikace byl zvolen form´at Android App Bundle, jelikoˇz je tento form´at novˇejˇs´ı a je v ofici´aln´ı dokumentaci doporuˇcen´y pro nahr´av´an´ı aplikac´ı na Google Play.

Pro samotn´e nahr´an´ı aplikace na Google Play je tˇreba z´ıskat podepsanou podobu aplikace. Toto lze vytvoˇrit pomoc´ı v´yvojov´eho prostˇred´ı Android Stu- dio s vyuˇzit´ım kl´ıˇce, kter´y si vygenerujeme. Tento kl´ıˇc slouˇz´ı pouze k podeps´an´ı aplikace, kdyˇz ji nahr´av´ame, aplikace je pˇred distribuc´ı uˇzivatel˚um podeps´ana jeˇstˇe jedn´ım kl´ıˇcem, kter´y je uˇz ovˇsem vygenerovan´y a spravovan´y spoleˇcnost´ı Google. Existuje moˇznost pouˇz´ıvat jeden kl´ıˇc, jak k nahr´av´an´ı aplikace, tak i k jej´ı distribuci uˇzivatel˚um, ale toto ˇreˇsen´ı m´a nev´yhody. V pˇr´ıpadˇe ztr´aty kl´ıˇce nen´ı moˇzn´e nahr´avat nov´e verze aplikace jinak neˇz jako novou aplikaci.

Je nutno br´at v potaz i riziko odcizen´ı kl´ıˇce. Proto bylo v r´amci v´yvoje zvoleno ˇreˇsen´ı prvn´ı[25].

(54)

7. Nahr´an´ı na Google Play

Pˇri nahr´av´an´ı aplikace na Google Play si v´yvoj´aˇr vol´ı, jak´ym zp˚usobem je aplikace distribuov´ana. Aplikaci lze distribuovat pouze v´yvoj´aˇrem urˇcen´e skupinˇe uˇzivatel˚u, v tomto pˇr´ıpadˇe se jedn´a o Intern´ı test nebo Uzavˇrenou verzi. Aplikaci lze d´ale nahr´at jakoOtevˇrenouverzi, kdy jiˇz bude distribuov´ana mezi ˇsirokou veˇrejnost. Takto nahran´e aplikace jsou ovˇsem ve sluˇzbˇe Google Play zobrazov´any oddˇelenˇe od ostatn´ıch aplikac´ı. V tomto reˇzimu lze omezit maxim´aln´ı poˇcet uˇzivatel˚u. Posledn´ım zp˚usobem vyd´an´ı aplikace je vyd´an´ı do Produkce. Aplikace je v tomto reˇzimu dostupn´a vˇsem uˇzivatel˚um[26].

Vyv´ıjen´a aplikace byla postupnˇe nasazen´a v Intern´ım testu, n´aslednˇe v Uzavˇren´e verzi, v Otevˇren´everzi a na z´avˇer byla aplikace nasazen´a i do Pro- dukce. Aplikace byla nahr´ana pod n´azvem

”Activity Tracker“, kter´y byl zvolen zadavatelem. K ´unoru 2020 nen´ı na Google Play dostupn´a nejnovˇejˇs´ı verze An- droid aplikace v d˚usledku zruˇsen´ı p˚uvodnˇe pouˇzit´eho v´yvoj´aˇrsk´eho ´uˇctu.

38

(55)

Kapitola 8

Dalˇ s´ı rozvoj

Jelikoˇz aplikace moment´alnˇe neumoˇzˇnuje ukl´ad´an´ı dat v zaˇr´ızen´ı a vˇzdy je sta- huje z backendu, je zcela z´avisl´a na Internetov´em pˇripojen´ı. Jednou z moˇznost´ı, jak aplikaci rozˇs´ıˇrit, je implementace ukl´ad´an´ı dat offline s jejich pozdˇejˇs´ım nahr´an´ım na backend.

Do budoucna je pl´anov´ano tak´e vytvoˇrit porty t´eto aplikace i pro syst´em iOS a tak´e webovou aplikaci. Toto podstatnˇe rozˇs´ıˇr´ı potenci´aln´ı uˇzivatelskou z´akladnu. Obzvl´aˇstˇe webov´a aplikace umoˇzn´ı implementaci pokroˇcilejˇs´ı funk- cionality.

Dalˇs´ı moˇznost´ı vylepˇsen´ı aplikace je implementace komunity. Uˇzivatel´e by mohli m´ıt moˇznost sd´ılet sv´e skupiny s ostatn´ımi uˇzivateli. Aplikace by pot´e mohla b´yt pouˇzita i v jin´em kontextu neˇz jen sledov´an´ı vlastn´ıch aktivit, aplikaci by bylo moˇzn´e s patˇriˇcn´ymi ´upravami pouˇz´ıt napˇr´ıklad ke sledov´an´ı pˇr´ıchod˚u do zamˇestn´an´ı jako digit´aln´ı variantu doch´azkov´eho syst´emu.

(56)

Odkazy

Související dokumenty

Pro z´ aklad aplikace jsem pouˇ zil n´ astroj JHipster, kter´ y umoˇ zˇ nuje vyuˇ zit´ı mnou vybran´ ych technologi´ı.. JHipster je n´ astroj pro vygenerov´ an´ı

Jako hlavn´ı n´ aplˇ n pr´ ace byly vytvoˇ reny knihovn´ı funkce a testy v jazyce TCL, kter´ e slouˇ z´ı pro automatick´ e testov´ an´ı grafick´ eho rozhran´ı

Dle zad´ an´ı ba- kal´ aˇ rsk´ e pr´ ace je potˇ reba navrhnout a realizovat zaˇ r´ızen´ı um´ıstˇ en´ e v monopostu pro vyˇ cten´ı dat z vozu a jejich odesl´

Tato pr´ ace popisuje proces hojen´ı zlomenin a vliv mechanick´ ych sil na jeho pr˚ ubˇ eh, se zamˇ eˇ ren´ım na z´ısk´ an´ı znalost´ı pro vytvoˇ ren´ı elektronicky

Na z´akladˇe anal´yzy implementuje v druh´e ˇc´asti pr´ace ˇreˇsen´ı detekce a sledov´an´ı vozidel pomoc´ı modelu DETR, kter´y je absolutn´ı novinka mezi modely pro

Pˇredloˇ zen´ a bakal´ aˇrsk´ a pr´ ace se zab´ yv´ a odhadov´ an´ım geometrie dvou kamer z korespondenc´ı, za situac´ı kdy se vyskytuje v´ yznamn´ e mnoˇ zstv´ı

Nad´ ale se pr´ ace bude vˇ enovat detekci nebezpeˇ cn´ ych man´ evr˚ u pomoc´ı strojov´ eho uˇ cen´ı a automatick´ eho rozpozn´ av´ an´ı....

V souladu se zad´ an´ım byla vylepˇsen´ a aplikace podrobena kvalitativn´ımu uˇ zivatelsk´ emu testov´ an´ı, jehoˇ z v´ ysledky jsou v textu pr´ ace rigor´ oznˇ e