<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tonda</id>
	<title>Kiwiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tonda"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Tonda"/>
	<updated>2026-05-04T13:09:42Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11810</id>
		<title>Realizace projektu EPIrozvrh a popis kódu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11810"/>
		<updated>2013-09-08T19:36:05Z</updated>

		<summary type="html">&lt;p&gt;Tonda: /* Balíček lib */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|5|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura aplikace EPI rozvrh se skládá ze dvou balíčků a to z&amp;amp;nbsp;cz.sajboch.epi_main a cz.sajboch.epi_timetable, dále jen epi_timetable, jenž reprezentuje balíček pro zobrazení školního rozvrhu. V&amp;amp;nbsp;následující části jsou popisovány pouze balíčky vytvořené v&amp;amp;nbsp;rámci této práce. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozdělení tříd do balíčků zajišťuje snadnou modifikaci aplikace a případné rozšíření o další funkce. Hlavní balíček cz.sajboch.epi_main se skládá ze šesti tříd: MainActivity'', ''LoginActivity'', ''AboutActivity'', ''OnlineRecords'', ''TimetableActivity a Settings, viz schéma č. 6. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy cz.sajboch.epi main.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 6: Diagram třídy cz.sajboch.epi_main&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak je patrné ze schématu č. 6, třída MainActivity je potomkem systémové třídy android.app.Activity, což ji tvoří spustitelnou. Třída MainActivity se spouští po spuštění aplikace. Její hlavní rolí je zobrazení ovládacího menu, jež obsahuje tlačítka. Grafické zobrazení je vytvořeno na základě XML souboru activity_main.xml. Po spuštění této třídy dochází k&amp;amp;nbsp;ověření přihlašovacích údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující obrázek je náhledem menu aplikace, jenž je vytvořeno na základě třídy MainActivity. Obrázek byl pořízen na mobilním zařízení Samsung Galaxy mini.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 12: Hlavní menu zařízení, Samsung Galaxy mini&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Settings je potomkem třídy android.preference.PreferenceActivity a slouží k&amp;amp;nbsp;zobrazení a modifikaci nastavení aplikace a uchovává přihlašovací údaje, datum poslední aktualizace, způsob aktualizace atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček epi_timetable tvoří rozvrh hodin a jeho funkce. Skládá se z&amp;amp;nbsp;několika dalších balíčků, kde každý z&amp;amp;nbsp;těchto balíčku má specifický význam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznam balíčků epi_timetable:&lt;br /&gt;
&lt;br /&gt;
* cz.sajboch.epi_timetable.communications dále jen communications, &lt;br /&gt;
* cz.sajboch.epi_timetable.lib dále jen lib,&lt;br /&gt;
* cz.sajboch.epi_timetable.popups dále jen popups,&lt;br /&gt;
* cz.sajboch.epi_timetable.timetable dále jen timetable,&lt;br /&gt;
* cz.sajboch.epi_timetable.widgets dále jen widgets.&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;následujících kapitolách budou popsány jednotlivé balíčky, jejich funkce, využití a způsob, jakým se používají. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček communications ==&lt;br /&gt;
Balíček communications poskytuje aplikaci komunikační protokoly pro připojení ke školnímu serveru a následné uložení stažených dat. Skládá se ze sedmi tříd, které jsou mezi sebou závislé. Tyto závislosti jsou viditelné na následujícím schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy communications.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 7: Diagram třídy communications&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Update slouží pro spuštění procesu aktualizace. Proces aktualizace probíhá tak, že se stáhnou data rozvrhu hodin ze školního serveru a následně se uloží do lokální databáze a souborů v&amp;amp;nbsp;mobilním zařízení. Stažení dat zajišťuje třída NetworkConnect běžící paralelně s hlavním vláknem programu. Paralelní běh zajišťuje rodičovský prvek AsyncTask, který vytvoří nové vlákno. Komunikace mezi těmito vlákny zajišťuje rozhranní AsyncTaskCompleteListener, jež třída Update implementuje. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vložení dat do databáze zajišťuje třída DataToDatabase. Pro načtení dat z&amp;amp;nbsp;databáze se používá třída DataFromDatabase. Obě třídy jsou potomkem Database a ta je potomkem SQLiteOpenHelper. Uložení a načtení dat ze souboru zajišťuje třída SaveListToFile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace ===&lt;br /&gt;
Aktualizace rozvrhu hodin jsou buď automatické, nebo ruční. To znamená, že aplikace může sama aktualizovat data rozvrhu hodin po určitém časovém intervalu. Časový interval určuje nastavení uživatele, kde uživatel má možnost zvolit z&amp;amp;nbsp;několika předem určených časových intervalů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při vytvoření instance třídy Update se zavolá konstruktor, ve kterém dojde k&amp;amp;nbsp;ověření, zda je databáze rozvrhu hodin aktuální vzhledem k&amp;amp;nbsp;nastavení intervalu aktualizací.Do proměnné autoUpdate datového typu boolean se uloží logická hodnota 1, neboli true'','' pokud jsou povoleny automatické aktualizace. Pokud povoleny nejsou, uloží se logická hodnota 0, tedy false. Výchozím nastavením je logická hodnota ''true''. Tuto hodnotu si může uživatel změnit v&amp;amp;nbsp;nastavení zaškrtnutím políčka „Automatické aktualizace“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zda je rozvrh hodin zastaralý zjistí metoda isOutDate(). Zjistí to tak, že porovná datum poslední aktualizace s&amp;amp;nbsp;aktuálním datem. Pokud je rozdíl větší než sedm dnů, metoda vyhodnotí rozvrh jako zastaralý a vrátí hodnotu true, v&amp;amp;nbsp;opačném případě vrátí hodnotu false. Rozdíl sedm dnů, tedy jeden týden, lze přenastavit na jinou hodnotu v&amp;amp;nbsp;nastavení aplikace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy ověřující, zda bude spuštěná automatická aktualizace:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Update(Context context){…&lt;br /&gt;
if (autoUpdate &amp;amp;&amp;amp; this.isOutDate ()) {&lt;br /&gt;
this.start();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V případě, je-li podmínka splněná, tedy jsou zapnuty automatické aktualizace a zároveň je interní databáze zastaralá, spustí se metoda start() třídy Update. Ta zjistí, zda již existuje interní databáze. Pokud existuje, bude zaktualizována pouze část rozvrhu hodin, a to od data provádění aktualizace do konce školního roku. Pokud interní databáze neexistuje, vytvoří se a zaktualizuje se rozvrh hodin od začátku až po konec školního roku. Následující kód popisuje část metody start() rozhodující v&amp;amp;nbsp;jakém rozsahu bude interní databáze aktualizována. &lt;br /&gt;
&lt;br /&gt;
Rozsah aktualizace interní databáze:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (db.isTimetableTable()) {&lt;br /&gt;
this.updateFrom = MyDate.getDate();db.deleteOlderFromTimetable(&lt;br /&gt;
MyDate.getZacatekSkolnihoRoku());&lt;br /&gt;
 } else {&lt;br /&gt;
this.updateFrom = MyDate.getZacatekSkolnihoRoku();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualizace může být spuštěna ručně, dojde-li k zavolání metody start() pomocí vytvořené instance této třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stahování dat ===&lt;br /&gt;
Platforma Android nemůže přímo přistupovat k&amp;amp;nbsp;databázi MYSQL, proto byla vytvořena další vrstva zabezpečující aplikaci přístup k&amp;amp;nbsp;datům. Tato vrstva je vytvořena pomocí PHP skriptu. PHP skript se obsluhuje HTTP požadavky typu POST. Na základě odeslaného požadavku vytáhne z&amp;amp;nbsp;databáze data, která pak zobrazí ve formě prostého textu formátovaného metodou JSON, viz kapitola 2.2.2. Na straně aplikace se o odeslání požadavku a zpracování výsledku stará metoda NetworkConnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operační systém Android nedovoluje provádět operace trvající delší dobu ve vlákně UI. Stahování dat se tedy provádí v&amp;amp;nbsp;jiném vlákně běžícím paralelně s&amp;amp;nbsp;vláknem UI, ale paralelně běžící vlákno nemůže přímo přistupovat k&amp;amp;nbsp;vizuálním prvkům a jakkoliv je editovat. Pokud je potřeba například aktualizovat vizuální prvek z&amp;amp;nbsp;paralelně běžícího vlákna, může se použít systémová třída android.os.AsyncTask, dále jen AsyncTask, a ta zajistí paralelní běh vlákna a průběžné aktualizace vizuálních prvků.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetworkConnect je potomkem AsyncTask, což ji činí spustitelnou v&amp;amp;nbsp;paralelně běžícím vlákně a dovoluje jí aktualizovat vizuální prvek. Z&amp;amp;nbsp;rodičovské třídy se převezmou metody doInBackground( Params … ) a &amp;lt;nowiki&amp;gt;onPostExecute( result[] … )&amp;lt;/nowiki&amp;gt;, které je třeba v&amp;amp;nbsp;této třídě implementovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída NetworkConnect a zděděné metody od rodičovské třídy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class NetworkConnect extends AsyncTask&amp;lt;Void, Void, String[]&amp;gt; {&lt;br /&gt;
…&lt;br /&gt;
@Override&lt;br /&gt;
protected String[] doInBackground(Void... params) {&lt;br /&gt;
String[] result;&lt;br /&gt;
…&lt;br /&gt;
return result;&lt;br /&gt;
}&lt;br /&gt;
@Override&lt;br /&gt;
protected void onPostExecute(String[] result) {&lt;br /&gt;
callback.onTaskComplete(result);&lt;br /&gt;
…&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zděděná metoda doInBackground(Void… params) se spouští již v&amp;amp;nbsp;novém vlákně, kde se odesílají požadavky serveru, jejichž výsledky se stahují ve formě textu. Jeden požadavek serveru může obsahovat více parametrů, a proto jsou jednotlivé požadavky vkládány do kolekce, která se odesílá jakožto jeden požadavek. Jednotlivé parametry požadavku obsahují dvojici klíč:hodnota a ukládají se proto do proměnné datového typu NameValuePair, který je uzpůsoben k&amp;amp;nbsp;ukládání těchto hodnot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Díky sofistikovanému využití metody doInBackground(Void… params) je možné odeslat více požadavků sériově. To probíhá tak, že se odešle požadavek, stáhne se výsledek odeslaného požadavku, který se uloží do pole datového typu String. Pak se odešle další požadavek, jehož výsledek se zase uloží do pole. Tento děj se opakuje tolikrát, kolik je požadavků. Po stažení posledního výsledku se ukončí vlákno a pole výsledků se odešle metodě &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt;, která již běží v hlavním vlákně UI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metoda &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt; pole výsledků žádným způsobem nezpracovává, pouze jej přeposílá dále, pomocí rozhraní AsyncTaskCompleteListener, jehož instance byla převzata při volání konstruktoru třídy NetworkConnect. Rozhraní poskytuje metodu zpětného volání, která se provede v&amp;amp;nbsp;místě vytvoření konstruktoru NetworkConnect, kde je umístěna. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Způsob komunikace třídy NetworkConnect&amp;lt;nowiki&amp;gt; je založený na pokročilých návrhových vzorech. [9, s. 286]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Konstruktor třídy NetworkConnect:&lt;br /&gt;
public NetworkConnect(AsyncTaskCompleteListener&amp;lt;String&amp;gt; cb) {&lt;br /&gt;
this.callback = cb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Způsob použití třídy NetworkConnect je velmi jednoduchý. Nejprve se vytvoří instance třídy, poté se zadají jednotlivé požadavky pro stažení dat pomocí níže zmíněných metod a v poslední řadě se zavolá metoda execute() spouštějící paralelní vlákno, které vykoná veškeré požadavky v&amp;amp;nbsp;metodě doInBackground(Void… params). Pro opakované použití třídy je potřeba vytvořit novou instanci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody třídy NetworkConnect pro nastavení požadavků:&lt;br /&gt;
&lt;br /&gt;
* public void setList()- nastaví požadavky pro stažení seznamu učitelů, místností a studijních kruhů,&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;public void setNameValuePair(List&amp;lt;NameValuePair&amp;gt; nameVP)&amp;lt;/nowiki&amp;gt; - nastaví libovolný požadavek,&lt;br /&gt;
* public void setUcitel(String u, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro učitele v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String t, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro studijní kruh v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String m, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro místnost v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}. &lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat ===&lt;br /&gt;
Aplikace ukládá data rozvrhu hodin a řídící data, které reprezentují seznam učitelů, místností a studijních kruhů. Data rozvrhu hodin a řídící data se ukládají rozdílným způsobem. Řídící data se ukládají v&amp;amp;nbsp;serializované podobě do souboru, kdežto data rozvrhu hodin se ukládají do lokální databáze. Jedná se o datové soubory, které byly popsány v&amp;amp;nbsp;kapitole 4.2.2. &lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do databáze'''&lt;br /&gt;
&lt;br /&gt;
Pro uložení dat získaných ze školního serveru je použita interní databáze SQLite, kterou poskytuje platforma Android. Databázi reprezentují třídy DataToDatabase a DataFromDatabase, které jsou potomky třídy Database. Database obsahuje strukturu databáze a to znamená, že určuje název databáze, názvy tabulek, názvy sloupců a jejich datové typy. Také samotnou databázi vytváří, což zajišťuje rodičovský prvek android.database.sqlite.SQLiteOpenHelper. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vkládání dat do databáze zajišťuje třída DataToDatabase využívající funkce třídy android.database.sqlite.SQLiteDatabase pomocí její instance, díky které je možné provádět SQL dotazy. Také lze pomocí této třídy smazat celou databázi nebo pouze její část. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data se do databáze vkládají prostřednictvím datového typu TimetableData uchovávající data datového typu CellData reprezentující jeden záznam v&amp;amp;nbsp;databázi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataToDatabase:&lt;br /&gt;
&lt;br /&gt;
* public void updateTimetableDB(TimetableData td) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než nejstarší datum vkládaných prvků a následně vloží nové data v&amp;amp;nbsp;proměnné db,&lt;br /&gt;
* public void updateTimetableDB(TimetableData td, String uFrom) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než datum nacházející se v&amp;amp;nbsp;proměnné uFrom, a následně vloží do databáze data z&amp;amp;nbsp;proměnné db, &lt;br /&gt;
* public void deleteOlderFromTimetable(String olderThan) - smaže data z&amp;amp;nbsp;databáze, starší než datum v&amp;amp;nbsp;proměnné ''olderThen'', &lt;br /&gt;
* public void deleteDb() - smaže celou databázi,&lt;br /&gt;
* public void addData(TimetableData td) - přidá do databáze data z&amp;amp;nbsp;proměnné td a zachová předcházející data uložená v&amp;amp;nbsp;databázi. &lt;br /&gt;
&lt;br /&gt;
Načtení dat z&amp;amp;nbsp;databáze zajišťuje třída DataFromDatabase, která pracuje na stejném principu jako třída DataToDatabase'','' ale nemá zapisovací práva. Díky tomu, že existují třídy pro čtení a zapisování do databáze zvlášť, je zajištěna určitá bezpečnost dat. Také se tím předchází nechtěnému smazání dat z databáze. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataFromDatabase:&lt;br /&gt;
&lt;br /&gt;
* public TimetableData getData(String week), načte data z databáze za období jednoho týdne, proměnná week obsahuje datum začátku týdne, &lt;br /&gt;
* public TimetableData getOneDayData(String day, int time), načte data z&amp;amp;nbsp;databáze ze dne, jehož datum se nachází v&amp;amp;nbsp;proměnné day a zároveň čas uložený v&amp;amp;nbsp;proměnné time než čas začátku hodiny.&lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do souboru'''&lt;br /&gt;
&lt;br /&gt;
Do souboru se ukládají seznamy učitelů, studijních kruhů a místností. Datovým typem takto ukládaných dat je List. Podrobnější popis je v&amp;amp;nbsp;kapitole 4.2.2. Pro ukládání dat je použita třída SaveListToFile, kde jsou využity principy pro práci se soubory v&amp;amp;nbsp;kombinaci s&amp;amp;nbsp;operačním systémem Android. Třída obsahuje řetězcové konstanty, které obsahují názvy souborů. Třída SaveListToFile'' ''pracuje s&amp;amp;nbsp;daty jako s&amp;amp;nbsp;objekty a také je tak ukládá do souboru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Řetězcové konstanty uchovávající název souboru:&lt;br /&gt;
&lt;br /&gt;
* public final static String TEACHER_LIST_FILE = &amp;quot;timetable_t_list.dat&amp;quot;,&lt;br /&gt;
* public final static String ROOM_LIST_FILE = &amp;quot;timetable_r_list.dat&amp;quot;,&lt;br /&gt;
* public final static String CLASS_LIST_FILE = &amp;quot;timetable_c_list.dat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ukládání dat zajišťuje writeListToFile(List&amp;lt;nowiki&amp;gt;&amp;lt;String&amp;gt;&amp;lt;/nowiki&amp;gt; list, String filename) přebírající dva parametry a to list datového typu List a název souboru filename datového typu String. Jako parametr filename může být použita některá z&amp;amp;nbsp;proměnných této třídy, avšak nemusí. Zavoláním této metody dojde k&amp;amp;nbsp;serializaci listu a jeho následné uložení do souboru s&amp;amp;nbsp;názvem, který byl předán jako parametr filename. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody writeListToFile():&lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.writeListToFile(list,SaveListToFile.TEACHER_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Načtení jednotlivých dat ze souboru zajišťuje statická metoda &amp;lt;nowiki&amp;gt;List&amp;lt;String&amp;gt; &amp;lt;/nowiki&amp;gt;loadListFromFile(String filename). Metoda přebírá jeden parametr filename určující název souboru, ze kterého se mají načíst data. Při zavolání metody dojde k&amp;amp;nbsp;načtení dat ze souboru a na základě těchto dat se vytvoří nový objekt datového typu Object. Ten se následně převede na datový typ List. Návratová hodnota je datového typu List a obsahuje načtená, jinak neupravená, data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody loadListFromFile(): &lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.loadListFromFile(SaveListToFile.ROOM_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Obě zmiňované metody pracují na principu ukládání a načítání dat formou objektu. &amp;lt;nowiki&amp;gt;[8, s. 289&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Balíček lib ==&lt;br /&gt;
Veškerý běh aplikace, který není vidět a nemá co dočinění s&amp;amp;nbsp;vnější komunikací, zabezpečují třídy tohoto balíčku a ten reprezentuje celou datovou strukturu rozvrhu hodin, jenž je velmi komplikovaná. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku lib.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 8: Diagram balíčku lib&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející schéma balíčku lib se skládá ze šesti tříd. MyDate zpracovává datum a provádí s&amp;amp;nbsp;ním různé operace. Třída UpdateThread zajišťuje zpracování stažených dat v&amp;amp;nbsp;paralelně běžícím vlákně. To je umožněno díky rodičovskému prvku android.os.AsyncTask. Třída MyJson slouží ke zpracování dat, která byla stažena. Stažená data jsou poté uložena do proměnné datového typu CellData reprezentující jednu buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
Třída TimetableData zpracovává a eviduje data datového typu CellData. V&amp;amp;nbsp;poslední řadě stojí třída LoginVerification, která slouží k&amp;amp;nbsp;ověření, zda proběhlo úspěšné přihlášení. Pracuje s&amp;amp;nbsp;instancí NetworkConnect a rozšiřuje ji rozhraní AsyncTaskCompleteListener. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zpracování stažených dat  ===&lt;br /&gt;
Data ze školního serveru jsou stažena ve formě prostého textu s formátováním JSON, což je popsáno v&amp;amp;nbsp;kapitole 2.2.2. Takto formátovaná data nejsou vhodná pro další zpracování aplikací. Aplikace má proto vlastní datovou strukturu pro stažená data, do které jsou stažená data zapracována.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datovou strukturu reprezentují třídy CellData a TimetableData. Tato datová struktura je pouze jakýmsi rozhraním mezi staženými daty, databází a vykreslením rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozvrh hodin se vizuálně skládá z&amp;amp;nbsp;řádků a sloupců. V&amp;amp;nbsp;místě protnutí určitého řádku a sloupce, tedy v&amp;amp;nbsp;buňce, může být umístěno více informačních buněk. Informační buňkou se myslí grafická buňka nesoucí informace o dané vyučovací hodině.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základním kamenem této struktury je třída CellData, ve které jsou uložena data reprezentující jednu informační buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proměnné třídy ''CellData'':&lt;br /&gt;
&lt;br /&gt;
* numberOfDay - obsahuje hodnoty od nuly do šesti kde nula symbolizuje pondělí, číslo jedna úterý, číslo dva středu, atd.,&lt;br /&gt;
* color ''-'' hexadecimální číselný údaj reprezentující barvu buňky, &lt;br /&gt;
* date - datum dne ke kterému se vztahují údaje,&lt;br /&gt;
* endTime - čas konce vyučovací hodiny definovaný v&amp;amp;nbsp;standardním unixovém čase,&lt;br /&gt;
* hour - číslo vyučovací hodiny,&lt;br /&gt;
* hours - počet hodin jdoucích bezprostředně za sebou,&lt;br /&gt;
* subject - celý název vyučovacího předmětu,&lt;br /&gt;
* group - číslo nebo název skupiny, pro kterou jsou data určeny, &lt;br /&gt;
* studyCircle - název studijního kruhu,&lt;br /&gt;
* time - čas začátku hodiny v&amp;amp;nbsp;milisekundách,&lt;br /&gt;
* schoolRoom - název učebny,&lt;br /&gt;
* teacher - celé příjmení a tituly učitele,&lt;br /&gt;
* teachers - seznam učitelů pro které platí tyto data,&lt;br /&gt;
* studyCircles - seznam studijních kruhů pro které platí tyto data,&lt;br /&gt;
* abbSubject - zkratka předmětu,&lt;br /&gt;
* abbSchoolroom - zkratka učebny,&lt;br /&gt;
* abbTeacher - zkratka učitele.&lt;br /&gt;
&lt;br /&gt;
Jelikož jsou veškeré proměnné privátní, existují metody pro jejich správu. Pro každou proměnnou existují minimálně dvě metody pro správu. Jedna metoda proměnnou nastavuje na jinou hodnotu a druhá metoda získává aktuální nastavení proměnné. Metod pro práci s&amp;amp;nbsp;proměnnými je mnoho, a proto není možné je zde všechny zmínit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé z&amp;amp;nbsp;metod pro práci s&amp;amp;nbsp;proměnnými:&lt;br /&gt;
&lt;br /&gt;
* setSubject(String value) - nastaví proměnnou subject na hodnotu ''value'',&lt;br /&gt;
* setTeacher(String value) - nastaví proměnnou teacher na hodnotu ''value'',&lt;br /&gt;
* getSubject() - vrací hodnotu textového řetězce proměnné subject,&lt;br /&gt;
* getTeacher() - vrací hodnotu textového řetězce proměnné teacher.&lt;br /&gt;
&lt;br /&gt;
Jak již bylo zmíněno, jeden objekt CellData obsahuje data pouze jedné informační buňky v&amp;amp;nbsp;rozvrhu hodin. Stažená data, která se mají uložit do databáze, obsahují však více takových buněk. Proto existuje třída TimetableData'','' jež spravuje jednotlivé objekty CellData. Spravuje je tak, že je jednotlivě ukládá do objektu List, tím tvoří seznam objektů CellData. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekty se vkládají do zásobníku jeden za druhým a první objekt je v&amp;amp;nbsp;zásobníku úplně naspodu. Další objekty se skládají nad první v&amp;amp;nbsp;pořadí, v&amp;amp;nbsp;jakém jsou vkládány. Při načítání jednotlivých dat se musí brát shora dolů, tedy od posledního k&amp;amp;nbsp;prvnímu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody TimetableData:&lt;br /&gt;
&lt;br /&gt;
* addData(CellData), přidá objekt CellData do seznamu,&lt;br /&gt;
* getFirstDate(), vrátí objekt CellData s&amp;amp;nbsp;nejmenším datem,&lt;br /&gt;
* getSize(), vrátí počet prvků v&amp;amp;nbsp;seznamu,&lt;br /&gt;
* getCell(), vrátí poslední objekt CellData, poté jej zahodí,&lt;br /&gt;
* hasCell(), zjistí, je-li v&amp;amp;nbsp;seznamu nějaký objekt,&lt;br /&gt;
* getHour(int hodina), je statická metoda, kterou lze použít bez vytvoření instance, vrací čas začátku a konce vyučovací hodiny v&amp;amp;nbsp;milisekundách předané v&amp;amp;nbsp;parametru hodina.&lt;br /&gt;
&lt;br /&gt;
=== Práce s datem ===&lt;br /&gt;
Aplikace rozvrhu hodin velmi často pracuje s&amp;amp;nbsp;datem, ať už při vykreslení rozvrhu hodin nebo uložení dat do databáze. Dá se tedy říct, že práce s&amp;amp;nbsp;datem hraje v&amp;amp;nbsp;aplikaci neodmyslitelnou roli a proto byla vytvořena samostatná třída MyDate obsahující metody ulehčující práci s&amp;amp;nbsp;datem. MyDate využívají veškeré balíčky aplikace rozvrhu hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Všechny metody třídy MyDate jsou statické, lze k&amp;amp;nbsp;nim tedy přistupovat bez nutnosti vytvářet instanci třídy. Obsahuje více než dvacet metod, které se využívají zejména pro zjištění aktuálního dne v&amp;amp;nbsp;týdnu, čísla dne, zjištění data následujícího či předcházejícího dne, zjištění data pondělku v&amp;amp;nbsp;minulém či následujícím týdnu a podobně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukázka některých metod třídy MyDate:&lt;br /&gt;
&lt;br /&gt;
* getEndOfSchollYear() - vrací textový řetězec s&amp;amp;nbsp;datem konce školního roku,&lt;br /&gt;
* getStartOfSchoolYear() - vrací textový řetězec s&amp;amp;nbsp;datem začátku školního roku,&lt;br /&gt;
* getMonday(String week) - přebírá datum některého dne v&amp;amp;nbsp;týdnu a vrací textová řetězec s&amp;amp;nbsp;datem pondělku v&amp;amp;nbsp;daném týdnu,&lt;br /&gt;
* getNumberOfDay(String datum) - vrací číslo dne v&amp;amp;nbsp;týdnu, přičemž pondělí je 0 a neděle 6,&lt;br /&gt;
* getNumberOfWeek(String date) - přebírá parametr date na jehož základě vrací číslo týdne v&amp;amp;nbsp;roce.&lt;br /&gt;
&lt;br /&gt;
=== Ověření přihlašovacích údajů ===&lt;br /&gt;
Ověření přihlašovacích údajů zajišťuje třída LoginVerification, rozšiřuje ji rozhraní AsyncTaskCompleteListener a obsahuje instanci třídy NetworkConnect'','' jenž je popsaná v&amp;amp;nbsp;kapitole 5.1.2. NetworkConnect zajišťuje možnost odeslání přihlašovacích údajů školnímu severu, který ověří, zda jsou přihlašovací údaje správné. Pokud školní server vyhodnotí přihlašovací údaje jako správné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou true. Vyhodnotí-li je jako nesprávné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou false. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace přijatá data vyhodnotí v&amp;amp;nbsp;metodě onTaskComplet&amp;lt;nowiki&amp;gt;e(String[] result)&amp;lt;/nowiki&amp;gt;, která je zavolána po stažení dat na základě požadavku. Vyhodnotí je tak, že ověří, zda na základě odeslaných přihlašovacích údajů serveru byl obdržen textový řetězec true. Pokud byl obdržen, tak se uloží přihlašovací údaje a stav přihlášení po dobu aktuálního školního roku. Po vypršení lhůty, se uživatel musí přihlásit znovu. Neobsahuje-li přijatý řetězec hodnotu true, není proces přihlášení úspěšný. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LoginVerification obsahuje vlastní rozhraní LoggedListener jehož metoda zpětného volání onLogged(boolean logged) je zavolána po ověření přihlašovacích údajů. Pokud bylo ověření přihlašovacích údajů kladné, je metodě předán parametr true. V&amp;amp;nbsp;opačném případě je předán parametr false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou předány metodě verify(), která odešle přihlašovací údaje školnímu serveru. Odeslání přihlašovacích údajů probíhá pomocí instance třídy NetworkConnect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura metody verify():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void verify(String login, String password, String kontext) {&lt;br /&gt;
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;login&amp;quot;, login));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;pass&amp;quot;, password));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;kontext&amp;quot;, kontext));&lt;br /&gt;
nc.setNameValuePair(nameValuePairs);&lt;br /&gt;
nc.setPage(&amp;quot;login.php&amp;quot;);&lt;br /&gt;
if (NetworkConnect.isConnection(context))&lt;br /&gt;
nc.execute();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metoda verify() přebírá tři parametry login, password a kontext. Těmto parametrům se přidělí klíčová hodnota definující jednotlivý parametr. Parametry jsou pak odeslány školnímu serveru pomocí instance třídy NetworkConnect za předpokladu, že je zařízení připojeno k&amp;amp;nbsp;síti internet.&lt;br /&gt;
&lt;br /&gt;
== Balíček timetable ==&lt;br /&gt;
Zobrazení rozvrhu hodin a správné zařazení stažených dat do jednotlivých buněk zajišťuje právě tento balíček. Tvoří jej pouze třídy, které zpracovaná data ve formě objektu TimetableData, zobrazí tak, aby jim uživatel porozuměl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku timetable.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 9: Diagram balíčku timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 9 jsou závislosti jednotlivých tříd v&amp;amp;nbsp;rámci tohoto balíčku i mimo něj. V&amp;amp;nbsp;následující části bude stručný popis jednotlivých tříd v&amp;amp;nbsp;rámci balíčku. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na schématu č. 9 třída CellView je potomkem systémové třídy android.widget.LinerLayout. Slouží k&amp;amp;nbsp;vykreslení jedné buňky obsahující data rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída TimetableView je potomkem systémové třídy FrameLayout, implementuje rozhraní AsyncTaskCompleteListener z&amp;amp;nbsp;balíčku communications a vykresluje rozvrh hodin. Data rozvrhu hodin dokáže sama získat z&amp;amp;nbsp;databáze nebo ze školního serveru za pomoci zmiňované implementace. Vykreslení rozvrhu je závislé na typu dat, tedy jedná-li se o data učitele, místnosti nebo studijního kruhu. K&amp;amp;nbsp;tomu slouží výčtový typ TimetableTyp určující, jakým způsobem budou data v&amp;amp;nbsp;rozvrhu hodin zobrazeny. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení rozvrhu hodin má v&amp;amp;nbsp;režii třída TimetableActivity, která je zároveň spouštěcí třídou rozvrhu hodin. To znamená, že po kliknutí na položku rozvrh hodin v&amp;amp;nbsp;menu aplikace se tato třída spustí a zobrazí rozvrh hodin. TimetableActivity implementuje řadu rozhraní, která slouží jako komunikační most mezi rozvrhem a uživatelem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Princip vykreslení rozvrhu hodin ===&lt;br /&gt;
Vytvoření rozvrhu hodin probíhá ve dvou fázích. První fází je inicializace a zobrazení prázdné tabulky rozvrhu hodin. Tabulka rozvrhu hodin je sestavena ze základních vizuálních prvků, které poskytuje platforma Android a vytvořena programově, není tedy využito XML návrhu. Vnoření jednotlivých vizuálních prvků je na schématu č. 10. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Způsob vnoření vizuálních prvků třídy TimetableView.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 10: Způsob vnoření vizuálních prvků třídy TimetableView&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka rozvrhu hodin je postavena na vizuálním prvku FrameLayout, který vyplňuje celou dostupnou plochu obrazovky. Následuje prvek ScrollView1 zajišťující posouvání rozvrhu hodin ve vertikálním směru za předpokladu, že má tabulka rozvrhu hodin větší výšku než je výška obrazovky. Prvek ScrollView1 může obsahovat pouze jeden prvek. Proto obsahuje horizontální prvek LinearLayout obsahující dva prvky. Levým prvkem je TableLayout, jež obsahuje řádky tabulky pro zobrazení dnů. Pravým prvkem je ScrollView2 zajišťující posouvání rozvrhu hodin v&amp;amp;nbsp;horizontálním směru, avšak pouze pokud je tabulka rozvrhu hodin širší než šířka obrazovky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při posouvání v&amp;amp;nbsp;horizontálním směru se tedy neposouvá prvek TableLayout1'','' ale posouvá se pouze obsah ScrollView2, což je prvek TableLayout2 obsahující řádky tabulky rozvrhu hodin, které reprezentuje prvek LinerLayout3 orientovaný vertikálně. LinearLayout3 reprezentuje jednu buňku rozvrhu hodin obsahující prvky TextView2, kde jsou umístěna data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ve druhé fázi je rozvrh hodin naplněn hodnotami a poté je upravena velikost řádků. Tabulka je také naplněna daty jednotlivých dnů v&amp;amp;nbsp;týdnu. Princip rozložení dat v&amp;amp;nbsp;tabulce rozvrhu hodin je na následujícím obrázku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozložení dat tabulky rozvrhu hodin.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 13: Rozložení dat tabulky rozvrhu hodin&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Buňka rozvrhu hodin může obsahovat více informačních buněk. To proto, že jedna vyučovací hodina může být vyučována více učiteli, ve stejné místnosti může být více studijních kruhů, studijní kruh je rozdělen na skupiny, atd. &lt;br /&gt;
&lt;br /&gt;
Každá informační buňka obsažená v&amp;amp;nbsp;jedné buňce tabulky rozvrhu hodin tedy charakterizuje výuku ve stejný časový okamžik a pro různé účastníky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ovládání rozvrhu hodin zajišťuje třída TimetableActivity pomocí třídy MyFiltr a implementací, které jsou znázorněny na schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je vykreslený rozvrh hodin. Snímek byl pořízen ze zařízení Nexus 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vykreslený rozvrh hodin, Nexus 7.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 14: Vykreslený rozvrh hodin, Nexus 7&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na předcházejícím obrázku je zobrazena aplikace EPI rozvrh s&amp;amp;nbsp;vykresleným rozvrhem hodin a ovládacími prvky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček popups ==&lt;br /&gt;
Za běhu aplikace nastávají situace, kdy je potřeba informovat uživatele, nebo od něj vyžádat vstup. To se provádí pomocí dialogů, což jsou vyskakovací okna. Veškeré dialogy v&amp;amp;nbsp;rámci aplikace rozvrhu hodin jsou umístěny v&amp;amp;nbsp;tomto balíčku.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku popups.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 11: Diagram balíčku popups&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček popups se skládá ze dvou tříd MyFiltr a Detail, výčtového typu enum s&amp;amp;nbsp;názvem Filtr a rozhraní PopupCompleteListener. Třída MyFiltr pracuje s&amp;amp;nbsp;instancí rozhraní PopupCompleteListener a s&amp;amp;nbsp;instancí výčtového typu s&amp;amp;nbsp;názvem Filtr. Třída Detail je potomkem systémové třídy Dialog a pracuje s&amp;amp;nbsp;instancemi tříd CellData a TimetableTyp. Všechny popisované vazby jsou znázorněny na schématu č. 11.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detail informační buňky z rozvrhu hodin ===&lt;br /&gt;
Informační buňka z&amp;amp;nbsp;rozvrhu hodin obsahuje spoustu informací, které nejsou zobrazeny v&amp;amp;nbsp;rozvrhu hodin. Pro jejich zobrazení je tedy použit dialog vyvolaný kliknutím na informační buňku, jenž je graficky upravený tak, aby v&amp;amp;nbsp;něm byly požadované informace srozumitelně a jednoduše zobrazeny, což je obrovská výhoda oproti stávajícímu rozvrhu hodin, který je dostupný na webových stránkách informačního systému školy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení dialogu zajišťuje třída Detail, která je potomkem třídy android.app.Dialog, což zajišťuje vyvolání dialogu po kliknutí na grafický prvek ''View'', jež je předán jako parametr při vytváření instance třídy Detial. Při vytváření instance se také předávají data pro zobrazení ve formě objektu CellData a hodnota výčtového typu TimetableTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekt CellData obsahuje veškeré informace určené k&amp;amp;nbsp;zobrazení v&amp;amp;nbsp;rámci dané buňky. Způsob zobrazení dat pro studenty, učitele a místnosti je rozdílný, i když jsou informace stejného charakteru, protože pro studenty je prioritní jiný typ informace než pro učitele nebo místnosti. K&amp;amp;nbsp;rozlišení způsobu zobrazení slouží výčtový typ s&amp;amp;nbsp;názvem TimetableTyp, jehož hodnota je předána právě při vytváření instance třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy Detail:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Detail(Context context, View view, CellData  cellData, TimetableType timTyp) {&lt;br /&gt;
super(context);&lt;br /&gt;
this.timTyp = timTyp;&lt;br /&gt;
this.cellData = cellData;&lt;br /&gt;
this.addListener(view);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;konstruktoru se převzaté objekty timTyp a cellData uloží do ekvivalentních proměnných patřících třídě Detail. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Metoda addListener(View):&lt;br /&gt;
private void addListener(View view) {&lt;br /&gt;
view.setOnClickListener(new View.OnClickListener() {&lt;br /&gt;
public void onClick(View v) {&lt;br /&gt;
Detail.this.show();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, metoda addListener(View) nastaví na převzatý objekt posluchače, který se spustí po kliknutí. Posluchač poté v&amp;amp;nbsp;případě kliknutí na objekt View zobrazí dialog a zavolá metodu onCreate(), jež byla převzata od rodičovského prvku. V&amp;amp;nbsp;metodě onCreate() se pak zobrazí data a způsob zobrazení ovlivňuje hodnota globální proměnné timTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zobrazení rozvrhu hodin pomocí filtru ===&lt;br /&gt;
Každý uživatel aplikace si může zobrazit nejenom svůj rozvrh hodin, ale může si také zobrazit rozvrh hodin pro jednotlivé studenty, učitele a místnosti. Tuto vlastnost aplikace zajišťuje třída MyFiltr, která je potomkem systémové třídy Dialog, což zajišťuje, že se MyFiltr zobrazí jako dialog. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MyFiltr obsahuje tři grafická políčka a z&amp;amp;nbsp;toho dvě jsou výběrová tlačítka. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání. První políčko udává, jedná-li se o rozvrh hodin pro učitele, místnost nebo pro studijní kruh. Druhé výběrové tlačítko obsahuje zkratky učitelů, místností nebo studijních kruhů. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání zkratky s&amp;amp;nbsp;automatickou nápovědou. Po zadání dvou písmen se zobrazí nabídka, která je ovlivněná výběrem prvního políčka. V&amp;amp;nbsp;této nabídce je seznam zkratek pro učitele, místnosti nebo studijní kruhy, jejichž první dvě písmena byla zadána.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První výběrové tlačítko tedy vždy obsahuje hodnoty učitel, místnost a studijní kruh. Výběrem tohoto políčka se ovlivní druhé výběrové políčko a třetí políčko pro ruční zadání s&amp;amp;nbsp;nápovědou. Posledním grafickým prvkem je tlačítko, jehož zmáčknutí zavře zobrazovaný dialog a zobrazí rozvrh hodin podle zadaných kriterií. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vytvořením instance třídy se nastaví vzhled dialogu na předem vytvořený design, který je definovaný v&amp;amp;nbsp;XML souboru s&amp;amp;nbsp;názvem my_filtr.xml. Dále dojde k&amp;amp;nbsp;přednastavení výběru tak, že se vybere první studijní kruh v&amp;amp;nbsp;seznamu. Uživatel tuto volbu pak může kdykoliv změnit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček widgets ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Aplikace rozvrhu hodin poskytuje miniaplikaci na plochu, což je minimalizovaná verze aplikace zpracovaná tak, aby ji bylo možné zobrazit na domovské obrazovce zařízení. [33]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minimalizovaná aplikace se zobrazuje ve formě seznamu vyučovacích hodin za období jednoho dne. Každých 30 minut se seznam aktualizuje a v&amp;amp;nbsp;případě, že dojde k&amp;amp;nbsp;ukončení některé výuky, odstraní se také ze seznamu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku widget.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 12: Diagram balíčku widget&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dle schématu č. 12 se tato třída skládá z&amp;amp;nbsp;balíčků ViewsFactory, WidgetProvider a WidgetService. WidgetProvider se stará o zobrazení miniaplikace a její správu. ViewsFactory pomocí WidgetService naplní miniaplikaci hodnotami. Vzhled miniaplikace se skládá z hlavičky, kde je název aktuálního dne a datum dne. Dále jej tvoří ListView'','' který slouží k&amp;amp;nbsp;zobrazení jednotlivých dat rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzhled widgetu.png.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 15: Vzhled widgetu&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na obrázku č. 15, widget se skládá z&amp;amp;nbsp;několika prvků LinearLayout určující rozmístění vizuálních prvků. Jedná se především o prvky TextView, které jsou umístěny ve vertikálně orientovaném prvku, což způsobuje, že jsou tyto prvky TextView umístěny pod sebou. Dále následuje nejdůležitější část miniaplikace a to je ListView. ListView je posuvný seznam obsahující prvky rozvrhu hodin. Miniaplikaci je možné zobrazit pouze na domovské obrazovce zařízení, jehož verze operačního systému je vyšší než API 11.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11809</id>
		<title>Realizace projektu EPIrozvrh a popis kódu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11809"/>
		<updated>2013-09-08T19:35:28Z</updated>

		<summary type="html">&lt;p&gt;Tonda: /* Balíček communications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|5|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura aplikace EPI rozvrh se skládá ze dvou balíčků a to z&amp;amp;nbsp;cz.sajboch.epi_main a cz.sajboch.epi_timetable, dále jen epi_timetable, jenž reprezentuje balíček pro zobrazení školního rozvrhu. V&amp;amp;nbsp;následující části jsou popisovány pouze balíčky vytvořené v&amp;amp;nbsp;rámci této práce. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozdělení tříd do balíčků zajišťuje snadnou modifikaci aplikace a případné rozšíření o další funkce. Hlavní balíček cz.sajboch.epi_main se skládá ze šesti tříd: MainActivity'', ''LoginActivity'', ''AboutActivity'', ''OnlineRecords'', ''TimetableActivity a Settings, viz schéma č. 6. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy cz.sajboch.epi main.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 6: Diagram třídy cz.sajboch.epi_main&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak je patrné ze schématu č. 6, třída MainActivity je potomkem systémové třídy android.app.Activity, což ji tvoří spustitelnou. Třída MainActivity se spouští po spuštění aplikace. Její hlavní rolí je zobrazení ovládacího menu, jež obsahuje tlačítka. Grafické zobrazení je vytvořeno na základě XML souboru activity_main.xml. Po spuštění této třídy dochází k&amp;amp;nbsp;ověření přihlašovacích údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující obrázek je náhledem menu aplikace, jenž je vytvořeno na základě třídy MainActivity. Obrázek byl pořízen na mobilním zařízení Samsung Galaxy mini.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 12: Hlavní menu zařízení, Samsung Galaxy mini&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Settings je potomkem třídy android.preference.PreferenceActivity a slouží k&amp;amp;nbsp;zobrazení a modifikaci nastavení aplikace a uchovává přihlašovací údaje, datum poslední aktualizace, způsob aktualizace atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček epi_timetable tvoří rozvrh hodin a jeho funkce. Skládá se z&amp;amp;nbsp;několika dalších balíčků, kde každý z&amp;amp;nbsp;těchto balíčku má specifický význam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznam balíčků epi_timetable:&lt;br /&gt;
&lt;br /&gt;
* cz.sajboch.epi_timetable.communications dále jen communications, &lt;br /&gt;
* cz.sajboch.epi_timetable.lib dále jen lib,&lt;br /&gt;
* cz.sajboch.epi_timetable.popups dále jen popups,&lt;br /&gt;
* cz.sajboch.epi_timetable.timetable dále jen timetable,&lt;br /&gt;
* cz.sajboch.epi_timetable.widgets dále jen widgets.&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;následujících kapitolách budou popsány jednotlivé balíčky, jejich funkce, využití a způsob, jakým se používají. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček communications ==&lt;br /&gt;
Balíček communications poskytuje aplikaci komunikační protokoly pro připojení ke školnímu serveru a následné uložení stažených dat. Skládá se ze sedmi tříd, které jsou mezi sebou závislé. Tyto závislosti jsou viditelné na následujícím schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy communications.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 7: Diagram třídy communications&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Update slouží pro spuštění procesu aktualizace. Proces aktualizace probíhá tak, že se stáhnou data rozvrhu hodin ze školního serveru a následně se uloží do lokální databáze a souborů v&amp;amp;nbsp;mobilním zařízení. Stažení dat zajišťuje třída NetworkConnect běžící paralelně s hlavním vláknem programu. Paralelní běh zajišťuje rodičovský prvek AsyncTask, který vytvoří nové vlákno. Komunikace mezi těmito vlákny zajišťuje rozhranní AsyncTaskCompleteListener, jež třída Update implementuje. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vložení dat do databáze zajišťuje třída DataToDatabase. Pro načtení dat z&amp;amp;nbsp;databáze se používá třída DataFromDatabase. Obě třídy jsou potomkem Database a ta je potomkem SQLiteOpenHelper. Uložení a načtení dat ze souboru zajišťuje třída SaveListToFile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace ===&lt;br /&gt;
Aktualizace rozvrhu hodin jsou buď automatické, nebo ruční. To znamená, že aplikace může sama aktualizovat data rozvrhu hodin po určitém časovém intervalu. Časový interval určuje nastavení uživatele, kde uživatel má možnost zvolit z&amp;amp;nbsp;několika předem určených časových intervalů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při vytvoření instance třídy Update se zavolá konstruktor, ve kterém dojde k&amp;amp;nbsp;ověření, zda je databáze rozvrhu hodin aktuální vzhledem k&amp;amp;nbsp;nastavení intervalu aktualizací.Do proměnné autoUpdate datového typu boolean se uloží logická hodnota 1, neboli true'','' pokud jsou povoleny automatické aktualizace. Pokud povoleny nejsou, uloží se logická hodnota 0, tedy false. Výchozím nastavením je logická hodnota ''true''. Tuto hodnotu si může uživatel změnit v&amp;amp;nbsp;nastavení zaškrtnutím políčka „Automatické aktualizace“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zda je rozvrh hodin zastaralý zjistí metoda isOutDate(). Zjistí to tak, že porovná datum poslední aktualizace s&amp;amp;nbsp;aktuálním datem. Pokud je rozdíl větší než sedm dnů, metoda vyhodnotí rozvrh jako zastaralý a vrátí hodnotu true, v&amp;amp;nbsp;opačném případě vrátí hodnotu false. Rozdíl sedm dnů, tedy jeden týden, lze přenastavit na jinou hodnotu v&amp;amp;nbsp;nastavení aplikace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy ověřující, zda bude spuštěná automatická aktualizace:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Update(Context context){…&lt;br /&gt;
if (autoUpdate &amp;amp;&amp;amp; this.isOutDate ()) {&lt;br /&gt;
this.start();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V případě, je-li podmínka splněná, tedy jsou zapnuty automatické aktualizace a zároveň je interní databáze zastaralá, spustí se metoda start() třídy Update. Ta zjistí, zda již existuje interní databáze. Pokud existuje, bude zaktualizována pouze část rozvrhu hodin, a to od data provádění aktualizace do konce školního roku. Pokud interní databáze neexistuje, vytvoří se a zaktualizuje se rozvrh hodin od začátku až po konec školního roku. Následující kód popisuje část metody start() rozhodující v&amp;amp;nbsp;jakém rozsahu bude interní databáze aktualizována. &lt;br /&gt;
&lt;br /&gt;
Rozsah aktualizace interní databáze:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (db.isTimetableTable()) {&lt;br /&gt;
this.updateFrom = MyDate.getDate();db.deleteOlderFromTimetable(&lt;br /&gt;
MyDate.getZacatekSkolnihoRoku());&lt;br /&gt;
 } else {&lt;br /&gt;
this.updateFrom = MyDate.getZacatekSkolnihoRoku();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualizace může být spuštěna ručně, dojde-li k zavolání metody start() pomocí vytvořené instance této třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stahování dat ===&lt;br /&gt;
Platforma Android nemůže přímo přistupovat k&amp;amp;nbsp;databázi MYSQL, proto byla vytvořena další vrstva zabezpečující aplikaci přístup k&amp;amp;nbsp;datům. Tato vrstva je vytvořena pomocí PHP skriptu. PHP skript se obsluhuje HTTP požadavky typu POST. Na základě odeslaného požadavku vytáhne z&amp;amp;nbsp;databáze data, která pak zobrazí ve formě prostého textu formátovaného metodou JSON, viz kapitola 2.2.2. Na straně aplikace se o odeslání požadavku a zpracování výsledku stará metoda NetworkConnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operační systém Android nedovoluje provádět operace trvající delší dobu ve vlákně UI. Stahování dat se tedy provádí v&amp;amp;nbsp;jiném vlákně běžícím paralelně s&amp;amp;nbsp;vláknem UI, ale paralelně běžící vlákno nemůže přímo přistupovat k&amp;amp;nbsp;vizuálním prvkům a jakkoliv je editovat. Pokud je potřeba například aktualizovat vizuální prvek z&amp;amp;nbsp;paralelně běžícího vlákna, může se použít systémová třída android.os.AsyncTask, dále jen AsyncTask, a ta zajistí paralelní běh vlákna a průběžné aktualizace vizuálních prvků.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetworkConnect je potomkem AsyncTask, což ji činí spustitelnou v&amp;amp;nbsp;paralelně běžícím vlákně a dovoluje jí aktualizovat vizuální prvek. Z&amp;amp;nbsp;rodičovské třídy se převezmou metody doInBackground( Params … ) a &amp;lt;nowiki&amp;gt;onPostExecute( result[] … )&amp;lt;/nowiki&amp;gt;, které je třeba v&amp;amp;nbsp;této třídě implementovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída NetworkConnect a zděděné metody od rodičovské třídy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class NetworkConnect extends AsyncTask&amp;lt;Void, Void, String[]&amp;gt; {&lt;br /&gt;
…&lt;br /&gt;
@Override&lt;br /&gt;
protected String[] doInBackground(Void... params) {&lt;br /&gt;
String[] result;&lt;br /&gt;
…&lt;br /&gt;
return result;&lt;br /&gt;
}&lt;br /&gt;
@Override&lt;br /&gt;
protected void onPostExecute(String[] result) {&lt;br /&gt;
callback.onTaskComplete(result);&lt;br /&gt;
…&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zděděná metoda doInBackground(Void… params) se spouští již v&amp;amp;nbsp;novém vlákně, kde se odesílají požadavky serveru, jejichž výsledky se stahují ve formě textu. Jeden požadavek serveru může obsahovat více parametrů, a proto jsou jednotlivé požadavky vkládány do kolekce, která se odesílá jakožto jeden požadavek. Jednotlivé parametry požadavku obsahují dvojici klíč:hodnota a ukládají se proto do proměnné datového typu NameValuePair, který je uzpůsoben k&amp;amp;nbsp;ukládání těchto hodnot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Díky sofistikovanému využití metody doInBackground(Void… params) je možné odeslat více požadavků sériově. To probíhá tak, že se odešle požadavek, stáhne se výsledek odeslaného požadavku, který se uloží do pole datového typu String. Pak se odešle další požadavek, jehož výsledek se zase uloží do pole. Tento děj se opakuje tolikrát, kolik je požadavků. Po stažení posledního výsledku se ukončí vlákno a pole výsledků se odešle metodě &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt;, která již běží v hlavním vlákně UI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metoda &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt; pole výsledků žádným způsobem nezpracovává, pouze jej přeposílá dále, pomocí rozhraní AsyncTaskCompleteListener, jehož instance byla převzata při volání konstruktoru třídy NetworkConnect. Rozhraní poskytuje metodu zpětného volání, která se provede v&amp;amp;nbsp;místě vytvoření konstruktoru NetworkConnect, kde je umístěna. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Způsob komunikace třídy NetworkConnect&amp;lt;nowiki&amp;gt; je založený na pokročilých návrhových vzorech. [9, s. 286]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Konstruktor třídy NetworkConnect:&lt;br /&gt;
public NetworkConnect(AsyncTaskCompleteListener&amp;lt;String&amp;gt; cb) {&lt;br /&gt;
this.callback = cb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Způsob použití třídy NetworkConnect je velmi jednoduchý. Nejprve se vytvoří instance třídy, poté se zadají jednotlivé požadavky pro stažení dat pomocí níže zmíněných metod a v poslední řadě se zavolá metoda execute() spouštějící paralelní vlákno, které vykoná veškeré požadavky v&amp;amp;nbsp;metodě doInBackground(Void… params). Pro opakované použití třídy je potřeba vytvořit novou instanci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody třídy NetworkConnect pro nastavení požadavků:&lt;br /&gt;
&lt;br /&gt;
* public void setList()- nastaví požadavky pro stažení seznamu učitelů, místností a studijních kruhů,&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;public void setNameValuePair(List&amp;lt;NameValuePair&amp;gt; nameVP)&amp;lt;/nowiki&amp;gt; - nastaví libovolný požadavek,&lt;br /&gt;
* public void setUcitel(String u, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro učitele v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String t, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro studijní kruh v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String m, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro místnost v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}. &lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat ===&lt;br /&gt;
Aplikace ukládá data rozvrhu hodin a řídící data, které reprezentují seznam učitelů, místností a studijních kruhů. Data rozvrhu hodin a řídící data se ukládají rozdílným způsobem. Řídící data se ukládají v&amp;amp;nbsp;serializované podobě do souboru, kdežto data rozvrhu hodin se ukládají do lokální databáze. Jedná se o datové soubory, které byly popsány v&amp;amp;nbsp;kapitole 4.2.2. &lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do databáze'''&lt;br /&gt;
&lt;br /&gt;
Pro uložení dat získaných ze školního serveru je použita interní databáze SQLite, kterou poskytuje platforma Android. Databázi reprezentují třídy DataToDatabase a DataFromDatabase, které jsou potomky třídy Database. Database obsahuje strukturu databáze a to znamená, že určuje název databáze, názvy tabulek, názvy sloupců a jejich datové typy. Také samotnou databázi vytváří, což zajišťuje rodičovský prvek android.database.sqlite.SQLiteOpenHelper. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vkládání dat do databáze zajišťuje třída DataToDatabase využívající funkce třídy android.database.sqlite.SQLiteDatabase pomocí její instance, díky které je možné provádět SQL dotazy. Také lze pomocí této třídy smazat celou databázi nebo pouze její část. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data se do databáze vkládají prostřednictvím datového typu TimetableData uchovávající data datového typu CellData reprezentující jeden záznam v&amp;amp;nbsp;databázi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataToDatabase:&lt;br /&gt;
&lt;br /&gt;
* public void updateTimetableDB(TimetableData td) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než nejstarší datum vkládaných prvků a následně vloží nové data v&amp;amp;nbsp;proměnné db,&lt;br /&gt;
* public void updateTimetableDB(TimetableData td, String uFrom) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než datum nacházející se v&amp;amp;nbsp;proměnné uFrom, a následně vloží do databáze data z&amp;amp;nbsp;proměnné db, &lt;br /&gt;
* public void deleteOlderFromTimetable(String olderThan) - smaže data z&amp;amp;nbsp;databáze, starší než datum v&amp;amp;nbsp;proměnné ''olderThen'', &lt;br /&gt;
* public void deleteDb() - smaže celou databázi,&lt;br /&gt;
* public void addData(TimetableData td) - přidá do databáze data z&amp;amp;nbsp;proměnné td a zachová předcházející data uložená v&amp;amp;nbsp;databázi. &lt;br /&gt;
&lt;br /&gt;
Načtení dat z&amp;amp;nbsp;databáze zajišťuje třída DataFromDatabase, která pracuje na stejném principu jako třída DataToDatabase'','' ale nemá zapisovací práva. Díky tomu, že existují třídy pro čtení a zapisování do databáze zvlášť, je zajištěna určitá bezpečnost dat. Také se tím předchází nechtěnému smazání dat z databáze. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataFromDatabase:&lt;br /&gt;
&lt;br /&gt;
* public TimetableData getData(String week), načte data z databáze za období jednoho týdne, proměnná week obsahuje datum začátku týdne, &lt;br /&gt;
* public TimetableData getOneDayData(String day, int time), načte data z&amp;amp;nbsp;databáze ze dne, jehož datum se nachází v&amp;amp;nbsp;proměnné day a zároveň čas uložený v&amp;amp;nbsp;proměnné time než čas začátku hodiny.&lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do souboru'''&lt;br /&gt;
&lt;br /&gt;
Do souboru se ukládají seznamy učitelů, studijních kruhů a místností. Datovým typem takto ukládaných dat je List. Podrobnější popis je v&amp;amp;nbsp;kapitole 4.2.2. Pro ukládání dat je použita třída SaveListToFile, kde jsou využity principy pro práci se soubory v&amp;amp;nbsp;kombinaci s&amp;amp;nbsp;operačním systémem Android. Třída obsahuje řetězcové konstanty, které obsahují názvy souborů. Třída SaveListToFile'' ''pracuje s&amp;amp;nbsp;daty jako s&amp;amp;nbsp;objekty a také je tak ukládá do souboru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Řetězcové konstanty uchovávající název souboru:&lt;br /&gt;
&lt;br /&gt;
* public final static String TEACHER_LIST_FILE = &amp;quot;timetable_t_list.dat&amp;quot;,&lt;br /&gt;
* public final static String ROOM_LIST_FILE = &amp;quot;timetable_r_list.dat&amp;quot;,&lt;br /&gt;
* public final static String CLASS_LIST_FILE = &amp;quot;timetable_c_list.dat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ukládání dat zajišťuje writeListToFile(List&amp;lt;nowiki&amp;gt;&amp;lt;String&amp;gt;&amp;lt;/nowiki&amp;gt; list, String filename) přebírající dva parametry a to list datového typu List a název souboru filename datového typu String. Jako parametr filename může být použita některá z&amp;amp;nbsp;proměnných této třídy, avšak nemusí. Zavoláním této metody dojde k&amp;amp;nbsp;serializaci listu a jeho následné uložení do souboru s&amp;amp;nbsp;názvem, který byl předán jako parametr filename. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody writeListToFile():&lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.writeListToFile(list,SaveListToFile.TEACHER_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Načtení jednotlivých dat ze souboru zajišťuje statická metoda &amp;lt;nowiki&amp;gt;List&amp;lt;String&amp;gt; &amp;lt;/nowiki&amp;gt;loadListFromFile(String filename). Metoda přebírá jeden parametr filename určující název souboru, ze kterého se mají načíst data. Při zavolání metody dojde k&amp;amp;nbsp;načtení dat ze souboru a na základě těchto dat se vytvoří nový objekt datového typu Object. Ten se následně převede na datový typ List. Návratová hodnota je datového typu List a obsahuje načtená, jinak neupravená, data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody loadListFromFile(): &lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.loadListFromFile(SaveListToFile.ROOM_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Obě zmiňované metody pracují na principu ukládání a načítání dat formou objektu. &amp;lt;nowiki&amp;gt;[8, s. 289&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Balíček lib ==&lt;br /&gt;
Veškerý běh aplikace, který není vidět a nemá co dočinění s&amp;amp;nbsp;vnější komunikací, zabezpečují třídy tohoto balíčku a ten reprezentuje celou datovou strukturu rozvrhu hodin, jenž je velmi komplikovaná. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku lib.png]]&lt;br /&gt;
Schéma č. 8: Diagram balíčku lib&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející schéma balíčku lib se skládá ze šesti tříd. MyDate zpracovává datum a provádí s&amp;amp;nbsp;ním různé operace. Třída UpdateThread zajišťuje zpracování stažených dat v&amp;amp;nbsp;paralelně běžícím vlákně. To je umožněno díky rodičovskému prvku android.os.AsyncTask. Třída MyJson slouží ke zpracování dat, která byla stažena. Stažená data jsou poté uložena do proměnné datového typu CellData reprezentující jednu buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
Třída TimetableData zpracovává a eviduje data datového typu CellData. V&amp;amp;nbsp;poslední řadě stojí třída LoginVerification, která slouží k&amp;amp;nbsp;ověření, zda proběhlo úspěšné přihlášení. Pracuje s&amp;amp;nbsp;instancí NetworkConnect a rozšiřuje ji rozhraní AsyncTaskCompleteListener. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zpracování stažených dat  ===&lt;br /&gt;
Data ze školního serveru jsou stažena ve formě prostého textu s formátováním JSON, což je popsáno v&amp;amp;nbsp;kapitole 2.2.2. Takto formátovaná data nejsou vhodná pro další zpracování aplikací. Aplikace má proto vlastní datovou strukturu pro stažená data, do které jsou stažená data zapracována.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datovou strukturu reprezentují třídy CellData a TimetableData. Tato datová struktura je pouze jakýmsi rozhraním mezi staženými daty, databází a vykreslením rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozvrh hodin se vizuálně skládá z&amp;amp;nbsp;řádků a sloupců. V&amp;amp;nbsp;místě protnutí určitého řádku a sloupce, tedy v&amp;amp;nbsp;buňce, může být umístěno více informačních buněk. Informační buňkou se myslí grafická buňka nesoucí informace o dané vyučovací hodině.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základním kamenem této struktury je třída CellData, ve které jsou uložena data reprezentující jednu informační buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proměnné třídy ''CellData'':&lt;br /&gt;
&lt;br /&gt;
* numberOfDay - obsahuje hodnoty od nuly do šesti kde nula symbolizuje pondělí, číslo jedna úterý, číslo dva středu, atd.,&lt;br /&gt;
* color ''-'' hexadecimální číselný údaj reprezentující barvu buňky, &lt;br /&gt;
* date - datum dne ke kterému se vztahují údaje,&lt;br /&gt;
* endTime - čas konce vyučovací hodiny definovaný v&amp;amp;nbsp;standardním unixovém čase,&lt;br /&gt;
* hour - číslo vyučovací hodiny,&lt;br /&gt;
* hours - počet hodin jdoucích bezprostředně za sebou,&lt;br /&gt;
* subject - celý název vyučovacího předmětu,&lt;br /&gt;
* group - číslo nebo název skupiny, pro kterou jsou data určeny, &lt;br /&gt;
* studyCircle - název studijního kruhu,&lt;br /&gt;
* time - čas začátku hodiny v&amp;amp;nbsp;milisekundách,&lt;br /&gt;
* schoolRoom - název učebny,&lt;br /&gt;
* teacher - celé příjmení a tituly učitele,&lt;br /&gt;
* teachers - seznam učitelů pro které platí tyto data,&lt;br /&gt;
* studyCircles - seznam studijních kruhů pro které platí tyto data,&lt;br /&gt;
* abbSubject - zkratka předmětu,&lt;br /&gt;
* abbSchoolroom - zkratka učebny,&lt;br /&gt;
* abbTeacher - zkratka učitele.&lt;br /&gt;
&lt;br /&gt;
Jelikož jsou veškeré proměnné privátní, existují metody pro jejich správu. Pro každou proměnnou existují minimálně dvě metody pro správu. Jedna metoda proměnnou nastavuje na jinou hodnotu a druhá metoda získává aktuální nastavení proměnné. Metod pro práci s&amp;amp;nbsp;proměnnými je mnoho, a proto není možné je zde všechny zmínit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé z&amp;amp;nbsp;metod pro práci s&amp;amp;nbsp;proměnnými:&lt;br /&gt;
&lt;br /&gt;
* setSubject(String value) - nastaví proměnnou subject na hodnotu ''value'',&lt;br /&gt;
* setTeacher(String value) - nastaví proměnnou teacher na hodnotu ''value'',&lt;br /&gt;
* getSubject() - vrací hodnotu textového řetězce proměnné subject,&lt;br /&gt;
* getTeacher() - vrací hodnotu textového řetězce proměnné teacher.&lt;br /&gt;
&lt;br /&gt;
Jak již bylo zmíněno, jeden objekt CellData obsahuje data pouze jedné informační buňky v&amp;amp;nbsp;rozvrhu hodin. Stažená data, která se mají uložit do databáze, obsahují však více takových buněk. Proto existuje třída TimetableData'','' jež spravuje jednotlivé objekty CellData. Spravuje je tak, že je jednotlivě ukládá do objektu List, tím tvoří seznam objektů CellData. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekty se vkládají do zásobníku jeden za druhým a první objekt je v&amp;amp;nbsp;zásobníku úplně naspodu. Další objekty se skládají nad první v&amp;amp;nbsp;pořadí, v&amp;amp;nbsp;jakém jsou vkládány. Při načítání jednotlivých dat se musí brát shora dolů, tedy od posledního k&amp;amp;nbsp;prvnímu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody TimetableData:&lt;br /&gt;
&lt;br /&gt;
* addData(CellData), přidá objekt CellData do seznamu,&lt;br /&gt;
* getFirstDate(), vrátí objekt CellData s&amp;amp;nbsp;nejmenším datem,&lt;br /&gt;
* getSize(), vrátí počet prvků v&amp;amp;nbsp;seznamu,&lt;br /&gt;
* getCell(), vrátí poslední objekt CellData, poté jej zahodí,&lt;br /&gt;
* hasCell(), zjistí, je-li v&amp;amp;nbsp;seznamu nějaký objekt,&lt;br /&gt;
* getHour(int hodina), je statická metoda, kterou lze použít bez vytvoření instance, vrací čas začátku a konce vyučovací hodiny v&amp;amp;nbsp;milisekundách předané v&amp;amp;nbsp;parametru hodina.&lt;br /&gt;
&lt;br /&gt;
=== Práce s datem ===&lt;br /&gt;
Aplikace rozvrhu hodin velmi často pracuje s&amp;amp;nbsp;datem, ať už při vykreslení rozvrhu hodin nebo uložení dat do databáze. Dá se tedy říct, že práce s&amp;amp;nbsp;datem hraje v&amp;amp;nbsp;aplikaci neodmyslitelnou roli a proto byla vytvořena samostatná třída MyDate obsahující metody ulehčující práci s&amp;amp;nbsp;datem. MyDate využívají veškeré balíčky aplikace rozvrhu hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Všechny metody třídy MyDate jsou statické, lze k&amp;amp;nbsp;nim tedy přistupovat bez nutnosti vytvářet instanci třídy. Obsahuje více než dvacet metod, které se využívají zejména pro zjištění aktuálního dne v&amp;amp;nbsp;týdnu, čísla dne, zjištění data následujícího či předcházejícího dne, zjištění data pondělku v&amp;amp;nbsp;minulém či následujícím týdnu a podobně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukázka některých metod třídy MyDate:&lt;br /&gt;
&lt;br /&gt;
* getEndOfSchollYear() - vrací textový řetězec s&amp;amp;nbsp;datem konce školního roku,&lt;br /&gt;
* getStartOfSchoolYear() - vrací textový řetězec s&amp;amp;nbsp;datem začátku školního roku,&lt;br /&gt;
* getMonday(String week) - přebírá datum některého dne v&amp;amp;nbsp;týdnu a vrací textová řetězec s&amp;amp;nbsp;datem pondělku v&amp;amp;nbsp;daném týdnu,&lt;br /&gt;
* getNumberOfDay(String datum) - vrací číslo dne v&amp;amp;nbsp;týdnu, přičemž pondělí je 0 a neděle 6,&lt;br /&gt;
* getNumberOfWeek(String date) - přebírá parametr date na jehož základě vrací číslo týdne v&amp;amp;nbsp;roce.&lt;br /&gt;
&lt;br /&gt;
=== Ověření přihlašovacích údajů ===&lt;br /&gt;
Ověření přihlašovacích údajů zajišťuje třída LoginVerification, rozšiřuje ji rozhraní AsyncTaskCompleteListener a obsahuje instanci třídy NetworkConnect'','' jenž je popsaná v&amp;amp;nbsp;kapitole 5.1.2. NetworkConnect zajišťuje možnost odeslání přihlašovacích údajů školnímu severu, který ověří, zda jsou přihlašovací údaje správné. Pokud školní server vyhodnotí přihlašovací údaje jako správné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou true. Vyhodnotí-li je jako nesprávné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou false. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace přijatá data vyhodnotí v&amp;amp;nbsp;metodě onTaskComplet&amp;lt;nowiki&amp;gt;e(String[] result)&amp;lt;/nowiki&amp;gt;, která je zavolána po stažení dat na základě požadavku. Vyhodnotí je tak, že ověří, zda na základě odeslaných přihlašovacích údajů serveru byl obdržen textový řetězec true. Pokud byl obdržen, tak se uloží přihlašovací údaje a stav přihlášení po dobu aktuálního školního roku. Po vypršení lhůty, se uživatel musí přihlásit znovu. Neobsahuje-li přijatý řetězec hodnotu true, není proces přihlášení úspěšný. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LoginVerification obsahuje vlastní rozhraní LoggedListener jehož metoda zpětného volání onLogged(boolean logged) je zavolána po ověření přihlašovacích údajů. Pokud bylo ověření přihlašovacích údajů kladné, je metodě předán parametr true. V&amp;amp;nbsp;opačném případě je předán parametr false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou předány metodě verify(), která odešle přihlašovací údaje školnímu serveru. Odeslání přihlašovacích údajů probíhá pomocí instance třídy NetworkConnect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura metody verify():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void verify(String login, String password, String kontext) {&lt;br /&gt;
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;login&amp;quot;, login));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;pass&amp;quot;, password));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;kontext&amp;quot;, kontext));&lt;br /&gt;
nc.setNameValuePair(nameValuePairs);&lt;br /&gt;
nc.setPage(&amp;quot;login.php&amp;quot;);&lt;br /&gt;
if (NetworkConnect.isConnection(context))&lt;br /&gt;
nc.execute();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metoda verify() přebírá tři parametry login, password a kontext. Těmto parametrům se přidělí klíčová hodnota definující jednotlivý parametr. Parametry jsou pak odeslány školnímu serveru pomocí instance třídy NetworkConnect za předpokladu, že je zařízení připojeno k&amp;amp;nbsp;síti internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček timetable ==&lt;br /&gt;
Zobrazení rozvrhu hodin a správné zařazení stažených dat do jednotlivých buněk zajišťuje právě tento balíček. Tvoří jej pouze třídy, které zpracovaná data ve formě objektu TimetableData, zobrazí tak, aby jim uživatel porozuměl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku timetable.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 9: Diagram balíčku timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 9 jsou závislosti jednotlivých tříd v&amp;amp;nbsp;rámci tohoto balíčku i mimo něj. V&amp;amp;nbsp;následující části bude stručný popis jednotlivých tříd v&amp;amp;nbsp;rámci balíčku. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na schématu č. 9 třída CellView je potomkem systémové třídy android.widget.LinerLayout. Slouží k&amp;amp;nbsp;vykreslení jedné buňky obsahující data rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída TimetableView je potomkem systémové třídy FrameLayout, implementuje rozhraní AsyncTaskCompleteListener z&amp;amp;nbsp;balíčku communications a vykresluje rozvrh hodin. Data rozvrhu hodin dokáže sama získat z&amp;amp;nbsp;databáze nebo ze školního serveru za pomoci zmiňované implementace. Vykreslení rozvrhu je závislé na typu dat, tedy jedná-li se o data učitele, místnosti nebo studijního kruhu. K&amp;amp;nbsp;tomu slouží výčtový typ TimetableTyp určující, jakým způsobem budou data v&amp;amp;nbsp;rozvrhu hodin zobrazeny. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení rozvrhu hodin má v&amp;amp;nbsp;režii třída TimetableActivity, která je zároveň spouštěcí třídou rozvrhu hodin. To znamená, že po kliknutí na položku rozvrh hodin v&amp;amp;nbsp;menu aplikace se tato třída spustí a zobrazí rozvrh hodin. TimetableActivity implementuje řadu rozhraní, která slouží jako komunikační most mezi rozvrhem a uživatelem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Princip vykreslení rozvrhu hodin ===&lt;br /&gt;
Vytvoření rozvrhu hodin probíhá ve dvou fázích. První fází je inicializace a zobrazení prázdné tabulky rozvrhu hodin. Tabulka rozvrhu hodin je sestavena ze základních vizuálních prvků, které poskytuje platforma Android a vytvořena programově, není tedy využito XML návrhu. Vnoření jednotlivých vizuálních prvků je na schématu č. 10. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Způsob vnoření vizuálních prvků třídy TimetableView.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 10: Způsob vnoření vizuálních prvků třídy TimetableView&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka rozvrhu hodin je postavena na vizuálním prvku FrameLayout, který vyplňuje celou dostupnou plochu obrazovky. Následuje prvek ScrollView1 zajišťující posouvání rozvrhu hodin ve vertikálním směru za předpokladu, že má tabulka rozvrhu hodin větší výšku než je výška obrazovky. Prvek ScrollView1 může obsahovat pouze jeden prvek. Proto obsahuje horizontální prvek LinearLayout obsahující dva prvky. Levým prvkem je TableLayout, jež obsahuje řádky tabulky pro zobrazení dnů. Pravým prvkem je ScrollView2 zajišťující posouvání rozvrhu hodin v&amp;amp;nbsp;horizontálním směru, avšak pouze pokud je tabulka rozvrhu hodin širší než šířka obrazovky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při posouvání v&amp;amp;nbsp;horizontálním směru se tedy neposouvá prvek TableLayout1'','' ale posouvá se pouze obsah ScrollView2, což je prvek TableLayout2 obsahující řádky tabulky rozvrhu hodin, které reprezentuje prvek LinerLayout3 orientovaný vertikálně. LinearLayout3 reprezentuje jednu buňku rozvrhu hodin obsahující prvky TextView2, kde jsou umístěna data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ve druhé fázi je rozvrh hodin naplněn hodnotami a poté je upravena velikost řádků. Tabulka je také naplněna daty jednotlivých dnů v&amp;amp;nbsp;týdnu. Princip rozložení dat v&amp;amp;nbsp;tabulce rozvrhu hodin je na následujícím obrázku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozložení dat tabulky rozvrhu hodin.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 13: Rozložení dat tabulky rozvrhu hodin&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Buňka rozvrhu hodin může obsahovat více informačních buněk. To proto, že jedna vyučovací hodina může být vyučována více učiteli, ve stejné místnosti může být více studijních kruhů, studijní kruh je rozdělen na skupiny, atd. &lt;br /&gt;
&lt;br /&gt;
Každá informační buňka obsažená v&amp;amp;nbsp;jedné buňce tabulky rozvrhu hodin tedy charakterizuje výuku ve stejný časový okamžik a pro různé účastníky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ovládání rozvrhu hodin zajišťuje třída TimetableActivity pomocí třídy MyFiltr a implementací, které jsou znázorněny na schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je vykreslený rozvrh hodin. Snímek byl pořízen ze zařízení Nexus 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vykreslený rozvrh hodin, Nexus 7.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 14: Vykreslený rozvrh hodin, Nexus 7&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na předcházejícím obrázku je zobrazena aplikace EPI rozvrh s&amp;amp;nbsp;vykresleným rozvrhem hodin a ovládacími prvky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček popups ==&lt;br /&gt;
Za běhu aplikace nastávají situace, kdy je potřeba informovat uživatele, nebo od něj vyžádat vstup. To se provádí pomocí dialogů, což jsou vyskakovací okna. Veškeré dialogy v&amp;amp;nbsp;rámci aplikace rozvrhu hodin jsou umístěny v&amp;amp;nbsp;tomto balíčku.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku popups.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 11: Diagram balíčku popups&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček popups se skládá ze dvou tříd MyFiltr a Detail, výčtového typu enum s&amp;amp;nbsp;názvem Filtr a rozhraní PopupCompleteListener. Třída MyFiltr pracuje s&amp;amp;nbsp;instancí rozhraní PopupCompleteListener a s&amp;amp;nbsp;instancí výčtového typu s&amp;amp;nbsp;názvem Filtr. Třída Detail je potomkem systémové třídy Dialog a pracuje s&amp;amp;nbsp;instancemi tříd CellData a TimetableTyp. Všechny popisované vazby jsou znázorněny na schématu č. 11.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detail informační buňky z rozvrhu hodin ===&lt;br /&gt;
Informační buňka z&amp;amp;nbsp;rozvrhu hodin obsahuje spoustu informací, které nejsou zobrazeny v&amp;amp;nbsp;rozvrhu hodin. Pro jejich zobrazení je tedy použit dialog vyvolaný kliknutím na informační buňku, jenž je graficky upravený tak, aby v&amp;amp;nbsp;něm byly požadované informace srozumitelně a jednoduše zobrazeny, což je obrovská výhoda oproti stávajícímu rozvrhu hodin, který je dostupný na webových stránkách informačního systému školy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení dialogu zajišťuje třída Detail, která je potomkem třídy android.app.Dialog, což zajišťuje vyvolání dialogu po kliknutí na grafický prvek ''View'', jež je předán jako parametr při vytváření instance třídy Detial. Při vytváření instance se také předávají data pro zobrazení ve formě objektu CellData a hodnota výčtového typu TimetableTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekt CellData obsahuje veškeré informace určené k&amp;amp;nbsp;zobrazení v&amp;amp;nbsp;rámci dané buňky. Způsob zobrazení dat pro studenty, učitele a místnosti je rozdílný, i když jsou informace stejného charakteru, protože pro studenty je prioritní jiný typ informace než pro učitele nebo místnosti. K&amp;amp;nbsp;rozlišení způsobu zobrazení slouží výčtový typ s&amp;amp;nbsp;názvem TimetableTyp, jehož hodnota je předána právě při vytváření instance třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy Detail:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Detail(Context context, View view, CellData  cellData, TimetableType timTyp) {&lt;br /&gt;
super(context);&lt;br /&gt;
this.timTyp = timTyp;&lt;br /&gt;
this.cellData = cellData;&lt;br /&gt;
this.addListener(view);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;konstruktoru se převzaté objekty timTyp a cellData uloží do ekvivalentních proměnných patřících třídě Detail. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Metoda addListener(View):&lt;br /&gt;
private void addListener(View view) {&lt;br /&gt;
view.setOnClickListener(new View.OnClickListener() {&lt;br /&gt;
public void onClick(View v) {&lt;br /&gt;
Detail.this.show();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, metoda addListener(View) nastaví na převzatý objekt posluchače, který se spustí po kliknutí. Posluchač poté v&amp;amp;nbsp;případě kliknutí na objekt View zobrazí dialog a zavolá metodu onCreate(), jež byla převzata od rodičovského prvku. V&amp;amp;nbsp;metodě onCreate() se pak zobrazí data a způsob zobrazení ovlivňuje hodnota globální proměnné timTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zobrazení rozvrhu hodin pomocí filtru ===&lt;br /&gt;
Každý uživatel aplikace si může zobrazit nejenom svůj rozvrh hodin, ale může si také zobrazit rozvrh hodin pro jednotlivé studenty, učitele a místnosti. Tuto vlastnost aplikace zajišťuje třída MyFiltr, která je potomkem systémové třídy Dialog, což zajišťuje, že se MyFiltr zobrazí jako dialog. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MyFiltr obsahuje tři grafická políčka a z&amp;amp;nbsp;toho dvě jsou výběrová tlačítka. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání. První políčko udává, jedná-li se o rozvrh hodin pro učitele, místnost nebo pro studijní kruh. Druhé výběrové tlačítko obsahuje zkratky učitelů, místností nebo studijních kruhů. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání zkratky s&amp;amp;nbsp;automatickou nápovědou. Po zadání dvou písmen se zobrazí nabídka, která je ovlivněná výběrem prvního políčka. V&amp;amp;nbsp;této nabídce je seznam zkratek pro učitele, místnosti nebo studijní kruhy, jejichž první dvě písmena byla zadána.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První výběrové tlačítko tedy vždy obsahuje hodnoty učitel, místnost a studijní kruh. Výběrem tohoto políčka se ovlivní druhé výběrové políčko a třetí políčko pro ruční zadání s&amp;amp;nbsp;nápovědou. Posledním grafickým prvkem je tlačítko, jehož zmáčknutí zavře zobrazovaný dialog a zobrazí rozvrh hodin podle zadaných kriterií. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vytvořením instance třídy se nastaví vzhled dialogu na předem vytvořený design, který je definovaný v&amp;amp;nbsp;XML souboru s&amp;amp;nbsp;názvem my_filtr.xml. Dále dojde k&amp;amp;nbsp;přednastavení výběru tak, že se vybere první studijní kruh v&amp;amp;nbsp;seznamu. Uživatel tuto volbu pak může kdykoliv změnit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček widgets ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Aplikace rozvrhu hodin poskytuje miniaplikaci na plochu, což je minimalizovaná verze aplikace zpracovaná tak, aby ji bylo možné zobrazit na domovské obrazovce zařízení. [33]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minimalizovaná aplikace se zobrazuje ve formě seznamu vyučovacích hodin za období jednoho dne. Každých 30 minut se seznam aktualizuje a v&amp;amp;nbsp;případě, že dojde k&amp;amp;nbsp;ukončení některé výuky, odstraní se také ze seznamu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku widget.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 12: Diagram balíčku widget&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dle schématu č. 12 se tato třída skládá z&amp;amp;nbsp;balíčků ViewsFactory, WidgetProvider a WidgetService. WidgetProvider se stará o zobrazení miniaplikace a její správu. ViewsFactory pomocí WidgetService naplní miniaplikaci hodnotami. Vzhled miniaplikace se skládá z hlavičky, kde je název aktuálního dne a datum dne. Dále jej tvoří ListView'','' který slouží k&amp;amp;nbsp;zobrazení jednotlivých dat rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzhled widgetu.png.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 15: Vzhled widgetu&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na obrázku č. 15, widget se skládá z&amp;amp;nbsp;několika prvků LinearLayout určující rozmístění vizuálních prvků. Jedná se především o prvky TextView, které jsou umístěny ve vertikálně orientovaném prvku, což způsobuje, že jsou tyto prvky TextView umístěny pod sebou. Dále následuje nejdůležitější část miniaplikace a to je ListView. ListView je posuvný seznam obsahující prvky rozvrhu hodin. Miniaplikaci je možné zobrazit pouze na domovské obrazovce zařízení, jehož verze operačního systému je vyšší než API 11.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vzhled_widgetu.png.png&amp;diff=11808</id>
		<title>Súbor:Vzhled widgetu.png.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vzhled_widgetu.png.png&amp;diff=11808"/>
		<updated>2013-09-08T19:34:38Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_widget.png&amp;diff=11807</id>
		<title>Súbor:Diagram balíčku widget.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_widget.png&amp;diff=11807"/>
		<updated>2013-09-08T19:34:11Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_popups.png&amp;diff=11806</id>
		<title>Súbor:Diagram balíčku popups.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_popups.png&amp;diff=11806"/>
		<updated>2013-09-08T19:33:47Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vykreslen%C3%BD_rozvrh_hodin,_Nexus_7.png&amp;diff=11805</id>
		<title>Súbor:Vykreslený rozvrh hodin, Nexus 7.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vykreslen%C3%BD_rozvrh_hodin,_Nexus_7.png&amp;diff=11805"/>
		<updated>2013-09-08T19:33:24Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozlo%C5%BEen%C3%AD_dat_tabulky_rozvrhu_hodin.png&amp;diff=11804</id>
		<title>Súbor:Rozložení dat tabulky rozvrhu hodin.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozlo%C5%BEen%C3%AD_dat_tabulky_rozvrhu_hodin.png&amp;diff=11804"/>
		<updated>2013-09-08T19:33:02Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zp%C5%AFsob_vno%C5%99en%C3%AD_vizu%C3%A1ln%C3%ADch_prvk%C5%AF_t%C5%99%C3%ADdy_TimetableView.png&amp;diff=11803</id>
		<title>Súbor:Způsob vnoření vizuálních prvků třídy TimetableView.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zp%C5%AFsob_vno%C5%99en%C3%AD_vizu%C3%A1ln%C3%ADch_prvk%C5%AF_t%C5%99%C3%ADdy_TimetableView.png&amp;diff=11803"/>
		<updated>2013-09-08T19:32:33Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_timetable.png&amp;diff=11802</id>
		<title>Súbor:Diagram balíčku timetable.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_timetable.png&amp;diff=11802"/>
		<updated>2013-09-08T19:32:04Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_lib.png&amp;diff=11801</id>
		<title>Súbor:Diagram balíčku lib.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_bal%C3%AD%C4%8Dku_lib.png&amp;diff=11801"/>
		<updated>2013-09-08T19:31:25Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_communications.png&amp;diff=11800</id>
		<title>Súbor:Diagram třídy communications.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_communications.png&amp;diff=11800"/>
		<updated>2013-09-08T19:30:37Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hlavn%C3%AD_menu_za%C5%99%C3%ADzen%C3%AD,_Samsung_Galaxy_mini.png&amp;diff=11799</id>
		<title>Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hlavn%C3%AD_menu_za%C5%99%C3%ADzen%C3%AD,_Samsung_Galaxy_mini.png&amp;diff=11799"/>
		<updated>2013-09-08T19:29:31Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hlavn%C3%AD_menu_za%C5%99%C3%ADzen%C3%AD,_Samsung_Galaxy_mini.png&amp;diff=11798</id>
		<title>Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hlavn%C3%AD_menu_za%C5%99%C3%ADzen%C3%AD,_Samsung_Galaxy_mini.png&amp;diff=11798"/>
		<updated>2013-09-08T19:28:12Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_cz.sajboch.epi_main.png&amp;diff=11797</id>
		<title>Súbor:Diagram třídy cz.sajboch.epi main.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_cz.sajboch.epi_main.png&amp;diff=11797"/>
		<updated>2013-09-08T19:27:35Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Diagram třídy cz.sajboch.epi main.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11796</id>
		<title>Realizace projektu EPIrozvrh a popis kódu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11796"/>
		<updated>2013-09-08T19:26:50Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|5|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura aplikace EPI rozvrh se skládá ze dvou balíčků a to z&amp;amp;nbsp;cz.sajboch.epi_main a cz.sajboch.epi_timetable, dále jen epi_timetable, jenž reprezentuje balíček pro zobrazení školního rozvrhu. V&amp;amp;nbsp;následující části jsou popisovány pouze balíčky vytvořené v&amp;amp;nbsp;rámci této práce. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozdělení tříd do balíčků zajišťuje snadnou modifikaci aplikace a případné rozšíření o další funkce. Hlavní balíček cz.sajboch.epi_main se skládá ze šesti tříd: MainActivity'', ''LoginActivity'', ''AboutActivity'', ''OnlineRecords'', ''TimetableActivity a Settings, viz schéma č. 6. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy cz.sajboch.epi main.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 6: Diagram třídy cz.sajboch.epi_main&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak je patrné ze schématu č. 6, třída MainActivity je potomkem systémové třídy android.app.Activity, což ji tvoří spustitelnou. Třída MainActivity se spouští po spuštění aplikace. Její hlavní rolí je zobrazení ovládacího menu, jež obsahuje tlačítka. Grafické zobrazení je vytvořeno na základě XML souboru activity_main.xml. Po spuštění této třídy dochází k&amp;amp;nbsp;ověření přihlašovacích údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující obrázek je náhledem menu aplikace, jenž je vytvořeno na základě třídy MainActivity. Obrázek byl pořízen na mobilním zařízení Samsung Galaxy mini.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Hlavní menu zařízení, Samsung Galaxy mini.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 12: Hlavní menu zařízení, Samsung Galaxy mini&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Settings je potomkem třídy android.preference.PreferenceActivity a slouží k&amp;amp;nbsp;zobrazení a modifikaci nastavení aplikace a uchovává přihlašovací údaje, datum poslední aktualizace, způsob aktualizace atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček epi_timetable tvoří rozvrh hodin a jeho funkce. Skládá se z&amp;amp;nbsp;několika dalších balíčků, kde každý z&amp;amp;nbsp;těchto balíčku má specifický význam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznam balíčků epi_timetable:&lt;br /&gt;
&lt;br /&gt;
* cz.sajboch.epi_timetable.communications dále jen communications, &lt;br /&gt;
* cz.sajboch.epi_timetable.lib dále jen lib,&lt;br /&gt;
* cz.sajboch.epi_timetable.popups dále jen popups,&lt;br /&gt;
* cz.sajboch.epi_timetable.timetable dále jen timetable,&lt;br /&gt;
* cz.sajboch.epi_timetable.widgets dále jen widgets.&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;následujících kapitolách budou popsány jednotlivé balíčky, jejich funkce, využití a způsob, jakým se používají. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček communications ==&lt;br /&gt;
Balíček communications poskytuje aplikaci komunikační protokoly pro připojení ke školnímu serveru a následné uložení stažených dat. Skládá se ze sedmi tříd, které jsou mezi sebou závislé. Tyto závislosti jsou viditelné na následujícím schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy communications.png]]&lt;br /&gt;
Schéma č. 7: Diagram třídy communications&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Update slouží pro spuštění procesu aktualizace. Proces aktualizace probíhá tak, že se stáhnou data rozvrhu hodin ze školního serveru a následně se uloží do lokální databáze a souborů v&amp;amp;nbsp;mobilním zařízení. Stažení dat zajišťuje třída NetworkConnect běžící paralelně s hlavním vláknem programu. Paralelní běh zajišťuje rodičovský prvek AsyncTask, který vytvoří nové vlákno. Komunikace mezi těmito vlákny zajišťuje rozhranní AsyncTaskCompleteListener, jež třída Update implementuje. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vložení dat do databáze zajišťuje třída DataToDatabase. Pro načtení dat z&amp;amp;nbsp;databáze se používá třída DataFromDatabase. Obě třídy jsou potomkem Database a ta je potomkem SQLiteOpenHelper. Uložení a načtení dat ze souboru zajišťuje třída SaveListToFile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace ===&lt;br /&gt;
Aktualizace rozvrhu hodin jsou buď automatické, nebo ruční. To znamená, že aplikace může sama aktualizovat data rozvrhu hodin po určitém časovém intervalu. Časový interval určuje nastavení uživatele, kde uživatel má možnost zvolit z&amp;amp;nbsp;několika předem určených časových intervalů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při vytvoření instance třídy Update se zavolá konstruktor, ve kterém dojde k&amp;amp;nbsp;ověření, zda je databáze rozvrhu hodin aktuální vzhledem k&amp;amp;nbsp;nastavení intervalu aktualizací.Do proměnné autoUpdate datového typu boolean se uloží logická hodnota 1, neboli true'','' pokud jsou povoleny automatické aktualizace. Pokud povoleny nejsou, uloží se logická hodnota 0, tedy false. Výchozím nastavením je logická hodnota ''true''. Tuto hodnotu si může uživatel změnit v&amp;amp;nbsp;nastavení zaškrtnutím políčka „Automatické aktualizace“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zda je rozvrh hodin zastaralý zjistí metoda isOutDate(). Zjistí to tak, že porovná datum poslední aktualizace s&amp;amp;nbsp;aktuálním datem. Pokud je rozdíl větší než sedm dnů, metoda vyhodnotí rozvrh jako zastaralý a vrátí hodnotu true, v&amp;amp;nbsp;opačném případě vrátí hodnotu false. Rozdíl sedm dnů, tedy jeden týden, lze přenastavit na jinou hodnotu v&amp;amp;nbsp;nastavení aplikace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy ověřující, zda bude spuštěná automatická aktualizace:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Update(Context context){…&lt;br /&gt;
if (autoUpdate &amp;amp;&amp;amp; this.isOutDate ()) {&lt;br /&gt;
this.start();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V případě, je-li podmínka splněná, tedy jsou zapnuty automatické aktualizace a zároveň je interní databáze zastaralá, spustí se metoda start() třídy Update. Ta zjistí, zda již existuje interní databáze. Pokud existuje, bude zaktualizována pouze část rozvrhu hodin, a to od data provádění aktualizace do konce školního roku. Pokud interní databáze neexistuje, vytvoří se a zaktualizuje se rozvrh hodin od začátku až po konec školního roku. Následující kód popisuje část metody start() rozhodující v&amp;amp;nbsp;jakém rozsahu bude interní databáze aktualizována. &lt;br /&gt;
&lt;br /&gt;
Rozsah aktualizace interní databáze:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (db.isTimetableTable()) {&lt;br /&gt;
this.updateFrom = MyDate.getDate();db.deleteOlderFromTimetable(&lt;br /&gt;
MyDate.getZacatekSkolnihoRoku());&lt;br /&gt;
 } else {&lt;br /&gt;
this.updateFrom = MyDate.getZacatekSkolnihoRoku();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualizace může být spuštěna ručně, dojde-li k zavolání metody start() pomocí vytvořené instance této třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stahování dat ===&lt;br /&gt;
Platforma Android nemůže přímo přistupovat k&amp;amp;nbsp;databázi MYSQL, proto byla vytvořena další vrstva zabezpečující aplikaci přístup k&amp;amp;nbsp;datům. Tato vrstva je vytvořena pomocí PHP skriptu. PHP skript se obsluhuje HTTP požadavky typu POST. Na základě odeslaného požadavku vytáhne z&amp;amp;nbsp;databáze data, která pak zobrazí ve formě prostého textu formátovaného metodou JSON, viz kapitola 2.2.2. Na straně aplikace se o odeslání požadavku a zpracování výsledku stará metoda NetworkConnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operační systém Android nedovoluje provádět operace trvající delší dobu ve vlákně UI. Stahování dat se tedy provádí v&amp;amp;nbsp;jiném vlákně běžícím paralelně s&amp;amp;nbsp;vláknem UI, ale paralelně běžící vlákno nemůže přímo přistupovat k&amp;amp;nbsp;vizuálním prvkům a jakkoliv je editovat. Pokud je potřeba například aktualizovat vizuální prvek z&amp;amp;nbsp;paralelně běžícího vlákna, může se použít systémová třída android.os.AsyncTask, dále jen AsyncTask, a ta zajistí paralelní běh vlákna a průběžné aktualizace vizuálních prvků.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetworkConnect je potomkem AsyncTask, což ji činí spustitelnou v&amp;amp;nbsp;paralelně běžícím vlákně a dovoluje jí aktualizovat vizuální prvek. Z&amp;amp;nbsp;rodičovské třídy se převezmou metody doInBackground( Params … ) a &amp;lt;nowiki&amp;gt;onPostExecute( result[] … )&amp;lt;/nowiki&amp;gt;, které je třeba v&amp;amp;nbsp;této třídě implementovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída NetworkConnect a zděděné metody od rodičovské třídy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class NetworkConnect extends AsyncTask&amp;lt;Void, Void, String[]&amp;gt; {&lt;br /&gt;
…&lt;br /&gt;
@Override&lt;br /&gt;
protected String[] doInBackground(Void... params) {&lt;br /&gt;
String[] result;&lt;br /&gt;
…&lt;br /&gt;
return result;&lt;br /&gt;
}&lt;br /&gt;
@Override&lt;br /&gt;
protected void onPostExecute(String[] result) {&lt;br /&gt;
callback.onTaskComplete(result);&lt;br /&gt;
…&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zděděná metoda doInBackground(Void… params) se spouští již v&amp;amp;nbsp;novém vlákně, kde se odesílají požadavky serveru, jejichž výsledky se stahují ve formě textu. Jeden požadavek serveru může obsahovat více parametrů, a proto jsou jednotlivé požadavky vkládány do kolekce, která se odesílá jakožto jeden požadavek. Jednotlivé parametry požadavku obsahují dvojici klíč:hodnota a ukládají se proto do proměnné datového typu NameValuePair, který je uzpůsoben k&amp;amp;nbsp;ukládání těchto hodnot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Díky sofistikovanému využití metody doInBackground(Void… params) je možné odeslat více požadavků sériově. To probíhá tak, že se odešle požadavek, stáhne se výsledek odeslaného požadavku, který se uloží do pole datového typu String. Pak se odešle další požadavek, jehož výsledek se zase uloží do pole. Tento děj se opakuje tolikrát, kolik je požadavků. Po stažení posledního výsledku se ukončí vlákno a pole výsledků se odešle metodě &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt;, která již běží v hlavním vlákně UI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metoda &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt; pole výsledků žádným způsobem nezpracovává, pouze jej přeposílá dále, pomocí rozhraní AsyncTaskCompleteListener, jehož instance byla převzata při volání konstruktoru třídy NetworkConnect. Rozhraní poskytuje metodu zpětného volání, která se provede v&amp;amp;nbsp;místě vytvoření konstruktoru NetworkConnect, kde je umístěna. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Způsob komunikace třídy NetworkConnect&amp;lt;nowiki&amp;gt; je založený na pokročilých návrhových vzorech. [9, s. 286]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Konstruktor třídy NetworkConnect:&lt;br /&gt;
public NetworkConnect(AsyncTaskCompleteListener&amp;lt;String&amp;gt; cb) {&lt;br /&gt;
this.callback = cb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Způsob použití třídy NetworkConnect je velmi jednoduchý. Nejprve se vytvoří instance třídy, poté se zadají jednotlivé požadavky pro stažení dat pomocí níže zmíněných metod a v poslední řadě se zavolá metoda execute() spouštějící paralelní vlákno, které vykoná veškeré požadavky v&amp;amp;nbsp;metodě doInBackground(Void… params). Pro opakované použití třídy je potřeba vytvořit novou instanci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody třídy NetworkConnect pro nastavení požadavků:&lt;br /&gt;
&lt;br /&gt;
* public void setList()- nastaví požadavky pro stažení seznamu učitelů, místností a studijních kruhů,&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;public void setNameValuePair(List&amp;lt;NameValuePair&amp;gt; nameVP)&amp;lt;/nowiki&amp;gt; - nastaví libovolný požadavek,&lt;br /&gt;
* public void setUcitel(String u, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro učitele v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String t, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro studijní kruh v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String m, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro místnost v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}. &lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat ===&lt;br /&gt;
Aplikace ukládá data rozvrhu hodin a řídící data, které reprezentují seznam učitelů, místností a studijních kruhů. Data rozvrhu hodin a řídící data se ukládají rozdílným způsobem. Řídící data se ukládají v&amp;amp;nbsp;serializované podobě do souboru, kdežto data rozvrhu hodin se ukládají do lokální databáze. Jedná se o datové soubory, které byly popsány v&amp;amp;nbsp;kapitole 4.2.2. &lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do databáze'''&lt;br /&gt;
&lt;br /&gt;
Pro uložení dat získaných ze školního serveru je použita interní databáze SQLite, kterou poskytuje platforma Android. Databázi reprezentují třídy DataToDatabase a DataFromDatabase, které jsou potomky třídy Database. Database obsahuje strukturu databáze a to znamená, že určuje název databáze, názvy tabulek, názvy sloupců a jejich datové typy. Také samotnou databázi vytváří, což zajišťuje rodičovský prvek android.database.sqlite.SQLiteOpenHelper. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vkládání dat do databáze zajišťuje třída DataToDatabase využívající funkce třídy android.database.sqlite.SQLiteDatabase pomocí její instance, díky které je možné provádět SQL dotazy. Také lze pomocí této třídy smazat celou databázi nebo pouze její část. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data se do databáze vkládají prostřednictvím datového typu TimetableData uchovávající data datového typu CellData reprezentující jeden záznam v&amp;amp;nbsp;databázi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataToDatabase:&lt;br /&gt;
&lt;br /&gt;
* public void updateTimetableDB(TimetableData td) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než nejstarší datum vkládaných prvků a následně vloží nové data v&amp;amp;nbsp;proměnné db,&lt;br /&gt;
* public void updateTimetableDB(TimetableData td, String uFrom) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než datum nacházející se v&amp;amp;nbsp;proměnné uFrom, a následně vloží do databáze data z&amp;amp;nbsp;proměnné db, &lt;br /&gt;
* public void deleteOlderFromTimetable(String olderThan) - smaže data z&amp;amp;nbsp;databáze, starší než datum v&amp;amp;nbsp;proměnné ''olderThen'', &lt;br /&gt;
* public void deleteDb() - smaže celou databázi,&lt;br /&gt;
* public void addData(TimetableData td) - přidá do databáze data z&amp;amp;nbsp;proměnné td a zachová předcházející data uložená v&amp;amp;nbsp;databázi. &lt;br /&gt;
&lt;br /&gt;
Načtení dat z&amp;amp;nbsp;databáze zajišťuje třída DataFromDatabase, která pracuje na stejném principu jako třída DataToDatabase'','' ale nemá zapisovací práva. Díky tomu, že existují třídy pro čtení a zapisování do databáze zvlášť, je zajištěna určitá bezpečnost dat. Také se tím předchází nechtěnému smazání dat z databáze. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataFromDatabase:&lt;br /&gt;
&lt;br /&gt;
* public TimetableData getData(String week), načte data z databáze za období jednoho týdne, proměnná week obsahuje datum začátku týdne, &lt;br /&gt;
* public TimetableData getOneDayData(String day, int time), načte data z&amp;amp;nbsp;databáze ze dne, jehož datum se nachází v&amp;amp;nbsp;proměnné day a zároveň čas uložený v&amp;amp;nbsp;proměnné time než čas začátku hodiny.&lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do souboru'''&lt;br /&gt;
&lt;br /&gt;
Do souboru se ukládají seznamy učitelů, studijních kruhů a místností. Datovým typem takto ukládaných dat je List. Podrobnější popis je v&amp;amp;nbsp;kapitole 4.2.2. Pro ukládání dat je použita třída SaveListToFile, kde jsou využity principy pro práci se soubory v&amp;amp;nbsp;kombinaci s&amp;amp;nbsp;operačním systémem Android. Třída obsahuje řetězcové konstanty, které obsahují názvy souborů. Třída SaveListToFile'' ''pracuje s&amp;amp;nbsp;daty jako s&amp;amp;nbsp;objekty a také je tak ukládá do souboru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Řetězcové konstanty uchovávající název souboru:&lt;br /&gt;
&lt;br /&gt;
* public final static String TEACHER_LIST_FILE = &amp;quot;timetable_t_list.dat&amp;quot;,&lt;br /&gt;
* public final static String ROOM_LIST_FILE = &amp;quot;timetable_r_list.dat&amp;quot;,&lt;br /&gt;
* public final static String CLASS_LIST_FILE = &amp;quot;timetable_c_list.dat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ukládání dat zajišťuje writeListToFile(List&amp;lt;nowiki&amp;gt;&amp;lt;String&amp;gt;&amp;lt;/nowiki&amp;gt; list, String filename) přebírající dva parametry a to list datového typu List a název souboru filename datového typu String. Jako parametr filename může být použita některá z&amp;amp;nbsp;proměnných této třídy, avšak nemusí. Zavoláním této metody dojde k&amp;amp;nbsp;serializaci listu a jeho následné uložení do souboru s&amp;amp;nbsp;názvem, který byl předán jako parametr filename. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody writeListToFile():&lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.writeListToFile(list,SaveListToFile.TEACHER_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Načtení jednotlivých dat ze souboru zajišťuje statická metoda &amp;lt;nowiki&amp;gt;List&amp;lt;String&amp;gt; &amp;lt;/nowiki&amp;gt;loadListFromFile(String filename). Metoda přebírá jeden parametr filename určující název souboru, ze kterého se mají načíst data. Při zavolání metody dojde k&amp;amp;nbsp;načtení dat ze souboru a na základě těchto dat se vytvoří nový objekt datového typu Object. Ten se následně převede na datový typ List. Návratová hodnota je datového typu List a obsahuje načtená, jinak neupravená, data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody loadListFromFile(): &lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.loadListFromFile(SaveListToFile.ROOM_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Obě zmiňované metody pracují na principu ukládání a načítání dat formou objektu. &amp;lt;nowiki&amp;gt;[8, s. 289&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček lib ==&lt;br /&gt;
Veškerý běh aplikace, který není vidět a nemá co dočinění s&amp;amp;nbsp;vnější komunikací, zabezpečují třídy tohoto balíčku a ten reprezentuje celou datovou strukturu rozvrhu hodin, jenž je velmi komplikovaná. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku lib.png]]&lt;br /&gt;
Schéma č. 8: Diagram balíčku lib&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející schéma balíčku lib se skládá ze šesti tříd. MyDate zpracovává datum a provádí s&amp;amp;nbsp;ním různé operace. Třída UpdateThread zajišťuje zpracování stažených dat v&amp;amp;nbsp;paralelně běžícím vlákně. To je umožněno díky rodičovskému prvku android.os.AsyncTask. Třída MyJson slouží ke zpracování dat, která byla stažena. Stažená data jsou poté uložena do proměnné datového typu CellData reprezentující jednu buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
Třída TimetableData zpracovává a eviduje data datového typu CellData. V&amp;amp;nbsp;poslední řadě stojí třída LoginVerification, která slouží k&amp;amp;nbsp;ověření, zda proběhlo úspěšné přihlášení. Pracuje s&amp;amp;nbsp;instancí NetworkConnect a rozšiřuje ji rozhraní AsyncTaskCompleteListener. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zpracování stažených dat  ===&lt;br /&gt;
Data ze školního serveru jsou stažena ve formě prostého textu s formátováním JSON, což je popsáno v&amp;amp;nbsp;kapitole 2.2.2. Takto formátovaná data nejsou vhodná pro další zpracování aplikací. Aplikace má proto vlastní datovou strukturu pro stažená data, do které jsou stažená data zapracována.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datovou strukturu reprezentují třídy CellData a TimetableData. Tato datová struktura je pouze jakýmsi rozhraním mezi staženými daty, databází a vykreslením rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozvrh hodin se vizuálně skládá z&amp;amp;nbsp;řádků a sloupců. V&amp;amp;nbsp;místě protnutí určitého řádku a sloupce, tedy v&amp;amp;nbsp;buňce, může být umístěno více informačních buněk. Informační buňkou se myslí grafická buňka nesoucí informace o dané vyučovací hodině.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základním kamenem této struktury je třída CellData, ve které jsou uložena data reprezentující jednu informační buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proměnné třídy ''CellData'':&lt;br /&gt;
&lt;br /&gt;
* numberOfDay - obsahuje hodnoty od nuly do šesti kde nula symbolizuje pondělí, číslo jedna úterý, číslo dva středu, atd.,&lt;br /&gt;
* color ''-'' hexadecimální číselný údaj reprezentující barvu buňky, &lt;br /&gt;
* date - datum dne ke kterému se vztahují údaje,&lt;br /&gt;
* endTime - čas konce vyučovací hodiny definovaný v&amp;amp;nbsp;standardním unixovém čase,&lt;br /&gt;
* hour - číslo vyučovací hodiny,&lt;br /&gt;
* hours - počet hodin jdoucích bezprostředně za sebou,&lt;br /&gt;
* subject - celý název vyučovacího předmětu,&lt;br /&gt;
* group - číslo nebo název skupiny, pro kterou jsou data určeny, &lt;br /&gt;
* studyCircle - název studijního kruhu,&lt;br /&gt;
* time - čas začátku hodiny v&amp;amp;nbsp;milisekundách,&lt;br /&gt;
* schoolRoom - název učebny,&lt;br /&gt;
* teacher - celé příjmení a tituly učitele,&lt;br /&gt;
* teachers - seznam učitelů pro které platí tyto data,&lt;br /&gt;
* studyCircles - seznam studijních kruhů pro které platí tyto data,&lt;br /&gt;
* abbSubject - zkratka předmětu,&lt;br /&gt;
* abbSchoolroom - zkratka učebny,&lt;br /&gt;
* abbTeacher - zkratka učitele.&lt;br /&gt;
&lt;br /&gt;
Jelikož jsou veškeré proměnné privátní, existují metody pro jejich správu. Pro každou proměnnou existují minimálně dvě metody pro správu. Jedna metoda proměnnou nastavuje na jinou hodnotu a druhá metoda získává aktuální nastavení proměnné. Metod pro práci s&amp;amp;nbsp;proměnnými je mnoho, a proto není možné je zde všechny zmínit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé z&amp;amp;nbsp;metod pro práci s&amp;amp;nbsp;proměnnými:&lt;br /&gt;
&lt;br /&gt;
* setSubject(String value) - nastaví proměnnou subject na hodnotu ''value'',&lt;br /&gt;
* setTeacher(String value) - nastaví proměnnou teacher na hodnotu ''value'',&lt;br /&gt;
* getSubject() - vrací hodnotu textového řetězce proměnné subject,&lt;br /&gt;
* getTeacher() - vrací hodnotu textového řetězce proměnné teacher.&lt;br /&gt;
&lt;br /&gt;
Jak již bylo zmíněno, jeden objekt CellData obsahuje data pouze jedné informační buňky v&amp;amp;nbsp;rozvrhu hodin. Stažená data, která se mají uložit do databáze, obsahují však více takových buněk. Proto existuje třída TimetableData'','' jež spravuje jednotlivé objekty CellData. Spravuje je tak, že je jednotlivě ukládá do objektu List, tím tvoří seznam objektů CellData. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekty se vkládají do zásobníku jeden za druhým a první objekt je v&amp;amp;nbsp;zásobníku úplně naspodu. Další objekty se skládají nad první v&amp;amp;nbsp;pořadí, v&amp;amp;nbsp;jakém jsou vkládány. Při načítání jednotlivých dat se musí brát shora dolů, tedy od posledního k&amp;amp;nbsp;prvnímu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody TimetableData:&lt;br /&gt;
&lt;br /&gt;
* addData(CellData), přidá objekt CellData do seznamu,&lt;br /&gt;
* getFirstDate(), vrátí objekt CellData s&amp;amp;nbsp;nejmenším datem,&lt;br /&gt;
* getSize(), vrátí počet prvků v&amp;amp;nbsp;seznamu,&lt;br /&gt;
* getCell(), vrátí poslední objekt CellData, poté jej zahodí,&lt;br /&gt;
* hasCell(), zjistí, je-li v&amp;amp;nbsp;seznamu nějaký objekt,&lt;br /&gt;
* getHour(int hodina), je statická metoda, kterou lze použít bez vytvoření instance, vrací čas začátku a konce vyučovací hodiny v&amp;amp;nbsp;milisekundách předané v&amp;amp;nbsp;parametru hodina.&lt;br /&gt;
&lt;br /&gt;
=== Práce s datem ===&lt;br /&gt;
Aplikace rozvrhu hodin velmi často pracuje s&amp;amp;nbsp;datem, ať už při vykreslení rozvrhu hodin nebo uložení dat do databáze. Dá se tedy říct, že práce s&amp;amp;nbsp;datem hraje v&amp;amp;nbsp;aplikaci neodmyslitelnou roli a proto byla vytvořena samostatná třída MyDate obsahující metody ulehčující práci s&amp;amp;nbsp;datem. MyDate využívají veškeré balíčky aplikace rozvrhu hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Všechny metody třídy MyDate jsou statické, lze k&amp;amp;nbsp;nim tedy přistupovat bez nutnosti vytvářet instanci třídy. Obsahuje více než dvacet metod, které se využívají zejména pro zjištění aktuálního dne v&amp;amp;nbsp;týdnu, čísla dne, zjištění data následujícího či předcházejícího dne, zjištění data pondělku v&amp;amp;nbsp;minulém či následujícím týdnu a podobně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukázka některých metod třídy MyDate:&lt;br /&gt;
&lt;br /&gt;
* getEndOfSchollYear() - vrací textový řetězec s&amp;amp;nbsp;datem konce školního roku,&lt;br /&gt;
* getStartOfSchoolYear() - vrací textový řetězec s&amp;amp;nbsp;datem začátku školního roku,&lt;br /&gt;
* getMonday(String week) - přebírá datum některého dne v&amp;amp;nbsp;týdnu a vrací textová řetězec s&amp;amp;nbsp;datem pondělku v&amp;amp;nbsp;daném týdnu,&lt;br /&gt;
* getNumberOfDay(String datum) - vrací číslo dne v&amp;amp;nbsp;týdnu, přičemž pondělí je 0 a neděle 6,&lt;br /&gt;
* getNumberOfWeek(String date) - přebírá parametr date na jehož základě vrací číslo týdne v&amp;amp;nbsp;roce.&lt;br /&gt;
&lt;br /&gt;
=== Ověření přihlašovacích údajů ===&lt;br /&gt;
Ověření přihlašovacích údajů zajišťuje třída LoginVerification, rozšiřuje ji rozhraní AsyncTaskCompleteListener a obsahuje instanci třídy NetworkConnect'','' jenž je popsaná v&amp;amp;nbsp;kapitole 5.1.2. NetworkConnect zajišťuje možnost odeslání přihlašovacích údajů školnímu severu, který ověří, zda jsou přihlašovací údaje správné. Pokud školní server vyhodnotí přihlašovací údaje jako správné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou true. Vyhodnotí-li je jako nesprávné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou false. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace přijatá data vyhodnotí v&amp;amp;nbsp;metodě onTaskComplet&amp;lt;nowiki&amp;gt;e(String[] result)&amp;lt;/nowiki&amp;gt;, která je zavolána po stažení dat na základě požadavku. Vyhodnotí je tak, že ověří, zda na základě odeslaných přihlašovacích údajů serveru byl obdržen textový řetězec true. Pokud byl obdržen, tak se uloží přihlašovací údaje a stav přihlášení po dobu aktuálního školního roku. Po vypršení lhůty, se uživatel musí přihlásit znovu. Neobsahuje-li přijatý řetězec hodnotu true, není proces přihlášení úspěšný. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LoginVerification obsahuje vlastní rozhraní LoggedListener jehož metoda zpětného volání onLogged(boolean logged) je zavolána po ověření přihlašovacích údajů. Pokud bylo ověření přihlašovacích údajů kladné, je metodě předán parametr true. V&amp;amp;nbsp;opačném případě je předán parametr false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou předány metodě verify(), která odešle přihlašovací údaje školnímu serveru. Odeslání přihlašovacích údajů probíhá pomocí instance třídy NetworkConnect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura metody verify():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void verify(String login, String password, String kontext) {&lt;br /&gt;
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;login&amp;quot;, login));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;pass&amp;quot;, password));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;kontext&amp;quot;, kontext));&lt;br /&gt;
nc.setNameValuePair(nameValuePairs);&lt;br /&gt;
nc.setPage(&amp;quot;login.php&amp;quot;);&lt;br /&gt;
if (NetworkConnect.isConnection(context))&lt;br /&gt;
nc.execute();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metoda verify() přebírá tři parametry login, password a kontext. Těmto parametrům se přidělí klíčová hodnota definující jednotlivý parametr. Parametry jsou pak odeslány školnímu serveru pomocí instance třídy NetworkConnect za předpokladu, že je zařízení připojeno k&amp;amp;nbsp;síti internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček timetable ==&lt;br /&gt;
Zobrazení rozvrhu hodin a správné zařazení stažených dat do jednotlivých buněk zajišťuje právě tento balíček. Tvoří jej pouze třídy, které zpracovaná data ve formě objektu TimetableData, zobrazí tak, aby jim uživatel porozuměl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku timetable.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 9: Diagram balíčku timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 9 jsou závislosti jednotlivých tříd v&amp;amp;nbsp;rámci tohoto balíčku i mimo něj. V&amp;amp;nbsp;následující části bude stručný popis jednotlivých tříd v&amp;amp;nbsp;rámci balíčku. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na schématu č. 9 třída CellView je potomkem systémové třídy android.widget.LinerLayout. Slouží k&amp;amp;nbsp;vykreslení jedné buňky obsahující data rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída TimetableView je potomkem systémové třídy FrameLayout, implementuje rozhraní AsyncTaskCompleteListener z&amp;amp;nbsp;balíčku communications a vykresluje rozvrh hodin. Data rozvrhu hodin dokáže sama získat z&amp;amp;nbsp;databáze nebo ze školního serveru za pomoci zmiňované implementace. Vykreslení rozvrhu je závislé na typu dat, tedy jedná-li se o data učitele, místnosti nebo studijního kruhu. K&amp;amp;nbsp;tomu slouží výčtový typ TimetableTyp určující, jakým způsobem budou data v&amp;amp;nbsp;rozvrhu hodin zobrazeny. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení rozvrhu hodin má v&amp;amp;nbsp;režii třída TimetableActivity, která je zároveň spouštěcí třídou rozvrhu hodin. To znamená, že po kliknutí na položku rozvrh hodin v&amp;amp;nbsp;menu aplikace se tato třída spustí a zobrazí rozvrh hodin. TimetableActivity implementuje řadu rozhraní, která slouží jako komunikační most mezi rozvrhem a uživatelem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Princip vykreslení rozvrhu hodin ===&lt;br /&gt;
Vytvoření rozvrhu hodin probíhá ve dvou fázích. První fází je inicializace a zobrazení prázdné tabulky rozvrhu hodin. Tabulka rozvrhu hodin je sestavena ze základních vizuálních prvků, které poskytuje platforma Android a vytvořena programově, není tedy využito XML návrhu. Vnoření jednotlivých vizuálních prvků je na schématu č. 10. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Způsob vnoření vizuálních prvků třídy TimetableView.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 10: Způsob vnoření vizuálních prvků třídy TimetableView&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka rozvrhu hodin je postavena na vizuálním prvku FrameLayout, který vyplňuje celou dostupnou plochu obrazovky. Následuje prvek ScrollView1 zajišťující posouvání rozvrhu hodin ve vertikálním směru za předpokladu, že má tabulka rozvrhu hodin větší výšku než je výška obrazovky. Prvek ScrollView1 může obsahovat pouze jeden prvek. Proto obsahuje horizontální prvek LinearLayout obsahující dva prvky. Levým prvkem je TableLayout, jež obsahuje řádky tabulky pro zobrazení dnů. Pravým prvkem je ScrollView2 zajišťující posouvání rozvrhu hodin v&amp;amp;nbsp;horizontálním směru, avšak pouze pokud je tabulka rozvrhu hodin širší než šířka obrazovky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při posouvání v&amp;amp;nbsp;horizontálním směru se tedy neposouvá prvek TableLayout1'','' ale posouvá se pouze obsah ScrollView2, což je prvek TableLayout2 obsahující řádky tabulky rozvrhu hodin, které reprezentuje prvek LinerLayout3 orientovaný vertikálně. LinearLayout3 reprezentuje jednu buňku rozvrhu hodin obsahující prvky TextView2, kde jsou umístěna data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ve druhé fázi je rozvrh hodin naplněn hodnotami a poté je upravena velikost řádků. Tabulka je také naplněna daty jednotlivých dnů v&amp;amp;nbsp;týdnu. Princip rozložení dat v&amp;amp;nbsp;tabulce rozvrhu hodin je na následujícím obrázku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozložení dat tabulky rozvrhu hodin.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 13: Rozložení dat tabulky rozvrhu hodin&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Buňka rozvrhu hodin může obsahovat více informačních buněk. To proto, že jedna vyučovací hodina může být vyučována více učiteli, ve stejné místnosti může být více studijních kruhů, studijní kruh je rozdělen na skupiny, atd. &lt;br /&gt;
&lt;br /&gt;
Každá informační buňka obsažená v&amp;amp;nbsp;jedné buňce tabulky rozvrhu hodin tedy charakterizuje výuku ve stejný časový okamžik a pro různé účastníky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ovládání rozvrhu hodin zajišťuje třída TimetableActivity pomocí třídy MyFiltr a implementací, které jsou znázorněny na schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je vykreslený rozvrh hodin. Snímek byl pořízen ze zařízení Nexus 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vykreslený rozvrh hodin, Nexus 7.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 14: Vykreslený rozvrh hodin, Nexus 7&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na předcházejícím obrázku je zobrazena aplikace EPI rozvrh s&amp;amp;nbsp;vykresleným rozvrhem hodin a ovládacími prvky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček popups ==&lt;br /&gt;
Za běhu aplikace nastávají situace, kdy je potřeba informovat uživatele, nebo od něj vyžádat vstup. To se provádí pomocí dialogů, což jsou vyskakovací okna. Veškeré dialogy v&amp;amp;nbsp;rámci aplikace rozvrhu hodin jsou umístěny v&amp;amp;nbsp;tomto balíčku.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku popups.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 11: Diagram balíčku popups&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček popups se skládá ze dvou tříd MyFiltr a Detail, výčtového typu enum s&amp;amp;nbsp;názvem Filtr a rozhraní PopupCompleteListener. Třída MyFiltr pracuje s&amp;amp;nbsp;instancí rozhraní PopupCompleteListener a s&amp;amp;nbsp;instancí výčtového typu s&amp;amp;nbsp;názvem Filtr. Třída Detail je potomkem systémové třídy Dialog a pracuje s&amp;amp;nbsp;instancemi tříd CellData a TimetableTyp. Všechny popisované vazby jsou znázorněny na schématu č. 11.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detail informační buňky z rozvrhu hodin ===&lt;br /&gt;
Informační buňka z&amp;amp;nbsp;rozvrhu hodin obsahuje spoustu informací, které nejsou zobrazeny v&amp;amp;nbsp;rozvrhu hodin. Pro jejich zobrazení je tedy použit dialog vyvolaný kliknutím na informační buňku, jenž je graficky upravený tak, aby v&amp;amp;nbsp;něm byly požadované informace srozumitelně a jednoduše zobrazeny, což je obrovská výhoda oproti stávajícímu rozvrhu hodin, který je dostupný na webových stránkách informačního systému školy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení dialogu zajišťuje třída Detail, která je potomkem třídy android.app.Dialog, což zajišťuje vyvolání dialogu po kliknutí na grafický prvek ''View'', jež je předán jako parametr při vytváření instance třídy Detial. Při vytváření instance se také předávají data pro zobrazení ve formě objektu CellData a hodnota výčtového typu TimetableTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekt CellData obsahuje veškeré informace určené k&amp;amp;nbsp;zobrazení v&amp;amp;nbsp;rámci dané buňky. Způsob zobrazení dat pro studenty, učitele a místnosti je rozdílný, i když jsou informace stejného charakteru, protože pro studenty je prioritní jiný typ informace než pro učitele nebo místnosti. K&amp;amp;nbsp;rozlišení způsobu zobrazení slouží výčtový typ s&amp;amp;nbsp;názvem TimetableTyp, jehož hodnota je předána právě při vytváření instance třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy Detail:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Detail(Context context, View view, CellData  cellData, TimetableType timTyp) {&lt;br /&gt;
super(context);&lt;br /&gt;
this.timTyp = timTyp;&lt;br /&gt;
this.cellData = cellData;&lt;br /&gt;
this.addListener(view);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;konstruktoru se převzaté objekty timTyp a cellData uloží do ekvivalentních proměnných patřících třídě Detail. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Metoda addListener(View):&lt;br /&gt;
private void addListener(View view) {&lt;br /&gt;
view.setOnClickListener(new View.OnClickListener() {&lt;br /&gt;
public void onClick(View v) {&lt;br /&gt;
Detail.this.show();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, metoda addListener(View) nastaví na převzatý objekt posluchače, který se spustí po kliknutí. Posluchač poté v&amp;amp;nbsp;případě kliknutí na objekt View zobrazí dialog a zavolá metodu onCreate(), jež byla převzata od rodičovského prvku. V&amp;amp;nbsp;metodě onCreate() se pak zobrazí data a způsob zobrazení ovlivňuje hodnota globální proměnné timTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zobrazení rozvrhu hodin pomocí filtru ===&lt;br /&gt;
Každý uživatel aplikace si může zobrazit nejenom svůj rozvrh hodin, ale může si také zobrazit rozvrh hodin pro jednotlivé studenty, učitele a místnosti. Tuto vlastnost aplikace zajišťuje třída MyFiltr, která je potomkem systémové třídy Dialog, což zajišťuje, že se MyFiltr zobrazí jako dialog. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MyFiltr obsahuje tři grafická políčka a z&amp;amp;nbsp;toho dvě jsou výběrová tlačítka. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání. První políčko udává, jedná-li se o rozvrh hodin pro učitele, místnost nebo pro studijní kruh. Druhé výběrové tlačítko obsahuje zkratky učitelů, místností nebo studijních kruhů. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání zkratky s&amp;amp;nbsp;automatickou nápovědou. Po zadání dvou písmen se zobrazí nabídka, která je ovlivněná výběrem prvního políčka. V&amp;amp;nbsp;této nabídce je seznam zkratek pro učitele, místnosti nebo studijní kruhy, jejichž první dvě písmena byla zadána.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První výběrové tlačítko tedy vždy obsahuje hodnoty učitel, místnost a studijní kruh. Výběrem tohoto políčka se ovlivní druhé výběrové políčko a třetí políčko pro ruční zadání s&amp;amp;nbsp;nápovědou. Posledním grafickým prvkem je tlačítko, jehož zmáčknutí zavře zobrazovaný dialog a zobrazí rozvrh hodin podle zadaných kriterií. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vytvořením instance třídy se nastaví vzhled dialogu na předem vytvořený design, který je definovaný v&amp;amp;nbsp;XML souboru s&amp;amp;nbsp;názvem my_filtr.xml. Dále dojde k&amp;amp;nbsp;přednastavení výběru tak, že se vybere první studijní kruh v&amp;amp;nbsp;seznamu. Uživatel tuto volbu pak může kdykoliv změnit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček widgets ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Aplikace rozvrhu hodin poskytuje miniaplikaci na plochu, což je minimalizovaná verze aplikace zpracovaná tak, aby ji bylo možné zobrazit na domovské obrazovce zařízení. [33]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minimalizovaná aplikace se zobrazuje ve formě seznamu vyučovacích hodin za období jednoho dne. Každých 30 minut se seznam aktualizuje a v&amp;amp;nbsp;případě, že dojde k&amp;amp;nbsp;ukončení některé výuky, odstraní se také ze seznamu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku widget.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 12: Diagram balíčku widget&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dle schématu č. 12 se tato třída skládá z&amp;amp;nbsp;balíčků ViewsFactory, WidgetProvider a WidgetService. WidgetProvider se stará o zobrazení miniaplikace a její správu. ViewsFactory pomocí WidgetService naplní miniaplikaci hodnotami. Vzhled miniaplikace se skládá z hlavičky, kde je název aktuálního dne a datum dne. Dále jej tvoří ListView'','' který slouží k&amp;amp;nbsp;zobrazení jednotlivých dat rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzhled widgetu.png.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 15: Vzhled widgetu&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na obrázku č. 15, widget se skládá z&amp;amp;nbsp;několika prvků LinearLayout určující rozmístění vizuálních prvků. Jedná se především o prvky TextView, které jsou umístěny ve vertikálně orientovaném prvku, což způsobuje, že jsou tyto prvky TextView umístěny pod sebou. Dále následuje nejdůležitější část miniaplikace a to je ListView. ListView je posuvný seznam obsahující prvky rozvrhu hodin. Miniaplikaci je možné zobrazit pouze na domovské obrazovce zařízení, jehož verze operačního systému je vyšší než API 11.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_cz.sajboch.epi_main.png&amp;diff=11795</id>
		<title>Súbor:Diagram třídy cz.sajboch.epi main.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_t%C5%99%C3%ADdy_cz.sajboch.epi_main.png&amp;diff=11795"/>
		<updated>2013-09-08T19:25:17Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11794</id>
		<title>Realizace projektu EPIrozvrh a popis kódu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Realizace_projektu_EPIrozvrh_a_popis_k%C3%B3du&amp;diff=11794"/>
		<updated>2013-09-08T19:22:35Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Vytvorená stránka „{{Praca_uvod|5|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a mož...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|5|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura aplikace EPI rozvrh se skládá ze dvou balíčků a to z&amp;amp;nbsp;cz.sajboch.epi_main a cz.sajboch.epi_timetable, dále jen epi_timetable, jenž reprezentuje balíček pro zobrazení školního rozvrhu. V&amp;amp;nbsp;následující části jsou popisovány pouze balíčky vytvořené v&amp;amp;nbsp;rámci této práce. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozdělení tříd do balíčků zajišťuje snadnou modifikaci aplikace a případné rozšíření o další funkce. Hlavní balíček cz.sajboch.epi_main se skládá ze šesti tříd: MainActivity'', ''LoginActivity'', ''AboutActivity'', ''OnlineRecords'', ''TimetableActivity a Settings, viz schéma č. 6. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy cz.sajboch.epi main]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 6: Diagram třídy cz.sajboch.epi_main&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak je patrné ze schématu č. 6, třída MainActivity je potomkem systémové třídy android.app.Activity, což ji tvoří spustitelnou. Třída MainActivity se spouští po spuštění aplikace. Její hlavní rolí je zobrazení ovládacího menu, jež obsahuje tlačítka. Grafické zobrazení je vytvořeno na základě XML souboru activity_main.xml. Po spuštění této třídy dochází k&amp;amp;nbsp;ověření přihlašovacích údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující obrázek je náhledem menu aplikace, jenž je vytvořeno na základě třídy MainActivity. Obrázek byl pořízen na mobilním zařízení Samsung Galaxy mini.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Hlavní menu zařízení, Samsung Galaxy mini]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 12: Hlavní menu zařízení, Samsung Galaxy mini&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Settings je potomkem třídy android.preference.PreferenceActivity a slouží k&amp;amp;nbsp;zobrazení a modifikaci nastavení aplikace a uchovává přihlašovací údaje, datum poslední aktualizace, způsob aktualizace atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček epi_timetable tvoří rozvrh hodin a jeho funkce. Skládá se z&amp;amp;nbsp;několika dalších balíčků, kde každý z&amp;amp;nbsp;těchto balíčku má specifický význam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznam balíčků epi_timetable:&lt;br /&gt;
&lt;br /&gt;
* cz.sajboch.epi_timetable.communications dále jen communications, &lt;br /&gt;
* cz.sajboch.epi_timetable.lib dále jen lib,&lt;br /&gt;
* cz.sajboch.epi_timetable.popups dále jen popups,&lt;br /&gt;
* cz.sajboch.epi_timetable.timetable dále jen timetable,&lt;br /&gt;
* cz.sajboch.epi_timetable.widgets dále jen widgets.&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;následujících kapitolách budou popsány jednotlivé balíčky, jejich funkce, využití a způsob, jakým se používají. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček communications ==&lt;br /&gt;
Balíček communications poskytuje aplikaci komunikační protokoly pro připojení ke školnímu serveru a následné uložení stažených dat. Skládá se ze sedmi tříd, které jsou mezi sebou závislé. Tyto závislosti jsou viditelné na následujícím schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram třídy communications]]&lt;br /&gt;
Schéma č. 7: Diagram třídy communications&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída Update slouží pro spuštění procesu aktualizace. Proces aktualizace probíhá tak, že se stáhnou data rozvrhu hodin ze školního serveru a následně se uloží do lokální databáze a souborů v&amp;amp;nbsp;mobilním zařízení. Stažení dat zajišťuje třída NetworkConnect běžící paralelně s hlavním vláknem programu. Paralelní běh zajišťuje rodičovský prvek AsyncTask, který vytvoří nové vlákno. Komunikace mezi těmito vlákny zajišťuje rozhranní AsyncTaskCompleteListener, jež třída Update implementuje. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vložení dat do databáze zajišťuje třída DataToDatabase. Pro načtení dat z&amp;amp;nbsp;databáze se používá třída DataFromDatabase. Obě třídy jsou potomkem Database a ta je potomkem SQLiteOpenHelper. Uložení a načtení dat ze souboru zajišťuje třída SaveListToFile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace ===&lt;br /&gt;
Aktualizace rozvrhu hodin jsou buď automatické, nebo ruční. To znamená, že aplikace může sama aktualizovat data rozvrhu hodin po určitém časovém intervalu. Časový interval určuje nastavení uživatele, kde uživatel má možnost zvolit z&amp;amp;nbsp;několika předem určených časových intervalů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při vytvoření instance třídy Update se zavolá konstruktor, ve kterém dojde k&amp;amp;nbsp;ověření, zda je databáze rozvrhu hodin aktuální vzhledem k&amp;amp;nbsp;nastavení intervalu aktualizací.Do proměnné autoUpdate datového typu boolean se uloží logická hodnota 1, neboli true'','' pokud jsou povoleny automatické aktualizace. Pokud povoleny nejsou, uloží se logická hodnota 0, tedy false. Výchozím nastavením je logická hodnota ''true''. Tuto hodnotu si může uživatel změnit v&amp;amp;nbsp;nastavení zaškrtnutím políčka „Automatické aktualizace“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zda je rozvrh hodin zastaralý zjistí metoda isOutDate(). Zjistí to tak, že porovná datum poslední aktualizace s&amp;amp;nbsp;aktuálním datem. Pokud je rozdíl větší než sedm dnů, metoda vyhodnotí rozvrh jako zastaralý a vrátí hodnotu true, v&amp;amp;nbsp;opačném případě vrátí hodnotu false. Rozdíl sedm dnů, tedy jeden týden, lze přenastavit na jinou hodnotu v&amp;amp;nbsp;nastavení aplikace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy ověřující, zda bude spuštěná automatická aktualizace:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Update(Context context){…&lt;br /&gt;
if (autoUpdate &amp;amp;&amp;amp; this.isOutDate ()) {&lt;br /&gt;
this.start();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V případě, je-li podmínka splněná, tedy jsou zapnuty automatické aktualizace a zároveň je interní databáze zastaralá, spustí se metoda start() třídy Update. Ta zjistí, zda již existuje interní databáze. Pokud existuje, bude zaktualizována pouze část rozvrhu hodin, a to od data provádění aktualizace do konce školního roku. Pokud interní databáze neexistuje, vytvoří se a zaktualizuje se rozvrh hodin od začátku až po konec školního roku. Následující kód popisuje část metody start() rozhodující v&amp;amp;nbsp;jakém rozsahu bude interní databáze aktualizována. &lt;br /&gt;
&lt;br /&gt;
Rozsah aktualizace interní databáze:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (db.isTimetableTable()) {&lt;br /&gt;
this.updateFrom = MyDate.getDate();db.deleteOlderFromTimetable(&lt;br /&gt;
MyDate.getZacatekSkolnihoRoku());&lt;br /&gt;
 } else {&lt;br /&gt;
this.updateFrom = MyDate.getZacatekSkolnihoRoku();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktualizace může být spuštěna ručně, dojde-li k zavolání metody start() pomocí vytvořené instance této třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stahování dat ===&lt;br /&gt;
Platforma Android nemůže přímo přistupovat k&amp;amp;nbsp;databázi MYSQL, proto byla vytvořena další vrstva zabezpečující aplikaci přístup k&amp;amp;nbsp;datům. Tato vrstva je vytvořena pomocí PHP skriptu. PHP skript se obsluhuje HTTP požadavky typu POST. Na základě odeslaného požadavku vytáhne z&amp;amp;nbsp;databáze data, která pak zobrazí ve formě prostého textu formátovaného metodou JSON, viz kapitola 2.2.2. Na straně aplikace se o odeslání požadavku a zpracování výsledku stará metoda NetworkConnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operační systém Android nedovoluje provádět operace trvající delší dobu ve vlákně UI. Stahování dat se tedy provádí v&amp;amp;nbsp;jiném vlákně běžícím paralelně s&amp;amp;nbsp;vláknem UI, ale paralelně běžící vlákno nemůže přímo přistupovat k&amp;amp;nbsp;vizuálním prvkům a jakkoliv je editovat. Pokud je potřeba například aktualizovat vizuální prvek z&amp;amp;nbsp;paralelně běžícího vlákna, může se použít systémová třída android.os.AsyncTask, dále jen AsyncTask, a ta zajistí paralelní běh vlákna a průběžné aktualizace vizuálních prvků.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetworkConnect je potomkem AsyncTask, což ji činí spustitelnou v&amp;amp;nbsp;paralelně běžícím vlákně a dovoluje jí aktualizovat vizuální prvek. Z&amp;amp;nbsp;rodičovské třídy se převezmou metody doInBackground( Params … ) a &amp;lt;nowiki&amp;gt;onPostExecute( result[] … )&amp;lt;/nowiki&amp;gt;, které je třeba v&amp;amp;nbsp;této třídě implementovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída NetworkConnect a zděděné metody od rodičovské třídy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class NetworkConnect extends AsyncTask&amp;lt;Void, Void, String[]&amp;gt; {&lt;br /&gt;
…&lt;br /&gt;
@Override&lt;br /&gt;
protected String[] doInBackground(Void... params) {&lt;br /&gt;
String[] result;&lt;br /&gt;
…&lt;br /&gt;
return result;&lt;br /&gt;
}&lt;br /&gt;
@Override&lt;br /&gt;
protected void onPostExecute(String[] result) {&lt;br /&gt;
callback.onTaskComplete(result);&lt;br /&gt;
…&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zděděná metoda doInBackground(Void… params) se spouští již v&amp;amp;nbsp;novém vlákně, kde se odesílají požadavky serveru, jejichž výsledky se stahují ve formě textu. Jeden požadavek serveru může obsahovat více parametrů, a proto jsou jednotlivé požadavky vkládány do kolekce, která se odesílá jakožto jeden požadavek. Jednotlivé parametry požadavku obsahují dvojici klíč:hodnota a ukládají se proto do proměnné datového typu NameValuePair, který je uzpůsoben k&amp;amp;nbsp;ukládání těchto hodnot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Díky sofistikovanému využití metody doInBackground(Void… params) je možné odeslat více požadavků sériově. To probíhá tak, že se odešle požadavek, stáhne se výsledek odeslaného požadavku, který se uloží do pole datového typu String. Pak se odešle další požadavek, jehož výsledek se zase uloží do pole. Tento děj se opakuje tolikrát, kolik je požadavků. Po stažení posledního výsledku se ukončí vlákno a pole výsledků se odešle metodě &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt;, která již běží v hlavním vlákně UI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metoda &amp;lt;nowiki&amp;gt;onPostExecute(String[] result)&amp;lt;/nowiki&amp;gt; pole výsledků žádným způsobem nezpracovává, pouze jej přeposílá dále, pomocí rozhraní AsyncTaskCompleteListener, jehož instance byla převzata při volání konstruktoru třídy NetworkConnect. Rozhraní poskytuje metodu zpětného volání, která se provede v&amp;amp;nbsp;místě vytvoření konstruktoru NetworkConnect, kde je umístěna. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Způsob komunikace třídy NetworkConnect&amp;lt;nowiki&amp;gt; je založený na pokročilých návrhových vzorech. [9, s. 286]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Konstruktor třídy NetworkConnect:&lt;br /&gt;
public NetworkConnect(AsyncTaskCompleteListener&amp;lt;String&amp;gt; cb) {&lt;br /&gt;
this.callback = cb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Způsob použití třídy NetworkConnect je velmi jednoduchý. Nejprve se vytvoří instance třídy, poté se zadají jednotlivé požadavky pro stažení dat pomocí níže zmíněných metod a v poslední řadě se zavolá metoda execute() spouštějící paralelní vlákno, které vykoná veškeré požadavky v&amp;amp;nbsp;metodě doInBackground(Void… params). Pro opakované použití třídy je potřeba vytvořit novou instanci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody třídy NetworkConnect pro nastavení požadavků:&lt;br /&gt;
&lt;br /&gt;
* public void setList()- nastaví požadavky pro stažení seznamu učitelů, místností a studijních kruhů,&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;public void setNameValuePair(List&amp;lt;NameValuePair&amp;gt; nameVP)&amp;lt;/nowiki&amp;gt; - nastaví libovolný požadavek,&lt;br /&gt;
* public void setUcitel(String u, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro učitele v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String t, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro studijní kruh v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}, &lt;br /&gt;
* public void setClass(String m, String dateFrom, String dateTo) - stáhne data rozvrhu hodin pro místnost v&amp;amp;nbsp;časovém intervalu {dateFrom, dateTo}. &lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat ===&lt;br /&gt;
Aplikace ukládá data rozvrhu hodin a řídící data, které reprezentují seznam učitelů, místností a studijních kruhů. Data rozvrhu hodin a řídící data se ukládají rozdílným způsobem. Řídící data se ukládají v&amp;amp;nbsp;serializované podobě do souboru, kdežto data rozvrhu hodin se ukládají do lokální databáze. Jedná se o datové soubory, které byly popsány v&amp;amp;nbsp;kapitole 4.2.2. &lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do databáze'''&lt;br /&gt;
&lt;br /&gt;
Pro uložení dat získaných ze školního serveru je použita interní databáze SQLite, kterou poskytuje platforma Android. Databázi reprezentují třídy DataToDatabase a DataFromDatabase, které jsou potomky třídy Database. Database obsahuje strukturu databáze a to znamená, že určuje název databáze, názvy tabulek, názvy sloupců a jejich datové typy. Také samotnou databázi vytváří, což zajišťuje rodičovský prvek android.database.sqlite.SQLiteOpenHelper. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vkládání dat do databáze zajišťuje třída DataToDatabase využívající funkce třídy android.database.sqlite.SQLiteDatabase pomocí její instance, díky které je možné provádět SQL dotazy. Také lze pomocí této třídy smazat celou databázi nebo pouze její část. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data se do databáze vkládají prostřednictvím datového typu TimetableData uchovávající data datového typu CellData reprezentující jeden záznam v&amp;amp;nbsp;databázi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataToDatabase:&lt;br /&gt;
&lt;br /&gt;
* public void updateTimetableDB(TimetableData td) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než nejstarší datum vkládaných prvků a následně vloží nové data v&amp;amp;nbsp;proměnné db,&lt;br /&gt;
* public void updateTimetableDB(TimetableData td, String uFrom) - smaže data z&amp;amp;nbsp;databáze, které jsou novější než datum nacházející se v&amp;amp;nbsp;proměnné uFrom, a následně vloží do databáze data z&amp;amp;nbsp;proměnné db, &lt;br /&gt;
* public void deleteOlderFromTimetable(String olderThan) - smaže data z&amp;amp;nbsp;databáze, starší než datum v&amp;amp;nbsp;proměnné ''olderThen'', &lt;br /&gt;
* public void deleteDb() - smaže celou databázi,&lt;br /&gt;
* public void addData(TimetableData td) - přidá do databáze data z&amp;amp;nbsp;proměnné td a zachová předcházející data uložená v&amp;amp;nbsp;databázi. &lt;br /&gt;
&lt;br /&gt;
Načtení dat z&amp;amp;nbsp;databáze zajišťuje třída DataFromDatabase, která pracuje na stejném principu jako třída DataToDatabase'','' ale nemá zapisovací práva. Díky tomu, že existují třídy pro čtení a zapisování do databáze zvlášť, je zajištěna určitá bezpečnost dat. Také se tím předchází nechtěnému smazání dat z databáze. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Využití metod třídy DataFromDatabase:&lt;br /&gt;
&lt;br /&gt;
* public TimetableData getData(String week), načte data z databáze za období jednoho týdne, proměnná week obsahuje datum začátku týdne, &lt;br /&gt;
* public TimetableData getOneDayData(String day, int time), načte data z&amp;amp;nbsp;databáze ze dne, jehož datum se nachází v&amp;amp;nbsp;proměnné day a zároveň čas uložený v&amp;amp;nbsp;proměnné time než čas začátku hodiny.&lt;br /&gt;
&lt;br /&gt;
'''Ukládání dat do souboru'''&lt;br /&gt;
&lt;br /&gt;
Do souboru se ukládají seznamy učitelů, studijních kruhů a místností. Datovým typem takto ukládaných dat je List. Podrobnější popis je v&amp;amp;nbsp;kapitole 4.2.2. Pro ukládání dat je použita třída SaveListToFile, kde jsou využity principy pro práci se soubory v&amp;amp;nbsp;kombinaci s&amp;amp;nbsp;operačním systémem Android. Třída obsahuje řetězcové konstanty, které obsahují názvy souborů. Třída SaveListToFile'' ''pracuje s&amp;amp;nbsp;daty jako s&amp;amp;nbsp;objekty a také je tak ukládá do souboru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Řetězcové konstanty uchovávající název souboru:&lt;br /&gt;
&lt;br /&gt;
* public final static String TEACHER_LIST_FILE = &amp;quot;timetable_t_list.dat&amp;quot;,&lt;br /&gt;
* public final static String ROOM_LIST_FILE = &amp;quot;timetable_r_list.dat&amp;quot;,&lt;br /&gt;
* public final static String CLASS_LIST_FILE = &amp;quot;timetable_c_list.dat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ukládání dat zajišťuje writeListToFile(List&amp;lt;nowiki&amp;gt;&amp;lt;String&amp;gt;&amp;lt;/nowiki&amp;gt; list, String filename) přebírající dva parametry a to list datového typu List a název souboru filename datového typu String. Jako parametr filename může být použita některá z&amp;amp;nbsp;proměnných této třídy, avšak nemusí. Zavoláním této metody dojde k&amp;amp;nbsp;serializaci listu a jeho následné uložení do souboru s&amp;amp;nbsp;názvem, který byl předán jako parametr filename. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody writeListToFile():&lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.writeListToFile(list,SaveListToFile.TEACHER_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Načtení jednotlivých dat ze souboru zajišťuje statická metoda &amp;lt;nowiki&amp;gt;List&amp;lt;String&amp;gt; &amp;lt;/nowiki&amp;gt;loadListFromFile(String filename). Metoda přebírá jeden parametr filename určující název souboru, ze kterého se mají načíst data. Při zavolání metody dojde k&amp;amp;nbsp;načtení dat ze souboru a na základě těchto dat se vytvoří nový objekt datového typu Object. Ten se následně převede na datový typ List. Návratová hodnota je datového typu List a obsahuje načtená, jinak neupravená, data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volání statické metody loadListFromFile(): &lt;br /&gt;
&lt;br /&gt;
* SaveListToFile.loadListFromFile(SaveListToFile.ROOM_LIST_FILE)&lt;br /&gt;
&lt;br /&gt;
Obě zmiňované metody pracují na principu ukládání a načítání dat formou objektu. &amp;lt;nowiki&amp;gt;[8, s. 289&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček lib ==&lt;br /&gt;
Veškerý běh aplikace, který není vidět a nemá co dočinění s&amp;amp;nbsp;vnější komunikací, zabezpečují třídy tohoto balíčku a ten reprezentuje celou datovou strukturu rozvrhu hodin, jenž je velmi komplikovaná. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku lib]]&lt;br /&gt;
Schéma č. 8: Diagram balíčku lib&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející schéma balíčku lib se skládá ze šesti tříd. MyDate zpracovává datum a provádí s&amp;amp;nbsp;ním různé operace. Třída UpdateThread zajišťuje zpracování stažených dat v&amp;amp;nbsp;paralelně běžícím vlákně. To je umožněno díky rodičovskému prvku android.os.AsyncTask. Třída MyJson slouží ke zpracování dat, která byla stažena. Stažená data jsou poté uložena do proměnné datového typu CellData reprezentující jednu buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
Třída TimetableData zpracovává a eviduje data datového typu CellData. V&amp;amp;nbsp;poslední řadě stojí třída LoginVerification, která slouží k&amp;amp;nbsp;ověření, zda proběhlo úspěšné přihlášení. Pracuje s&amp;amp;nbsp;instancí NetworkConnect a rozšiřuje ji rozhraní AsyncTaskCompleteListener. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zpracování stažených dat  ===&lt;br /&gt;
Data ze školního serveru jsou stažena ve formě prostého textu s formátováním JSON, což je popsáno v&amp;amp;nbsp;kapitole 2.2.2. Takto formátovaná data nejsou vhodná pro další zpracování aplikací. Aplikace má proto vlastní datovou strukturu pro stažená data, do které jsou stažená data zapracována.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datovou strukturu reprezentují třídy CellData a TimetableData. Tato datová struktura je pouze jakýmsi rozhraním mezi staženými daty, databází a vykreslením rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozvrh hodin se vizuálně skládá z&amp;amp;nbsp;řádků a sloupců. V&amp;amp;nbsp;místě protnutí určitého řádku a sloupce, tedy v&amp;amp;nbsp;buňce, může být umístěno více informačních buněk. Informační buňkou se myslí grafická buňka nesoucí informace o dané vyučovací hodině.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základním kamenem této struktury je třída CellData, ve které jsou uložena data reprezentující jednu informační buňku v&amp;amp;nbsp;rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proměnné třídy ''CellData'':&lt;br /&gt;
&lt;br /&gt;
* numberOfDay - obsahuje hodnoty od nuly do šesti kde nula symbolizuje pondělí, číslo jedna úterý, číslo dva středu, atd.,&lt;br /&gt;
* color ''-'' hexadecimální číselný údaj reprezentující barvu buňky, &lt;br /&gt;
* date - datum dne ke kterému se vztahují údaje,&lt;br /&gt;
* endTime - čas konce vyučovací hodiny definovaný v&amp;amp;nbsp;standardním unixovém čase,&lt;br /&gt;
* hour - číslo vyučovací hodiny,&lt;br /&gt;
* hours - počet hodin jdoucích bezprostředně za sebou,&lt;br /&gt;
* subject - celý název vyučovacího předmětu,&lt;br /&gt;
* group - číslo nebo název skupiny, pro kterou jsou data určeny, &lt;br /&gt;
* studyCircle - název studijního kruhu,&lt;br /&gt;
* time - čas začátku hodiny v&amp;amp;nbsp;milisekundách,&lt;br /&gt;
* schoolRoom - název učebny,&lt;br /&gt;
* teacher - celé příjmení a tituly učitele,&lt;br /&gt;
* teachers - seznam učitelů pro které platí tyto data,&lt;br /&gt;
* studyCircles - seznam studijních kruhů pro které platí tyto data,&lt;br /&gt;
* abbSubject - zkratka předmětu,&lt;br /&gt;
* abbSchoolroom - zkratka učebny,&lt;br /&gt;
* abbTeacher - zkratka učitele.&lt;br /&gt;
&lt;br /&gt;
Jelikož jsou veškeré proměnné privátní, existují metody pro jejich správu. Pro každou proměnnou existují minimálně dvě metody pro správu. Jedna metoda proměnnou nastavuje na jinou hodnotu a druhá metoda získává aktuální nastavení proměnné. Metod pro práci s&amp;amp;nbsp;proměnnými je mnoho, a proto není možné je zde všechny zmínit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé z&amp;amp;nbsp;metod pro práci s&amp;amp;nbsp;proměnnými:&lt;br /&gt;
&lt;br /&gt;
* setSubject(String value) - nastaví proměnnou subject na hodnotu ''value'',&lt;br /&gt;
* setTeacher(String value) - nastaví proměnnou teacher na hodnotu ''value'',&lt;br /&gt;
* getSubject() - vrací hodnotu textového řetězce proměnné subject,&lt;br /&gt;
* getTeacher() - vrací hodnotu textového řetězce proměnné teacher.&lt;br /&gt;
&lt;br /&gt;
Jak již bylo zmíněno, jeden objekt CellData obsahuje data pouze jedné informační buňky v&amp;amp;nbsp;rozvrhu hodin. Stažená data, která se mají uložit do databáze, obsahují však více takových buněk. Proto existuje třída TimetableData'','' jež spravuje jednotlivé objekty CellData. Spravuje je tak, že je jednotlivě ukládá do objektu List, tím tvoří seznam objektů CellData. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekty se vkládají do zásobníku jeden za druhým a první objekt je v&amp;amp;nbsp;zásobníku úplně naspodu. Další objekty se skládají nad první v&amp;amp;nbsp;pořadí, v&amp;amp;nbsp;jakém jsou vkládány. Při načítání jednotlivých dat se musí brát shora dolů, tedy od posledního k&amp;amp;nbsp;prvnímu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metody TimetableData:&lt;br /&gt;
&lt;br /&gt;
* addData(CellData), přidá objekt CellData do seznamu,&lt;br /&gt;
* getFirstDate(), vrátí objekt CellData s&amp;amp;nbsp;nejmenším datem,&lt;br /&gt;
* getSize(), vrátí počet prvků v&amp;amp;nbsp;seznamu,&lt;br /&gt;
* getCell(), vrátí poslední objekt CellData, poté jej zahodí,&lt;br /&gt;
* hasCell(), zjistí, je-li v&amp;amp;nbsp;seznamu nějaký objekt,&lt;br /&gt;
* getHour(int hodina), je statická metoda, kterou lze použít bez vytvoření instance, vrací čas začátku a konce vyučovací hodiny v&amp;amp;nbsp;milisekundách předané v&amp;amp;nbsp;parametru hodina.&lt;br /&gt;
&lt;br /&gt;
=== Práce s datem ===&lt;br /&gt;
Aplikace rozvrhu hodin velmi často pracuje s&amp;amp;nbsp;datem, ať už při vykreslení rozvrhu hodin nebo uložení dat do databáze. Dá se tedy říct, že práce s&amp;amp;nbsp;datem hraje v&amp;amp;nbsp;aplikaci neodmyslitelnou roli a proto byla vytvořena samostatná třída MyDate obsahující metody ulehčující práci s&amp;amp;nbsp;datem. MyDate využívají veškeré balíčky aplikace rozvrhu hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Všechny metody třídy MyDate jsou statické, lze k&amp;amp;nbsp;nim tedy přistupovat bez nutnosti vytvářet instanci třídy. Obsahuje více než dvacet metod, které se využívají zejména pro zjištění aktuálního dne v&amp;amp;nbsp;týdnu, čísla dne, zjištění data následujícího či předcházejícího dne, zjištění data pondělku v&amp;amp;nbsp;minulém či následujícím týdnu a podobně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukázka některých metod třídy MyDate:&lt;br /&gt;
&lt;br /&gt;
* getEndOfSchollYear() - vrací textový řetězec s&amp;amp;nbsp;datem konce školního roku,&lt;br /&gt;
* getStartOfSchoolYear() - vrací textový řetězec s&amp;amp;nbsp;datem začátku školního roku,&lt;br /&gt;
* getMonday(String week) - přebírá datum některého dne v&amp;amp;nbsp;týdnu a vrací textová řetězec s&amp;amp;nbsp;datem pondělku v&amp;amp;nbsp;daném týdnu,&lt;br /&gt;
* getNumberOfDay(String datum) - vrací číslo dne v&amp;amp;nbsp;týdnu, přičemž pondělí je 0 a neděle 6,&lt;br /&gt;
* getNumberOfWeek(String date) - přebírá parametr date na jehož základě vrací číslo týdne v&amp;amp;nbsp;roce.&lt;br /&gt;
&lt;br /&gt;
=== Ověření přihlašovacích údajů ===&lt;br /&gt;
Ověření přihlašovacích údajů zajišťuje třída LoginVerification, rozšiřuje ji rozhraní AsyncTaskCompleteListener a obsahuje instanci třídy NetworkConnect'','' jenž je popsaná v&amp;amp;nbsp;kapitole 5.1.2. NetworkConnect zajišťuje možnost odeslání přihlašovacích údajů školnímu severu, který ověří, zda jsou přihlašovací údaje správné. Pokud školní server vyhodnotí přihlašovací údaje jako správné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou true. Vyhodnotí-li je jako nesprávné, vrátí textový řetězec s&amp;amp;nbsp;hodnotou false. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace přijatá data vyhodnotí v&amp;amp;nbsp;metodě onTaskComplet&amp;lt;nowiki&amp;gt;e(String[] result)&amp;lt;/nowiki&amp;gt;, která je zavolána po stažení dat na základě požadavku. Vyhodnotí je tak, že ověří, zda na základě odeslaných přihlašovacích údajů serveru byl obdržen textový řetězec true. Pokud byl obdržen, tak se uloží přihlašovací údaje a stav přihlášení po dobu aktuálního školního roku. Po vypršení lhůty, se uživatel musí přihlásit znovu. Neobsahuje-li přijatý řetězec hodnotu true, není proces přihlášení úspěšný. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LoginVerification obsahuje vlastní rozhraní LoggedListener jehož metoda zpětného volání onLogged(boolean logged) je zavolána po ověření přihlašovacích údajů. Pokud bylo ověření přihlašovacích údajů kladné, je metodě předán parametr true. V&amp;amp;nbsp;opačném případě je předán parametr false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou předány metodě verify(), která odešle přihlašovací údaje školnímu serveru. Odeslání přihlašovacích údajů probíhá pomocí instance třídy NetworkConnect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vnitřní struktura metody verify():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void verify(String login, String password, String kontext) {&lt;br /&gt;
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;login&amp;quot;, login));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;pass&amp;quot;, password));&lt;br /&gt;
nameValuePairs.add(new BasicNameValuePair(&amp;quot;kontext&amp;quot;, kontext));&lt;br /&gt;
nc.setNameValuePair(nameValuePairs);&lt;br /&gt;
nc.setPage(&amp;quot;login.php&amp;quot;);&lt;br /&gt;
if (NetworkConnect.isConnection(context))&lt;br /&gt;
nc.execute();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metoda verify() přebírá tři parametry login, password a kontext. Těmto parametrům se přidělí klíčová hodnota definující jednotlivý parametr. Parametry jsou pak odeslány školnímu serveru pomocí instance třídy NetworkConnect za předpokladu, že je zařízení připojeno k&amp;amp;nbsp;síti internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček timetable ==&lt;br /&gt;
Zobrazení rozvrhu hodin a správné zařazení stažených dat do jednotlivých buněk zajišťuje právě tento balíček. Tvoří jej pouze třídy, které zpracovaná data ve formě objektu TimetableData, zobrazí tak, aby jim uživatel porozuměl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku timetable]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 9: Diagram balíčku timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 9 jsou závislosti jednotlivých tříd v&amp;amp;nbsp;rámci tohoto balíčku i mimo něj. V&amp;amp;nbsp;následující části bude stručný popis jednotlivých tříd v&amp;amp;nbsp;rámci balíčku. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na schématu č. 9 třída CellView je potomkem systémové třídy android.widget.LinerLayout. Slouží k&amp;amp;nbsp;vykreslení jedné buňky obsahující data rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Třída TimetableView je potomkem systémové třídy FrameLayout, implementuje rozhraní AsyncTaskCompleteListener z&amp;amp;nbsp;balíčku communications a vykresluje rozvrh hodin. Data rozvrhu hodin dokáže sama získat z&amp;amp;nbsp;databáze nebo ze školního serveru za pomoci zmiňované implementace. Vykreslení rozvrhu je závislé na typu dat, tedy jedná-li se o data učitele, místnosti nebo studijního kruhu. K&amp;amp;nbsp;tomu slouží výčtový typ TimetableTyp určující, jakým způsobem budou data v&amp;amp;nbsp;rozvrhu hodin zobrazeny. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení rozvrhu hodin má v&amp;amp;nbsp;režii třída TimetableActivity, která je zároveň spouštěcí třídou rozvrhu hodin. To znamená, že po kliknutí na položku rozvrh hodin v&amp;amp;nbsp;menu aplikace se tato třída spustí a zobrazí rozvrh hodin. TimetableActivity implementuje řadu rozhraní, která slouží jako komunikační most mezi rozvrhem a uživatelem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Princip vykreslení rozvrhu hodin ===&lt;br /&gt;
Vytvoření rozvrhu hodin probíhá ve dvou fázích. První fází je inicializace a zobrazení prázdné tabulky rozvrhu hodin. Tabulka rozvrhu hodin je sestavena ze základních vizuálních prvků, které poskytuje platforma Android a vytvořena programově, není tedy využito XML návrhu. Vnoření jednotlivých vizuálních prvků je na schématu č. 10. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Způsob vnoření vizuálních prvků třídy TimetableView]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 10: Způsob vnoření vizuálních prvků třídy TimetableView&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka rozvrhu hodin je postavena na vizuálním prvku FrameLayout, který vyplňuje celou dostupnou plochu obrazovky. Následuje prvek ScrollView1 zajišťující posouvání rozvrhu hodin ve vertikálním směru za předpokladu, že má tabulka rozvrhu hodin větší výšku než je výška obrazovky. Prvek ScrollView1 může obsahovat pouze jeden prvek. Proto obsahuje horizontální prvek LinearLayout obsahující dva prvky. Levým prvkem je TableLayout, jež obsahuje řádky tabulky pro zobrazení dnů. Pravým prvkem je ScrollView2 zajišťující posouvání rozvrhu hodin v&amp;amp;nbsp;horizontálním směru, avšak pouze pokud je tabulka rozvrhu hodin širší než šířka obrazovky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při posouvání v&amp;amp;nbsp;horizontálním směru se tedy neposouvá prvek TableLayout1'','' ale posouvá se pouze obsah ScrollView2, což je prvek TableLayout2 obsahující řádky tabulky rozvrhu hodin, které reprezentuje prvek LinerLayout3 orientovaný vertikálně. LinearLayout3 reprezentuje jednu buňku rozvrhu hodin obsahující prvky TextView2, kde jsou umístěna data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ve druhé fázi je rozvrh hodin naplněn hodnotami a poté je upravena velikost řádků. Tabulka je také naplněna daty jednotlivých dnů v&amp;amp;nbsp;týdnu. Princip rozložení dat v&amp;amp;nbsp;tabulce rozvrhu hodin je na následujícím obrázku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozložení dat tabulky rozvrhu hodin]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 13: Rozložení dat tabulky rozvrhu hodin&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Buňka rozvrhu hodin může obsahovat více informačních buněk. To proto, že jedna vyučovací hodina může být vyučována více učiteli, ve stejné místnosti může být více studijních kruhů, studijní kruh je rozdělen na skupiny, atd. &lt;br /&gt;
&lt;br /&gt;
Každá informační buňka obsažená v&amp;amp;nbsp;jedné buňce tabulky rozvrhu hodin tedy charakterizuje výuku ve stejný časový okamžik a pro různé účastníky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ovládání rozvrhu hodin zajišťuje třída TimetableActivity pomocí třídy MyFiltr a implementací, které jsou znázorněny na schématu č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je vykreslený rozvrh hodin. Snímek byl pořízen ze zařízení Nexus 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vykreslený rozvrh hodin, Nexus 7]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 14: Vykreslený rozvrh hodin, Nexus 7&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na předcházejícím obrázku je zobrazena aplikace EPI rozvrh s&amp;amp;nbsp;vykresleným rozvrhem hodin a ovládacími prvky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček popups ==&lt;br /&gt;
Za běhu aplikace nastávají situace, kdy je potřeba informovat uživatele, nebo od něj vyžádat vstup. To se provádí pomocí dialogů, což jsou vyskakovací okna. Veškeré dialogy v&amp;amp;nbsp;rámci aplikace rozvrhu hodin jsou umístěny v&amp;amp;nbsp;tomto balíčku.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku popups]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 11: Diagram balíčku popups&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíček popups se skládá ze dvou tříd MyFiltr a Detail, výčtového typu enum s&amp;amp;nbsp;názvem Filtr a rozhraní PopupCompleteListener. Třída MyFiltr pracuje s&amp;amp;nbsp;instancí rozhraní PopupCompleteListener a s&amp;amp;nbsp;instancí výčtového typu s&amp;amp;nbsp;názvem Filtr. Třída Detail je potomkem systémové třídy Dialog a pracuje s&amp;amp;nbsp;instancemi tříd CellData a TimetableTyp. Všechny popisované vazby jsou znázorněny na schématu č. 11.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detail informační buňky z rozvrhu hodin ===&lt;br /&gt;
Informační buňka z&amp;amp;nbsp;rozvrhu hodin obsahuje spoustu informací, které nejsou zobrazeny v&amp;amp;nbsp;rozvrhu hodin. Pro jejich zobrazení je tedy použit dialog vyvolaný kliknutím na informační buňku, jenž je graficky upravený tak, aby v&amp;amp;nbsp;něm byly požadované informace srozumitelně a jednoduše zobrazeny, což je obrovská výhoda oproti stávajícímu rozvrhu hodin, který je dostupný na webových stránkách informačního systému školy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zobrazení dialogu zajišťuje třída Detail, která je potomkem třídy android.app.Dialog, což zajišťuje vyvolání dialogu po kliknutí na grafický prvek ''View'', jež je předán jako parametr při vytváření instance třídy Detial. Při vytváření instance se také předávají data pro zobrazení ve formě objektu CellData a hodnota výčtového typu TimetableTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objekt CellData obsahuje veškeré informace určené k&amp;amp;nbsp;zobrazení v&amp;amp;nbsp;rámci dané buňky. Způsob zobrazení dat pro studenty, učitele a místnosti je rozdílný, i když jsou informace stejného charakteru, protože pro studenty je prioritní jiný typ informace než pro učitele nebo místnosti. K&amp;amp;nbsp;rozlišení způsobu zobrazení slouží výčtový typ s&amp;amp;nbsp;názvem TimetableTyp, jehož hodnota je předána právě při vytváření instance třídy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konstruktor třídy Detail:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Detail(Context context, View view, CellData  cellData, TimetableType timTyp) {&lt;br /&gt;
super(context);&lt;br /&gt;
this.timTyp = timTyp;&lt;br /&gt;
this.cellData = cellData;&lt;br /&gt;
this.addListener(view);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;konstruktoru se převzaté objekty timTyp a cellData uloží do ekvivalentních proměnných patřících třídě Detail. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Metoda addListener(View):&lt;br /&gt;
private void addListener(View view) {&lt;br /&gt;
view.setOnClickListener(new View.OnClickListener() {&lt;br /&gt;
public void onClick(View v) {&lt;br /&gt;
Detail.this.show();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, metoda addListener(View) nastaví na převzatý objekt posluchače, který se spustí po kliknutí. Posluchač poté v&amp;amp;nbsp;případě kliknutí na objekt View zobrazí dialog a zavolá metodu onCreate(), jež byla převzata od rodičovského prvku. V&amp;amp;nbsp;metodě onCreate() se pak zobrazí data a způsob zobrazení ovlivňuje hodnota globální proměnné timTyp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zobrazení rozvrhu hodin pomocí filtru ===&lt;br /&gt;
Každý uživatel aplikace si může zobrazit nejenom svůj rozvrh hodin, ale může si také zobrazit rozvrh hodin pro jednotlivé studenty, učitele a místnosti. Tuto vlastnost aplikace zajišťuje třída MyFiltr, která je potomkem systémové třídy Dialog, což zajišťuje, že se MyFiltr zobrazí jako dialog. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MyFiltr obsahuje tři grafická políčka a z&amp;amp;nbsp;toho dvě jsou výběrová tlačítka. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání. První políčko udává, jedná-li se o rozvrh hodin pro učitele, místnost nebo pro studijní kruh. Druhé výběrové tlačítko obsahuje zkratky učitelů, místností nebo studijních kruhů. Třetí políčko slouží k&amp;amp;nbsp;ručnímu zadávání zkratky s&amp;amp;nbsp;automatickou nápovědou. Po zadání dvou písmen se zobrazí nabídka, která je ovlivněná výběrem prvního políčka. V&amp;amp;nbsp;této nabídce je seznam zkratek pro učitele, místnosti nebo studijní kruhy, jejichž první dvě písmena byla zadána.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První výběrové tlačítko tedy vždy obsahuje hodnoty učitel, místnost a studijní kruh. Výběrem tohoto políčka se ovlivní druhé výběrové políčko a třetí políčko pro ruční zadání s&amp;amp;nbsp;nápovědou. Posledním grafickým prvkem je tlačítko, jehož zmáčknutí zavře zobrazovaný dialog a zobrazí rozvrh hodin podle zadaných kriterií. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vytvořením instance třídy se nastaví vzhled dialogu na předem vytvořený design, který je definovaný v&amp;amp;nbsp;XML souboru s&amp;amp;nbsp;názvem my_filtr.xml. Dále dojde k&amp;amp;nbsp;přednastavení výběru tak, že se vybere první studijní kruh v&amp;amp;nbsp;seznamu. Uživatel tuto volbu pak může kdykoliv změnit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Balíček widgets ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Aplikace rozvrhu hodin poskytuje miniaplikaci na plochu, což je minimalizovaná verze aplikace zpracovaná tak, aby ji bylo možné zobrazit na domovské obrazovce zařízení. [33]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minimalizovaná aplikace se zobrazuje ve formě seznamu vyučovacích hodin za období jednoho dne. Každých 30 minut se seznam aktualizuje a v&amp;amp;nbsp;případě, že dojde k&amp;amp;nbsp;ukončení některé výuky, odstraní se také ze seznamu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram balíčku widget]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 12: Diagram balíčku widget&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dle schématu č. 12 se tato třída skládá z&amp;amp;nbsp;balíčků ViewsFactory, WidgetProvider a WidgetService. WidgetProvider se stará o zobrazení miniaplikace a její správu. ViewsFactory pomocí WidgetService naplní miniaplikaci hodnotami. Vzhled miniaplikace se skládá z hlavičky, kde je název aktuálního dne a datum dne. Dále jej tvoří ListView'','' který slouží k&amp;amp;nbsp;zobrazení jednotlivých dat rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzhled widgetu]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 15: Vzhled widgetu&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět na obrázku č. 15, widget se skládá z&amp;amp;nbsp;několika prvků LinearLayout určující rozmístění vizuálních prvků. Jedná se především o prvky TextView, které jsou umístěny ve vertikálně orientovaném prvku, což způsobuje, že jsou tyto prvky TextView umístěny pod sebou. Dále následuje nejdůležitější část miniaplikace a to je ListView. ListView je posuvný seznam obsahující prvky rozvrhu hodin. Miniaplikaci je možné zobrazit pouze na domovské obrazovce zařízení, jehož verze operačního systému je vyšší než API 11.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Testov%C3%A1n%C3%AD_funkcionality_aplikace_EPIrozvrh_a_uveden%C3%AD_do_provozu&amp;diff=11793</id>
		<title>Testování funkcionality aplikace EPIrozvrh a uvedení do provozu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Testov%C3%A1n%C3%AD_funkcionality_aplikace_EPIrozvrh_a_uveden%C3%AD_do_provozu&amp;diff=11793"/>
		<updated>2013-09-08T19:08:33Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Vytvorená stránka „{{Praca_uvod|6|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a mož...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|6|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
V následující části budou rozebrány a provedeny jednotlivé testy, které budou vyhodnoceny následující stupnicí: vyhovující (A), vyhovující s drobnými nedostatky (B) a nevyhovující (C). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definice základních testů kvality ==&lt;br /&gt;
Podle dokumentu „''App Quality''“, který byl popsán v&amp;amp;nbsp;kapitole 1.6.4, se definují následující množiny testů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Design aplikace a interakce s uživatelem'''&lt;br /&gt;
&lt;br /&gt;
Testy v této kategorii jsou rozděleny na několik podkategorií. V následující tabulce budou uvedeny jednotlivé testy spolu s jejich kódovým označením, které bude použito při vyhodnocení testů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První sloupec tabulky definuje část aplikace, která bude testována v&amp;amp;nbsp;rámci testu interakce s&amp;amp;nbsp;uživatelem. Další sloupec podrobněji popisuje daný test. Třetí sloupec obsahuje kódové označení testu, které bude použito ve vyhodnocení testování aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Podkategorie'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Standardní testy&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace splňuje konstrukční pokyny platformy Android a používá běžné vzory a ikony pro uživatelské rozhraní:&lt;br /&gt;
&lt;br /&gt;
# Aplikace nenaruší funkčnost systémových tlačítek&lt;br /&gt;
# Aplikace nenahrazuje standardní systémové ikony&lt;br /&gt;
# Aplikace nepoužívá ikony, které by mohli být matoucí&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=3| Navigace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace podporuje standardní systémové tlačítko zpět a nenahrazuje toto tlačítko jiným.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-3&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Všechny dialogy jdou zrušit systémovým tlačítkem zpět&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-3&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zmáčknutí systémového tlačítka domů v&amp;amp;nbsp;jakékoliv části aplikace zobrazí domovskou obrazovku.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-1&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Upozornění&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Upozornění dodržují zásady platformy Android&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-11&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 12: Definice testů pro interakci s uživatelem&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Funkcionalita '''&lt;br /&gt;
&lt;br /&gt;
Řada těchto testů ověřuje, zda aplikace splňuje základní podmínky pro běh na OS Android, jestli nedochází k&amp;amp;nbsp;ovlivnění základních funkcí OS nebo nedochází k&amp;amp;nbsp;jejich potlačení. Následující tabulka popisuje jednotlivé testy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Podkategorie'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Oprávnění&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace vyžaduje pouze minimální oprávnění&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-11&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Umístění aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace nevykazuje chyby, pokud je nainstalována na SD kartu.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| SD-1&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Audio&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace nepřehrává zvuky, pokud je vypnutá obrazovka zařízení.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-7&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=3| Uživatelské prostředí a vzhled&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Pokud je možné, aplikace podporuje orientaci obrazovky na výšku i šířku (portrait a landscape)&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-5&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace používá celou obrazovku v&amp;amp;nbsp;obou směrech a nedochází k&amp;amp;nbsp;deformaci obrazu&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-5&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace rychle zpracovává přechody mezi orientacemi obrazovky.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-5&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Stav aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace nepřeruší spuštěné služby je li v&amp;amp;nbsp;pozadí&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-6&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace správně zachovává a obnovuje stav aplikace a uživatelský pokrok aplikací. Například při změně orientace obrazovky nebo přijmutí telefonního hovoru.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-1,&lt;br /&gt;
&lt;br /&gt;
CR-3,&lt;br /&gt;
&lt;br /&gt;
CR-5&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 13: Definice testů pro správnou funkcionalitu&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Splnění kritérií v&amp;amp;nbsp;předcházející tabulce zajistí, že aplikace svým chováním neovlivní jiné části OS Android. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Výkon a stabilita '''&lt;br /&gt;
&lt;br /&gt;
Pro zajištění vysokého uživatelského hodnocení je třeba, aby aplikace pracovala správně na různých velikostech obrazovek. Uživatel také očekává rychlost aplikace, rychlé reakce, dostatečný výkon a stabilitu aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující tabulka definuje jednotlivé testy z&amp;amp;nbsp;této kategorie. Tyto testy budou dále specifikovány a provedeny. Provedené testy budou vyhodnoceny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Podkategorie'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Stabilita&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace se chová správně na všech zařízeních a nedochází k&amp;amp;nbsp;pádu nebo zamrzání aplikace.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Výkon&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace pracuje rychle a poskytuje zpětnou vazbu pro uživatele. V&amp;amp;nbsp;případě že aplikace potřebuje více než dvě vteřiny pro zpracování nějaké akce, měla by obsahovat ukazatel průběhu. &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR&lt;br /&gt;
&lt;br /&gt;
SD-1&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Vizuální kvalita&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace zobrazí grafické prvky bez znatelného zkreslení.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 14: Definice testů výkonu a stability&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Splnění kritérií v&amp;amp;nbsp;předcházející tabulce zajistí, že aplikace je spustitelná na všech zařízeních s&amp;amp;nbsp;verzí OS Android, pro které byla aplikace předurčena.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Obchod Play'''&lt;br /&gt;
&lt;br /&gt;
Pro zvětšení počtu instalací aplikace je třeba správně vytvořit marketing aplikace, tedy obsahovou stránku prezentace na obchodě Play. Tato sada testů je důležitá pro samotné publikování aplikace na Google Play. Google Play je oficiální místo, ze&amp;amp;nbsp;kterého je možné instalovat aplikace do mobilního zařízení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Podkategorie'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Politika&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace striktně dodržuje podmínky Google Play a neobsahuje nevhodný obsah.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-1,&lt;br /&gt;
&lt;br /&gt;
GP-2,&lt;br /&gt;
&lt;br /&gt;
GP-3&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Detail aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace disponuje vysoce kvalitním vzhledem.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-1&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatelská podpora&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Google Play poskytuje službu uživateli nahlásit chybu, pokud není chyba ojedinělá, vývojář aplikace by měl ohlášené chyby odstranit.&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-1&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 15: Definice testů pro možnost publikování aplikace&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Splněním kritérií z&amp;amp;nbsp;předcházející tabulky se zvýší počet stažení a minimalizuje se riziko, že bude aplikace z&amp;amp;nbsp;Google Play odstraněna.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testování základních parametrů kvality ==&lt;br /&gt;
Před testováním aplikace byl definován testovací scénář sestávající z jednotlivých testů z předcházející podkapitoly. Při tvorbě tohoto scénáře byly na základě známých obecných testů vytvořeny konkrétní testy, které jsou popsány v následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Typ testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=11| Standardní testy&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zmáčknutí navigačního tlačítka domů ve všech částech App&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Přepnutí do jiné aplikace ve všech částech testované App&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-3&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zmáčknutí navigačního tlačítka zpět ve všech částech App&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-5&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Otočení orientace obrazovky ve všech částech aplikace&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-6&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Přepnutí do jiné App a kontrola zda běží nějaké služby&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-7&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zmáčknutí vypínacího tlačítka a poté návrat zpět do App&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-8&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Při spuštěné App se telefon uspí a poté se probudí.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-9&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Vysunutí a zasunutí klávesnice (pouze u některých zařízení)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-10&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Pokud má zařízení HDMI port, je nutné jej vyzkoušet s&amp;amp;nbsp;App&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-11&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Spusť akci, která vyvolá notifikaci &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-12&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Ověření zda jsou všechny oprávnění potřebné&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Instalace na kartu&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| SD-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Přesunutí App na paměťovou kartu pokud to aplikace povoluje&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Google play&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Kontrola všech uvedených údajů o App v&amp;amp;nbsp;konzoli pro vývojáře&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Kontrola zda jsou uvedeny náhledy aplikace &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 16: Testovací scénář I&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka definuje tři typy testů. Standardní testy s&amp;amp;nbsp;kódovým označením CR testují aplikaci na chyby vzniklé běžným používáním mobilního zařízení. Dalším typem testů je test instalace na paměťovou kartu. Jedná se o sérii testů s&amp;amp;nbsp;kódovým označením SD. Posledním typem testu je testování publikace na Google Play s&amp;amp;nbsp;kódovým označením testů GP. Po otestování aplikace sérií testů, kterou definuje předchozí tabulka, by aplikace neměla vykazovat žádné chyby ovlivňující chod zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace byla testovaná na reálných a virtuálních zařízeních&amp;lt;ref name=&amp;quot;ftn1&amp;quot;&amp;gt; Virtuální android zařízení je systém android spuštěn v emulátoru. Při vytváření virtuálního android zařízení je možnost vybrat si vlastnosti hardwaru (RAM, SDD, velikost displeje) a verzi operačního systému.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ref&amp;gt;. Při testování byly použity různé verze OS Android. Přehled použitých verzí OS Android je v následující tabulce. V&amp;amp;nbsp;této tabulce jsou v&amp;amp;nbsp;prvním sloupci označeny jednotlivá zařízení, která byla testována.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zkratka AVD před zařízením značí, že se jedná o virtuální zařízení. Avšak tato virtuální zařízení jsou plnohodnotnou instalací OS Android. Následující sloupce označují verzi OS Android. U každého zařízení je křížkem označena instalovaná verze OS Android.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Zařízení'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''2.1'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''2.3'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''3.2'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''4.0'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''4.1'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''4.2'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AVD Nexus S&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AVD Nexus One&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AVD Samsung Galaxy Nexus&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AVD Nexus 7&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Samsung Galaxy mini&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Samsung Galaxy Nexus&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Nexus 7&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Asus Transformer pad TF300&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Acer A510&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Acer Iconia Tab A510&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 17: Zařízení pro testování&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Celkový počet testovaných zařízení je 10. Každé toto zařízení bylo testováno všemi testy. Souhrn všech hodnocení je zanesen do následující tabulky, kde hodnocení (A) znamená, že test proběhl správně na všech testovaných zařízeních. Hodnocení (B) je u testu, u kterého došlo k&amp;amp;nbsp;chybě, ale chyba byla odstraněna. Nejhorším hodnocením je hodnocení (C) a to znamená, že došlo k&amp;amp;nbsp;chybě, kterou se nepodařilo odstranit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace nebyla testována pouze na zařízeních uvedených v&amp;amp;nbsp;tabulce, ale také na spoustě jiných zařízení. Avšak pouze na zařízeních v&amp;amp;nbsp;tabulce č. 17 byly provedeny veškeré testy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující tabulka obsahuje výsledky hodnocení jednotlivých testů. U každého hodnocení, které je horší než (A), bude uveden krátký popis vzniklých chyb. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Typ'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Hodnocení'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Poznámka'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=12| Standardní testy&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-0&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-3&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-4&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-5&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace ztrácí data otočením obrazovky&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-6&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-7&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-8&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-9&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-10&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| CR-11&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Instalace na SD kartu&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| SD-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zařízení Nexus 7 nemá SD kartu, při pokusu nainstalovat aplikaci na tuto kartu aplikace zamrzla. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Google Play&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Chybí údaje ve slovenském a anglickém jazyce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| GP-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Chybí grafické prvky pro 10“ obrazovky&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 18: Výsledky testovacího scénáře I&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vyhodnocení testů v tabulce č. 18 je rozděleno na tři typy testů. Standardní testy, testy instalace na paměťovou kartu a testy Google Play. Každý typ testu obsahuje množinu testů a každý jednotlivý test v&amp;amp;nbsp;této množině je označen kódem testu. Pomocí tohoto kódového označení byly testy definovány v&amp;amp;nbsp;předcházející tabulce č. 17, na jejímž základě byly testy prováděny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vyhodnocení testů v&amp;amp;nbsp;tabulce č. 18 poukázalo na drobné nedostatky aplikace. Vzniklé chyby nebyly velkého rozsahu, bylo je tedy možné velmi rychle odstranit. Po odstranění chyb byla aplikace těmto testům znovu podrobena. Po opětovném testování se chyby již nevyskytovaly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testování specifických funkcí aplikace'''&lt;br /&gt;
&lt;br /&gt;
Testy v předchozí kapitole byly definovány obecně, aby se daly aplikovat na jakoukoliv aplikaci. Je třeba, aby se definovaly testy specifické pro navrženou aplikaci s důrazem na bezchybnou funkčnost. V tabulce č. 19 jsou popsány tyto specifické testy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Typ testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Testy zabezpečení aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; | Při prvním spuštění aplikace je nutné zadat přístupové údaje. Aplikace bez toho nemůže dále pokračovat&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Na začátku semestru je potřeba znovu zadat přihlašovací údaje&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Test stability a funkčnosti aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-3&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace si po úspěšném přihlášení stáhne data rozvrhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-4&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Pokud neexistuje síťové připojení a je vyžadováno, aplikace na to upozorní&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Test dialogů&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-5&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Dialog zobrazující průběh činnosti. Tento typ dialogu nelze zrušit kliknutím na systémové tlačítko&amp;amp;nbsp;zpět, avšak lze aplikaci opustit systémovým tlačítkem domů. Je automaticky ukončen při úspěšné či neúspěšné dokončení své činnosti.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-6&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informační dialog a dialogy určené pros vstup od uživatele lze zrušit systémovým tlačítkem zpět nebo kliknutím mimo dialog.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 19: Testovací scénář II&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka určuje, jakým způsobem se bude aplikace testovat. Všechny testy jsou kódově označeny a na základě tohoto kódového označení budou testy vyhodnoceny. Tyto aplikační testy zahrnují pouze nejdůležitější části aplikace, u kterých je největší pravděpodobnost selhání. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další tabulka obsahuje výsledky testů uvedených v&amp;amp;nbsp;testovacím scénáři II (tabulka č. 19). Princip hodnocení a testovaná zařízení jsou stejné jako u vyhodnocení předcházejících testů v&amp;amp;nbsp;tabulce č. 18. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Typ'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kód testu'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Hodnocení'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Poznámka'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Testy zabezpečení aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| U zařízení Nexus 7 nebylo možné zadat přihlašovací údaje, chyba byla odstraněna.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Test stability a funkčnosti aplikace&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-3&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-4&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;B&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace neupozorňovala na neexistující síťové připojení&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot; rowspan=2| Test dialogů a jejich správné ukončení&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-5&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| AT-6&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &amp;lt;center&amp;gt;A&amp;lt;/center&amp;gt;&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 20: Výsledky testovacího scénáře II&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vyhodnocení testů v&amp;amp;nbsp;tabulce č. 20 je uspokojivé. Objevilo se pár drobných nedostatků, které byly odstraněny. Po odstranění těchto chyb byla aplikace připravena k&amp;amp;nbsp;publikování na portálu Google Play.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikace byla testována na deseti zařízeních a byla provedena série dvaceti testů. Z&amp;amp;nbsp;toho pět testů odhalilo vzniklé chyby. Všechny tyto vzniklé chyby byly odstraněny a aplikace se podrobila těmto testům znovu. Lze tedy toto testování vyhodnotit za úspěšné a to z&amp;amp;nbsp;toho důvodu, že testování odhalilo chyby, které by jinak zůstali skryty. Aplikace byla po odstranění všech chyb nahrána na Google Play a odtud je možné tuto aplikaci stáhnout pod názvem „EPI rozvrh“. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aplikaci EPI rozvrh testovali také uživatelé v&amp;amp;nbsp;pilotním provozu. Veškeré chyby aplikace, které vznikli u uživatelů v&amp;amp;nbsp;testovacím provozu, byly logovány v&amp;amp;nbsp;konzole pro vývojáře na portálu Google Play. Veškeré takto zaznamenané chyby byly neprodleně odstraněny. Takto vzniklé chyby byly tři a všechny se týkali chyby v&amp;amp;nbsp;aktualizaci rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem této práce bylo analyzovat stávající informační systém EPI, s.r.o. a na základě této analýzy vytvořit aplikaci školního rozvrhu hodin pro mobilní platformu Android, popsat zdrojový kód vytvořené aplikace za pomoci vývojových diagramů a vytvořit návod k použití. &lt;br /&gt;
&lt;br /&gt;
V první části této práce byla analyzována platforma Android v souvislosti s problematikou rozšíření informačního systému EPI, s.r.o. Nejprve byla analyzována architektura platformy Android a poté princip vývoje aplikací. Výsledkem této analýzy je, že tvorba aplikací pro mobilní zařízení se v mnoha věcech liší od vývoje aplikací pro počítače. Jedná se přece jenom o zařízení, které je mnohokrát menší než jakýkoliv stolní počítač nebo notebook. &lt;br /&gt;
&lt;br /&gt;
V další kapitole byl analyzován informační systém EPI, s.r.o. se zaměřením na podrobnou analýzu rozvrhu hodin. Byl analyzován způsob, jakým se ukládají data rozvrhu hodin &lt;br /&gt;
a princip ověření přihlašovacích údajů do školní sítě. Na základě této analýzy byl vytvořen multiplatformní modul pro získání dat z rozvrhu hodin pomocí komunikačního protokolu, který kapitola definuje. Multiplatformní proto, že je možné získat data rozvrhu hodin z jakýchkoliv operačních systémů. &lt;br /&gt;
&lt;br /&gt;
Kapitola číslo tři popisuje, jakým způsobem se postupovalo při návrhu vzhledu a způsobu ovládání aplikace. V této kapitole byl poprvé použit název aplikace, EPI rozvrh, se zdůvodněním, proč byl zvolen právě tento název. Na základě takto navrženého vzhledu byl vytvořen design aplikace, který se od návrhu mírně liší například ikonami aplikace, strukturami tabulky rozvrhu hodin atd.  &lt;br /&gt;
&lt;br /&gt;
Čtvrtá kapitola analyzuje uživatelské prostředky, tedy zařízení, pro která byla aplikace navržena a požadavky uživatelů aplikace. Při analýze uživatelských prostředků se kladl největší důraz na to, aby aplikaci mohlo využívat co nejvíce uživatelů. Dále kapitola definuje architekturu aplikace pomocí diagramu užití a strukturu ukládání dat v aplikaci. Na základě těchto analýz a definic byla vytvořena aplikace rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
V páté kapitole byla popsána vnitřní struktura jednotlivých částí aplikace. Vnitřní struktura aplikace byla definována za pomocí diagramů tříd a popisu nejdůležitějších částí zdrojového kódu. Vnitřní struktura aplikace byla navržena tak, aby bylo snadné aplikaci rozšířit o další funkcionalitu. &lt;br /&gt;
&lt;br /&gt;
Poslední kapitola definuje sady testů, na jejichž základě byla aplikace testována. Také zde byla definována hodnotící stupnice a kritéria pro dosažení jednotlivých stupňů hodnocení. Během testování bylo odhaleno několik chyb, které byly neprodleně odstraněny. Po dokončení tohoto testování byla aplikace publikována na Google Play, odkud je možné ji stáhnout.    &lt;br /&gt;
&lt;br /&gt;
Do informačního systému EPI, s.r.o. byl umístěn rozšiřující modul rozvrhu hodin, který je veřejný a dovoluje aplikaci stahovat data rozvrhu hodin. Modul je multiplatformí, může být tedy využit i v jiných programových konstrukcích pracujících s rozvrhem hodin. Výhodou tohoto modulu je, že nemůže ovlivnit data uložené ve školní databázi.&lt;br /&gt;
&lt;br /&gt;
Aplikace rozvrhu hodin pro OS Android je díky interní databázi velmi užitečnou pomůckou pro všechny studenty i učitele. Je totiž neocenitelné, je-li student nebo učitel někde, kde není možné se připojit k internetu (vlak, kavárna, restaurace) a přitom se může podívat na svůj rozvrh hodin na mobilním zařízení. Doposud si učitelé i studenti rozvrh hodin každý týden tiskli a nosili jej sebou.  &lt;br /&gt;
&lt;br /&gt;
Interní databáze rozvrhu hodin se pravidelně aktualizuje podle nastavení uživatele. V základním nastavení se aplikace aktualizuje každý týden. Aby měl uživatel nad aktualizacemi větší kontrolu, může aplikaci aktualizovat ručně pomocí tlačítka v hlavním menu.    &lt;br /&gt;
&lt;br /&gt;
Tato aplikace je oproti stávající webové aplikaci obohacena o mnoho užitečných funkcí. Aplikace dovoluje uživateli zobrazit detailnější informace o vyučovací hodině, což je pro uživatele nesmírně důležité. Orientování se pouze ve zkratkách nemusí být vždy úplně srozumitelné. Dále je aplikace lokalizována do tří jazyků a to do českého, slovenského &lt;br /&gt;
a anglického. Překlad do slovenského jazyku prováděl rodilý mluvčí a překlad do angličtiny prováděl člověk s certifikátem.&lt;br /&gt;
&lt;br /&gt;
Součástí aplikace je také miniaplikace na plochu, která zobrazuje rozvrh hodin aktuálního dne. Uživatel tedy nemusí přímo spouštět aplikaci, aby zjistil, jaké vyučovací hodiny v daný den má. &lt;br /&gt;
&lt;br /&gt;
Pro co největší rozšíření aplikace byla aplikace EPI rozvrh publikována v Google Play, což je oficiální repositář aplikací pro OS Android společnosti Google. První verze aplikace &lt;br /&gt;
EPI rozvrh s označením v0.5 byla publikována 17. 3. 2013, kdy se začal i testovací provoz aplikace. V rámci testování aplikace byly na základě uživatelských poznámek přidávány nové funkce a odstraňovány chyby. V průběhu testování bylo vydáno 7 verzí. Poslední, stabilní verze má označení v1.0 a je považována za finální verzi.&lt;br /&gt;
&lt;br /&gt;
Podle statistik, které jsou součástí obchodu Play, byla aplikace EPI rozvrh v období od &lt;br /&gt;
17. 3. 2013 do 27. 5. 2013 instalována 159 krát z čehož je 108 aktuálních instalací. &lt;br /&gt;
Z celkového počtu 108 aktivních instalací bylo 56 % instalované na zařízení OS Android verze 4 a 44 % na OS Andoird verze 2. Verze 3 se ve statistikách nevyskytuje, protože se jedná o málo rozšířenou verzi určenou pouze pro tablety.&lt;br /&gt;
&lt;br /&gt;
Další poskytovaný údaj je informace o zemi, ze které byla aplikace instalována. &lt;br /&gt;
Z celkového počtu instalací je 74 % aktivních instalací z České republiky a 26 % ze Slovenska.&lt;br /&gt;
&lt;br /&gt;
Během období testovacího provozu byly velkou pomocí chybové hlášení od uživatelů aplikace. Odesílání chybových hlášení dělá automaticky OS Android v případě, když aplikace padne. Takovým způsobem jsem byl vícekrát upozorněn na chybu, která se při vlastním testování neprojevila. Chyby, které byly ohlášeny, se týkaly nekorektní funkcionality při aktualizaci rozvrhu. Na základě těchto chybových hlášení byla aplikace opravena a na obchod Play byla nahrána nová verze.&lt;br /&gt;
&lt;br /&gt;
Po nahrání nové verze aplikace EPI rozvrh na obchod Play se aplikace automaticky aktualizuje ve všech zařízeních, kde je nainstalována za podmínky že uživatel má &lt;br /&gt;
k dispozici datové připojení.&lt;br /&gt;
&lt;br /&gt;
Po nainstalování aplikace z obchodu Play lze aplikaci ohodnotit bodovým hodnocením od 1 do 5, kde 5 je nejlepší hodnocení. Aplikace EPI rozvrh získala od reálných uživatelů hodnocení 4,60.&lt;br /&gt;
&lt;br /&gt;
Výsledkem bakalářské práce je aplikace EPI rozvrh která je podrobně popsána v této práci. Uživatelský návod k této aplikaci je v [[EPI rozvrh| příloze c. 1]]. &lt;br /&gt;
&lt;br /&gt;
Veškeré cíle této práce byly splněny v plném rozsahu a dokonce byly převýšeny o mnoho vylepšení, které usnadní studentům i učitelům běžný školní den například přidání výpisu online zápisů z výuky po kliknutí na danou vyučovací hodinu. &lt;br /&gt;
&lt;br /&gt;
=Literatura= &lt;br /&gt;
&lt;br /&gt;
# 	MURPHY, M. L. Android 2: průvodce programováním mobilních aplikací. 1. vyd. Brno: Computer Press, 2011, 375 s. ISBN 978-80-251-3194-7.&lt;br /&gt;
# 	BURNETTE, Ed. Hello, Android: introducing Google's mobile development platform. 3rd ed. Raleigh, N.C: Pragmatic Bookshelf, 2010. ISBN 19-343-5656-5.&lt;br /&gt;
#	HEROUT, P. Java - bohatství knihoven. 3. vyd. České Budějovice: Kopp, 2008, 386 s. ISBN 978-80-7232-368-5.	&lt;br /&gt;
#	HEROUT, P. Java a XML. 1. vyd. České Budějovice: Kopp, 2007, 313 s. ISBN 978-80-7232-307-4.&lt;br /&gt;
#	PONKRÁC, M. PHP a MySQL: bez předchozích znalostí: [průvodce pro samouky]. Vyd. 1. Brno: Computer Press, 2007, 221 s. ISBN 978-80-251-1758-3.&lt;br /&gt;
#	MURPHY, M. L. The busy coder's guide to Android development. 2nd ed. United States: CommonsWare, 2009c2008-2009, 443 p. ISBN 978-098-1678-009.&lt;br /&gt;
# 	GILMORE, W. Velká kniha PHP 5 a MySQL: kompendium znalostí pro začátečníky i profesionály. Nové. 3. vyd. Překlad Jan Pokorný. Brno: Zoner Press, 2011, 736 s. Encyklopedie Zoner Press. ISBN 978-80-7413-163-9.&lt;br /&gt;
#	KISZKA, B. 1001 tipů a triků pro jazyk Java.  1. vyd. Brno: Computer Press, 2009, 542 s. ISBN 978-80-251-2467-3.	&lt;br /&gt;
#	PILONE, D. Head first software development. 1st ed. Sebastopol: O'Reilly, 2008, 459 s. Head first series. ISBN 978-0-596-52735-8.&lt;br /&gt;
#	UJBÁNYAI, M. Programujeme pro Android. 1. vyd. Praha: Grada, 2012, 187 s. Grada. ISBN 978-80-247-3995-3.&lt;br /&gt;
#	GARGENTA, M. Learning Android. 1st ed. Sebastopol, Calif: O'Reilly, 2010. ISBN 978-144-9390-501.&lt;br /&gt;
#	Android Architecture – The Key Concepts of Android OS [online]. 2010-2013 [cit. 2012-09-03]. Dostupné z WWW: &amp;lt;http://www.android-app-market.com/android-architecture.html&amp;gt;&lt;br /&gt;
# 	Android Kernel Features [online]. 2011 [cit. 2012-09-15]. Dostupné z WWW: &amp;lt;http://elinux.org/Android_Kernel_Features&amp;gt;&lt;br /&gt;
# 	Devices and Displays [online]. 2012 [cit. 2012-10-04]. Dostupné z WWW: &amp;lt;http://developer.android.com/design/style/devices-displays.html&amp;gt;&lt;br /&gt;
# 	Get the Android SDK [online]. 2013 [cit. 2012-10-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/sdk/index.html&amp;gt;&lt;br /&gt;
# 	Exploring the SDK [online]. 2013 [cit. 2012-10-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/sdk/exploring.html&amp;gt;&lt;br /&gt;
# 	Using the Android Emulator [online]. 2013 [cit. 2012-10-26]. Dostupné z WWW: &amp;lt;http://developer.android.com/tools/devices/emulator.html&amp;gt;&lt;br /&gt;
# 	Managing Virtual Device [online]. 2013 [cit. 2012-11-05]. Dostupné z WWW: &amp;lt;http://developer.android.com/tools/devices/index.html&amp;gt;&lt;br /&gt;
# 	History of Android [online]. 2011-2012 [cit. 2012-11-19]. Dostupné z WWW: &amp;lt;http://www.squidoo.com/android-history&amp;gt;&lt;br /&gt;
# 	Dashboards [online]. 2013 [cit. 2012-11-19]. Dostupné z WWW: &amp;lt;http://developer.android.com/about/dashboards/index.html&amp;gt;&lt;br /&gt;
# 	UI Overview [online]. 2013 [cit. 2012-12-03]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/topics/ui/overview.html&amp;gt;&lt;br /&gt;
# 	Linear Layout [online]. 2013 [cit. 2012-12-06]. Dostupné z WWW:   &amp;lt;http://developer.android.com/guide/topics/ui/layout/linear.html&amp;gt;&lt;br /&gt;
# 	Relative Layout [online]. 2013 [cit. 2012-12-06]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/topics/ui/layout/relative.html&amp;gt;&lt;br /&gt;
# 	Building a Simple User Interface [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/training/basics/firstapp/building-ui.html&amp;gt;&lt;br /&gt;
# 	Vyvíjíme pro Android [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: 	&amp;lt;http://www.svetandroida.cz/vyvijime-pro-android-1-uvod-201103&amp;gt;&lt;br /&gt;
#	Starting an Activity [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW:	&amp;lt;http://developer.android.com/training/basics/activity-lifecycle/starting.html&amp;gt;&lt;br /&gt;
# 	Pausing and Resuming an Activity [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/training/basics/activity-lifecycle/pausing.html&amp;gt;&lt;br /&gt;
# 	Stopping and Restarting an Activity [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/training/basics/activity-lifecycle/stopping.html&amp;gt;&lt;br /&gt;
# 	Recreating an Aktivity [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/training/basics/activity-lifecycle/recreating.html&amp;gt;&lt;br /&gt;
# 	Task and Back Stack [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/components/tasks-and-back-stack.html&amp;gt;&lt;br /&gt;
#	Services [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/components/services.html&amp;gt;&lt;br /&gt;
#	Design Principles [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW:  &amp;lt;http://developer.android.com/design/get-started/principles.html&amp;gt;&lt;br /&gt;
#	Widgets [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW:  &amp;lt;http://developer.android.com/design/patterns/widgets.html&amp;gt;&lt;br /&gt;
# 	UI Overview [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW:  &amp;lt;http://developer.android.com/design/get-started/ui-overview.html&amp;gt;&lt;br /&gt;
# 	Supporting Multiple Screens [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/practices/screens_support.html&amp;gt;&lt;br /&gt;
#	Themes [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/design/style/themes.html&amp;gt;&lt;br /&gt;
#	Navigation with Back and Up [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/design/patterns/navigation.html&amp;gt;&lt;br /&gt;
#	ActionBar [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/guide/topics/ui/actionbar.html&amp;gt;&lt;br /&gt;
#	Patterns ActionBar [online]. 2013 [cit. 2012-12-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/design/patterns/actionbar.html&amp;gt;&lt;br /&gt;
#	App Quality [online]. 2013 [cit. 2013-05-10]. Dostupné z WWW: &amp;lt;http://developer.android.com/distribute/googleplay/quality/index.html&amp;gt;&lt;br /&gt;
# 	Core App Quality Guidelines [online]. 2013 [cit. 2013-04-20]. Dostupné z WWW:	&amp;lt;http://developer.android.com/distribute/googleplay/quality/core.html&amp;gt;&lt;br /&gt;
#	Tablet App Quality Checklist [online]. 2013 [cit. 2013-04-20]. Dostupné z WWW: &amp;lt;http://developer.android.com/distribute/googleplay/quality/tablet.html&amp;gt;&lt;br /&gt;
# 	Improving App Quality After Launch [online]. 2013 [cit. 2013-04-20]. Dostupné z WWW: &amp;lt;http://developer.android.com/distribute/googleplay/strategies/app-quality.html&amp;gt;&lt;br /&gt;
# 	Google Play [online]. 2013 [cit. 2013-04-20]. Dostupné z WWW: &amp;lt;https://play.google.com&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_funkcionality_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11792</id>
		<title>Návrh funkcionality aplikace mobilního rozvrhu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_funkcionality_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11792"/>
		<updated>2013-09-08T17:02:15Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|4|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Před tím než se samotná aplikace pro mobilní telefony začne navrhovat, musí se analyzovat uživatelské prostředky. Uživatelskými prostředky se myslí zařízení, pro které bude aplikace navržena. Platforma Android se využívá na zařízeních v různých verzích. Každá nová verze platformy Android poskytuje nové softwarové možnosti pro návrh aplikací a možnost využití nových hardwarových prostředků. Aplikace pro platformu Android jsou zpětně kompatibilní, to znamená, že aplikace napsaná pro verzi API 8 lze spustit také na zařízeních s verzí API 16, ale spustit aplikaci napsanou pro verzi API 16 na zařízeních s verzí API 8 není možné.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V první řadě se tedy určily hardwarové prostředky nezbytně nutné k běhu celé aplikace. Zjistilo se, že aplikace EPI rozvrh nepotřebuje žádné z novějších hardwarových možností. Pro svou činnost potřebuje pouze připojení k internetu, cože je poskytováno od nejstarších verzí. Softwarové požadavky jsou taktéž minimální.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Při rozhodování pro kterou minimální verzi bude aplikace navržena, hrála největší roli rozšířenost platforem Android mezi lidmi. Platforma Android je k 21. 1. 2013 celosvětově nejrozšířenější ve verzích API 10 - 38.4 %, API 15 - 27.5 %, API 16 - 26.1 %. [20] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architektura rozvrhu hodin ==&lt;br /&gt;
EPI rozvrh je pouze rozhraním, které zpracovává data ze školních serverů, kde jsou uloženy všechny potřebné informace pro sestavení rozvrhu hodin. Tyto informace, neboli data, aplikace ukládá do interní databáze. Poté je vhodně umístí do uživatelského rozhraní tak, aby byly uživateli srozumitelné. Vnější pohled na modelový systém EPI rozvrh je na schématu č. 4, na kterém je diagram případů užití. Hlavním cílem tohoto diagramu je zachycení všech aktérů, kteří komunikují s aplikací. Aktéři nejsou jenom uživatelé aplikace, ale také veškeré prostředky úzce spolupracující s aplikací, tudíž veškeré systémy, aplikace, procesy, služby atd. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram případů užití aplikace EPI rozvrh.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Diagram případů užití aplikace EPI rozvrh&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Případy užití'''&lt;br /&gt;
&lt;br /&gt;
V následujících tabulkách jsou popsány jednotlivé případy užití. V každé tabulce jsou zaznamenáni jednotliví aktéři, kteří mohou využívat popisovaný případ užití. Jeden případ užití může obsluhovat více aktérů. Dále je v tabulce zaznamenán stav aplikace před spuštěním případu užití a stav po spuštění případu užití. V poslední řadě jsou v této tabulce zaznamenány jednotlivé kroky provádějící se po spuštění případu užití. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Nastavení aplikace&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel má spuštěnou aplikaci, je přihlášený a nachází se v hlavím menu aplikace.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Z hlavního menu vybere položku nastavení,&lt;br /&gt;
# Uživatel může změnit přihlašovací údaje do informačního systému EPI, s.r.o., &lt;br /&gt;
# Nastavení automatických aktualizací,&lt;br /&gt;
# Zmáčknutí systémového tlačítka zpět.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace má změněné nastavení&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Scénář případu užití „Nastavení aplikace“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka případu užití (tabulka č. 8) popisuje, jakými kroky se uživatel dostane k nastavení aplikace. Aktérem je uživatel a stav aplikace po dokončení tohoto případu užití je, že je aplikace nastavená a nastavení je okamžitě uplatněno. Není vhodné nastavení aplikace často měnit, protože by mohlo dojít ke špatnému nastavení přihlašovacích údajů a aplikace by se nechovala správně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Přihlásit se&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel poprvé spustil aplikaci&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # na obrazovce je přihlašovací formulář s kolonkami jméno, kontext a heslo, &lt;br /&gt;
# uživatel vyplní formulář svými přihlašovacími údaji do informačního systému EPI, s.r.o.,&lt;br /&gt;
# klikne na tlačítko přihlásit se,&lt;br /&gt;
# aplikace ověří přihlašovací údaje, pokud jsou nesprávné, vrací se k bodu 1. Jinak pokračuje k dalšímu bodu,&lt;br /&gt;
# přihlašovací údaje se uloží do aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel je přihlášený&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Scénář případu užití „Přihlásit se“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Případ užití s názvem „Přihlásit se“, jež charakterizuje tabulka č. 9, určuje, jakými kroky se uživatel přihlásí do aplikace tak, aby ji mohl dále využívat. Bez přihlášení není možné aplikaci jakkoliv používat. Uživatel se může přihlásit, pouze pokud není přihlášený. V opačném případě obrazovka pro přihlášení nelze vyvolat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou uchovány pouze po dobu jednoho školního roku. Spadá-li datum přihlášení do aktuálního školního roku, přihlášení trvá pouze v období tohoto školního roku. Jakmile vyprší platnost přihlášení, znovu se objeví obrazovka, vyžadující přihlášení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aktualizuj rozvrh &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel, Aplikace&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel má spuštěnou aplikaci, je přihlášený a nachází se v hlavím menu aplikace.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Aplikace: V případě, je-li rozvrh zastaralý a jsou nastaveny automatické aktualizace, pokračuje k bodu č. 3,&lt;br /&gt;
# Uživatel: Klikne v hlavním menu na položku aktualizovat,&lt;br /&gt;
# Zaktualizuje databázi rozvrhu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Databáze rozvrhu hodin je zaktualizovaná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Scénář případu užití „Aktualizuj rozvrh“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka č. 10 popisuje případ užití s názvem „Aktualizuj rozvrh“. Aktéři jsou v této tabulce dva a to Uživatel a Aplikace. Aplikace aktualizuje databázi školního rozvrhu na základě nastavení automatických aktualizací. Defaultně je přednastaveno aktualizování po sedmi dnech od poslední aktualizace. Uživatel může aplikaci aktualizovat kliknutím na tlačítko „Aktualizuj“ z hlavního menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zobraz rozvrh hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel je přihlášený a má aktualizovanou databázi rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Uživatel spustí aplikaci, z hlavního menu vybere položku: Zobraz rozvrh hodin,&lt;br /&gt;
&lt;br /&gt;
# Na obrazovce se objeví rozvrh hodin pro přihlášeného studenta, zaměstnance nebo učitele v aktuálním týdnu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Rozvrh hodin je zobrazený&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Scénář případu užití „Zobraz rozvrh hodin“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka případu užití s názvem „Zobraz rozvrh hodin“ popisuje postup jak zobrazit rozvrh hodin. Dodržením tohoto postupu dojde k zobrazení rozvrhu hodin pro přihlášeného uživatele. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Struktura ukládání dat  ==&lt;br /&gt;
Data ze školního serveru jsou v aplikaci EPI rozvrh uloženy, aby bylo možné přistupovat ke školnímu rozvrhu v režimu offline, nicméně také kvůli zachování plynulosti chodu aplikace a školního serveru. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukládané data aplikace EPI rozvrh v mobilním telefonu se dají rozdělit do dvou skupin, a to data rozvrhu hodin a seznamy. Každá skupina používá jiný způsob ukládání dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat rozvrhu hodin ===&lt;br /&gt;
Platforma Android poskytuje možnost využití databázového systému SQLite. Jedná se o malou knihovnu, která se přilinkuje k programu pomocí jednoduchého rozhraní. Každá tato databáze je uložena v souboru, kde se data ukládají za použití jednoduchého primárního klíče. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data rozvrhu hodin jsou uloženy v databázi MYSQL na školním serveru, která je popsána v kapitole 2.1. Stažená data jsou pak uložena v SQLite databázi v mobilním zařízení. Databáze obsahuje tabulku zaznamenávající údaje potřebné ke správnému zobrazení rozvrhu hodin. V následujícím schématu jsou některé ze zaznamenávaných údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Návrh tabulky pro uložení dat aplikace EPI rozvrh.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 2: Návrh tabulky pro uložení dat aplikace EPI rozvrh&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jelikož je databáze rozvrhu hodin v mobilním telefonu velmi rozsáhlá, tak nejsou zobrazeny všechny sloupce na schématu č. 5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Význam sloupců v tabulce my_timetable:&lt;br /&gt;
&lt;br /&gt;
* date - obsahuje datum, ke kterému se vztahuje daný záznam,&lt;br /&gt;
* day_number - nabývá hodnot 0-6 kde 0 symbolizuje pondělí a 6 neděli,&lt;br /&gt;
* abb_teacher - je zkratka učitele, který figuruje v daném záznamu,&lt;br /&gt;
* abb_room - je zkratka místnosti, ve které bude probíhat výuka,&lt;br /&gt;
* abb_subject - je zkratka vyučovaného předmětu,&lt;br /&gt;
* subjekt - název celého vyučovaného předmětu,&lt;br /&gt;
* teacher - tituly, jméno a příjmení učitele,&lt;br /&gt;
* room - celý název místnosti,&lt;br /&gt;
* hour - vyučovací hodina ve které probíhá výuka,&lt;br /&gt;
* number_of_hours - počet vyučovacích hodin,&lt;br /&gt;
* group - skupina pro kterou se vztahuje daný záznam,&lt;br /&gt;
* class - studijní kruh, &lt;br /&gt;
&lt;br /&gt;
=== Ukládání řídících údajů ===&lt;br /&gt;
Přihlášený uživatel se může podívat na rozvrh hodin svých kolegů z ostatních studijních kruhů, učitelů nebo místností. Aby bylo možné zobrazit rozvrh hodin pro některou ze zmiňovaných skupin, musejí se tyto údaje ukládat. Jedná se pouze o zkratky studijních kruhů, učitelů a místností. Jednotlivá data jsou ukládána do více souborů nezávisle na sobě. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznamy se stahují ze školní MYSQL databáze popsané v kapitole 2.1 ve formátu JSON, který je popsán v kapitole 2.2.2. Protože stahované seznamy obsahují pouze jeden typ dat a není potřeba tyto seznamy třídit ani v nich vyhledávat, je zbytečné pro ně vytvářet databázi. Seznamy se tedy vloží do kolekce a ta se následně uloží jako objekt do souboru. Aby bylo možné objekt uložit do souboru, je potřeba ho nejprve serializovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Místo uložení souborů je v souborovém systému, které je vyhrazeno pouze pro aplikaci EPI rozvrh. Toto místo se nachází v /data/data/cz.sajboch.epi_main/. K tomuto adresáři nemá uživatel žádný přístup, protože jej operační systém Android blokuje.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_funkcionality_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11789</id>
		<title>Návrh funkcionality aplikace mobilního rozvrhu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_funkcionality_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11789"/>
		<updated>2013-09-06T09:52:30Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Vytvorená stránka „{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a mož...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Před tím než se samotná aplikace pro mobilní telefony začne navrhovat, musí se analyzovat uživatelské prostředky. Uživatelskými prostředky se myslí zařízení, pro které bude aplikace navržena. Platforma Android se využívá na zařízeních v různých verzích. Každá nová verze platformy Android poskytuje nové softwarové možnosti pro návrh aplikací a možnost využití nových hardwarových prostředků. Aplikace pro platformu Android jsou zpětně kompatibilní, to znamená, že aplikace napsaná pro verzi API 8 lze spustit také na zařízeních s verzí API 16, ale spustit aplikaci napsanou pro verzi API 16 na zařízeních s verzí API 8 není možné.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V první řadě se tedy určily hardwarové prostředky nezbytně nutné k běhu celé aplikace. Zjistilo se, že aplikace EPI rozvrh nepotřebuje žádné z novějších hardwarových možností. Pro svou činnost potřebuje pouze připojení k internetu, cože je poskytováno od nejstarších verzí. Softwarové požadavky jsou taktéž minimální.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Při rozhodování pro kterou minimální verzi bude aplikace navržena, hrála největší roli rozšířenost platforem Android mezi lidmi. Platforma Android je k 21. 1. 2013 celosvětově nejrozšířenější ve verzích API 10 - 38.4 %, API 15 - 27.5 %, API 16 - 26.1 %. [20] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architektura rozvrhu hodin ==&lt;br /&gt;
EPI rozvrh je pouze rozhraním, které zpracovává data ze školních serverů, kde jsou uloženy všechny potřebné informace pro sestavení rozvrhu hodin. Tyto informace, neboli data, aplikace ukládá do interní databáze. Poté je vhodně umístí do uživatelského rozhraní tak, aby byly uživateli srozumitelné. Vnější pohled na modelový systém EPI rozvrh je na schématu č. 4, na kterém je diagram případů užití. Hlavním cílem tohoto diagramu je zachycení všech aktérů, kteří komunikují s aplikací. Aktéři nejsou jenom uživatelé aplikace, ale také veškeré prostředky úzce spolupracující s aplikací, tudíž veškeré systémy, aplikace, procesy, služby atd. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Diagram případů užití aplikace EPI rozvrh.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Diagram případů užití aplikace EPI rozvrh&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Případy užití'''&lt;br /&gt;
&lt;br /&gt;
V následujících tabulkách jsou popsány jednotlivé případy užití. V každé tabulce jsou zaznamenáni jednotliví aktéři, kteří mohou využívat popisovaný případ užití. Jeden případ užití může obsluhovat více aktérů. Dále je v tabulce zaznamenán stav aplikace před spuštěním případu užití a stav po spuštění případu užití. V poslední řadě jsou v této tabulce zaznamenány jednotlivé kroky provádějící se po spuštění případu užití. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Nastavení aplikace&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel má spuštěnou aplikaci, je přihlášený a nachází se v hlavím menu aplikace.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Z hlavního menu vybere položku nastavení,&lt;br /&gt;
# Uživatel může změnit přihlašovací údaje do informačního systému EPI, s.r.o., &lt;br /&gt;
# Nastavení automatických aktualizací,&lt;br /&gt;
# Zmáčknutí systémového tlačítka zpět.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aplikace má změněné nastavení&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Scénář případu užití „Nastavení aplikace“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka případu užití (tabulka č. 8) popisuje, jakými kroky se uživatel dostane k nastavení aplikace. Aktérem je uživatel a stav aplikace po dokončení tohoto případu užití je, že je aplikace nastavená a nastavení je okamžitě uplatněno. Není vhodné nastavení aplikace často měnit, protože by mohlo dojít ke špatnému nastavení přihlašovacích údajů a aplikace by se nechovala správně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Přihlásit se&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel poprvé spustil aplikaci&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # na obrazovce je přihlašovací formulář s kolonkami jméno, kontext a heslo, &lt;br /&gt;
# uživatel vyplní formulář svými přihlašovacími údaji do informačního systému EPI, s.r.o.,&lt;br /&gt;
# klikne na tlačítko přihlásit se,&lt;br /&gt;
# aplikace ověří přihlašovací údaje, pokud jsou nesprávné, vrací se k bodu 1. Jinak pokračuje k dalšímu bodu,&lt;br /&gt;
# přihlašovací údaje se uloží do aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel je přihlášený&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Scénář případu užití „Přihlásit se“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Případ užití s názvem „Přihlásit se“, jež charakterizuje tabulka č. 9, určuje, jakými kroky se uživatel přihlásí do aplikace tak, aby ji mohl dále využívat. Bez přihlášení není možné aplikaci jakkoliv používat. Uživatel se může přihlásit, pouze pokud není přihlášený. V opačném případě obrazovka pro přihlášení nelze vyvolat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přihlašovací údaje jsou uchovány pouze po dobu jednoho školního roku. Spadá-li datum přihlášení do aktuálního školního roku, přihlášení trvá pouze v období tohoto školního roku. Jakmile vyprší platnost přihlášení, znovu se objeví obrazovka, vyžadující přihlášení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Aktualizuj rozvrh &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel, Aplikace&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel má spuštěnou aplikaci, je přihlášený a nachází se v hlavím menu aplikace.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Aplikace: V případě, je-li rozvrh zastaralý a jsou nastaveny automatické aktualizace, pokračuje k bodu č. 3,&lt;br /&gt;
# Uživatel: Klikne v hlavním menu na položku aktualizovat,&lt;br /&gt;
# Zaktualizuje databázi rozvrhu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Databáze rozvrhu hodin je zaktualizovaná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Scénář případu užití „Aktualizuj rozvrh“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
Tabulka č. 10 popisuje případ užití s názvem „Aktualizuj rozvrh“. Aktéři jsou v této tabulce dva a to Uživatel a Aplikace. Aplikace aktualizuje databázi školního rozvrhu na základě nastavení automatických aktualizací. Defaultně je přednastaveno aktualizování po sedmi dnech od poslední aktualizace. Uživatel může aplikaci aktualizovat kliknutím na tlačítko „Aktualizuj“ z hlavního menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zobraz rozvrh hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Aktéři'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Před spuštěním případu užití '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Uživatel je přihlášený a má aktualizovanou databázi rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kroky případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| # Uživatel spustí aplikaci, z hlavního menu vybere položku: Zobraz rozvrh hodin,&lt;br /&gt;
&lt;br /&gt;
# Na obrazovce se objeví rozvrh hodin pro přihlášeného studenta, zaměstnance nebo učitele v aktuálním týdnu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:1pt solid #00000a;border-right:2.25pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Stav po ukončení případu užití'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #00000a;border-bottom:1pt solid #00000a;border-left:2.25pt solid #00000a;border-right:1pt solid #00000a;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Rozvrh hodin je zobrazený&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Scénář případu užití „Zobraz rozvrh hodin“&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka případu užití s názvem „Zobraz rozvrh hodin“ popisuje postup jak zobrazit rozvrh hodin. Dodržením tohoto postupu dojde k zobrazení rozvrhu hodin pro přihlášeného uživatele. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Struktura ukládání dat  ==&lt;br /&gt;
Data ze školního serveru jsou v aplikaci EPI rozvrh uloženy, aby bylo možné přistupovat ke školnímu rozvrhu v režimu offline, nicméně také kvůli zachování plynulosti chodu aplikace a školního serveru. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ukládané data aplikace EPI rozvrh v mobilním telefonu se dají rozdělit do dvou skupin, a to data rozvrhu hodin a seznamy. Každá skupina používá jiný způsob ukládání dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat rozvrhu hodin ===&lt;br /&gt;
Platforma Android poskytuje možnost využití databázového systému SQLite. Jedná se o malou knihovnu, která se přilinkuje k programu pomocí jednoduchého rozhraní. Každá tato databáze je uložena v souboru, kde se data ukládají za použití jednoduchého primárního klíče. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data rozvrhu hodin jsou uloženy v databázi MYSQL na školním serveru, která je popsána v kapitole 2.1. Stažená data jsou pak uložena v SQLite databázi v mobilním zařízení. Databáze obsahuje tabulku zaznamenávající údaje potřebné ke správnému zobrazení rozvrhu hodin. V následujícím schématu jsou některé ze zaznamenávaných údajů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Návrh tabulky pro uložení dat aplikace EPI rozvrh.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 2: Návrh tabulky pro uložení dat aplikace EPI rozvrh&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jelikož je databáze rozvrhu hodin v mobilním telefonu velmi rozsáhlá, tak nejsou zobrazeny všechny sloupce na schématu č. 5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Význam sloupců v tabulce my_timetable:&lt;br /&gt;
&lt;br /&gt;
* date - obsahuje datum, ke kterému se vztahuje daný záznam,&lt;br /&gt;
* day_number - nabývá hodnot 0-6 kde 0 symbolizuje pondělí a 6 neděli,&lt;br /&gt;
* abb_teacher - je zkratka učitele, který figuruje v daném záznamu,&lt;br /&gt;
* abb_room - je zkratka místnosti, ve které bude probíhat výuka,&lt;br /&gt;
* abb_subject - je zkratka vyučovaného předmětu,&lt;br /&gt;
* subjekt - název celého vyučovaného předmětu,&lt;br /&gt;
* teacher - tituly, jméno a příjmení učitele,&lt;br /&gt;
* room - celý název místnosti,&lt;br /&gt;
* hour - vyučovací hodina ve které probíhá výuka,&lt;br /&gt;
* number_of_hours - počet vyučovacích hodin,&lt;br /&gt;
* group - skupina pro kterou se vztahuje daný záznam,&lt;br /&gt;
* class - studijní kruh, &lt;br /&gt;
&lt;br /&gt;
=== Ukládání řídících údajů ===&lt;br /&gt;
Přihlášený uživatel se může podívat na rozvrh hodin svých kolegů z ostatních studijních kruhů, učitelů nebo místností. Aby bylo možné zobrazit rozvrh hodin pro některou ze zmiňovaných skupin, musejí se tyto údaje ukládat. Jedná se pouze o zkratky studijních kruhů, učitelů a místností. Jednotlivá data jsou ukládána do více souborů nezávisle na sobě. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seznamy se stahují ze školní MYSQL databáze popsané v kapitole 2.1 ve formátu JSON, který je popsán v kapitole 2.2.2. Protože stahované seznamy obsahují pouze jeden typ dat a není potřeba tyto seznamy třídit ani v nich vyhledávat, je zbytečné pro ně vytvářet databázi. Seznamy se tedy vloží do kolekce a ta se následně uloží jako objekt do souboru. Aby bylo možné objekt uložit do souboru, je potřeba ho nejprve serializovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Místo uložení souborů je v souborovém systému, které je vyhrazeno pouze pro aplikaci EPI rozvrh. Toto místo se nachází v /data/data/cz.sajboch.epi_main/. K tomuto adresáři nemá uživatel žádný přístup, protože jej operační systém Android blokuje.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_tabulky_pro_ulo%C5%BEen%C3%AD_dat_aplikace_EPI_rozvrh.png&amp;diff=11788</id>
		<title>Súbor:Návrh tabulky pro uložení dat aplikace EPI rozvrh.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_tabulky_pro_ulo%C5%BEen%C3%AD_dat_aplikace_EPI_rozvrh.png&amp;diff=11788"/>
		<updated>2013-09-06T09:52:12Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_p%C5%99%C3%ADpad%C5%AF_u%C5%BEit%C3%AD_aplikace_EPI_rozvrh.png&amp;diff=11787</id>
		<title>Súbor:Diagram případů užití aplikace EPI rozvrh.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Diagram_p%C5%99%C3%ADpad%C5%AF_u%C5%BEit%C3%AD_aplikace_EPI_rozvrh.png&amp;diff=11787"/>
		<updated>2013-09-06T09:51:43Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_vzhledu_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11786</id>
		<title>Návrh vzhledu aplikace mobilního rozvrhu</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_vzhledu_aplikace_mobiln%C3%ADho_rozvrhu&amp;diff=11786"/>
		<updated>2013-09-06T09:47:36Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Vytvorená stránka „{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a mož...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Vzhled aplikace mobilního rozvrhu by se měl co nejvíce podobat již zavedenému webovému školnímu rozvrhu kvůli snadnému a intuitivnímu ovládání. Dále by měl zachovat ovládací prvky pro zobrazení rozvrhu, jako je například filtr pro výběr učitele, studenta nebo místnosti a kalendář k výběru data, ve kterém se má daný rozvrh zobrazit. S možnostmi mobilních technologií bude mít mobilní aplikace pro školní rozvrh rozšířenou funkcionalitu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Návrh vzhledu aplikace a název ==&lt;br /&gt;
Název aplikace tohoto rozšíření informačního systému EPI, s.r.o. je „EPI rozvrh“. Dále již bude používán pouze tento název. Tento název byl vytvořen tak, aby byl snadno zapamatovatelný a bylo jej možné vyhledat pomocí následujících klíčových slov: EPI, rozvrh hodin, EPI rozvrh.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Návrh vzhledu a funkčního designu aplikace EPI rozvrh probíhal v následujících krocích:&lt;br /&gt;
&lt;br /&gt;
* náčrt funkčního designu, &lt;br /&gt;
* tvorba grafických prvků a ikon v grafickém editoru,&lt;br /&gt;
* tvorba layoutu jednotlivých funkčních prvků.&lt;br /&gt;
&lt;br /&gt;
Návrh funkčního vzhledu aplikace EPI rozvrh probíhal za použití ''mockup'' návrhu. ''Mockup'' je model zařízení, který se používá pro demonstraci. U aplikací se používá k demonstraci funkčních prvků, přechodů mezi obrazovkami a celkovému nastínění vzhledu v kombinaci s funkcionalitou aplikace. Je to hrubý návrh, který nezachycuje veškeré detaily, ale zachycuje pouze kostru, která se v průběhu vývoje aplikace často změní. ''Mockup'' slouží vývojáři aplikace pro vytvoření si určité představy o tom, jakým způsobem se bude aplikace dále vyvíjet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPI rozvrh se skládá z hlavního menu, kde jsou umístěny prozatím tři položky reprezentované ikonami s popiskem pro snazší orientaci. Prozatím proto, že se v průběhu vývoje aplikace může počet položek změnit. Tyto položky se nazývají rozvrh hodin, o aplikaci a nastavení, viz obrázek č. 9. Na obrazovce hlavního menu je také ''ActionBar'', který neobsahuje žádné ovládací prvky, ale obsahuje pouze ikonu s logem a název.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po kliknutí na položku rozvrh hodin se zobrazí rozvrh hodin v aktuálním týdnu pro přihlášeného uživatele. Na obrazovce bude tabulka s rozvrhem hodin, kde v prvním levém sloupci budou zkratky jednotlivých dnů a na prvním řádku budou čísla hodin s časem začátku a konce hodiny, viz obrázek č. 9. Pokud se na této obrazovce zmáčkne systémové tlačítko „Zpět“, EPI rozvrh přejde zpět do hlavního menu. Na následujících obrázcích bude vždy zeleně znázorněn postup aplikací, červeně bude znázorněn návrat zpět. Vyplněným kruhem stejné barvy bude znázorněno kliknutí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na obrazovce rozvrhu hodin je také ''ActionBar'', který mimo loga obsahuje číslo právě zobrazovaného týdne a další ovládací prvky. Ovládací prvky jsou: další, předchozí a další ovládací prvky se skrývají pod rozbalovacím menu, jež reprezentují tři tečky v pravé části ''ActionBar''. Ovládací prvek „Další“ zobrazí rozvrh hodin, který je právě zobrazovaný pro následující týden. Oproti tomu ovládací prvek „Předchozí“ zobrazí rozvrh hodin právě zobrazovaného rozvrhu hodin pro předcházející týden. Na obrázku č. 9 jsou tyto přechody mezi jednotlivými obrazovkami znázorněny. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Mockup návrh EPI rozvrh pro API 11 a větší.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 1: ''Mockup'' návrh EPI rozvrh pro API 11 a větší.&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V rozbalovacím menu se nachází ovládací prvky s názvy „Zadej datum“ a „Filtr“, viz obrázek č. 10. Tyto ovládací prvky slouží k ovlivnění obsahu rozvrhu hodin. Principielně dojde po kliknutí na některý z těchto ovládacích prvků k vyvolání dialogu pro upřesnění provedené změny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kliknutím na „Filtr“ dojde k vyvolání dialogu (obrázek č. 10 obrazovka č. 3), ve kterém jsou tři položky. Filtr slouží uživateli k výběru kritérií pro zobrazení rozvrhu hodin. První položka se nazývá „Volba“, kde si uživatel může vybrat ze tří položek: třída, učitel a místnost. Na základě zvolení jedné ze tří položek dojde k ovlivnění druhé a třetí položky. Tedy v položce „Seznam“ bude buď seznam učitelů, místností nebo studijních kruhů. Poté kliknutím na tlačítko „Zobraz rozvrh hodin“ obrazovka přejde zpět na rozvrh hodin (obrázek č. 10, obrazovka č. 1) a dojde k zobrazení rozvrhu na základě výběru. Poslední, tedy třetí, položka, nazývající se „Zadej ručně“, slouží k zadání zkratky učitele, místnosti či studijního kruhu, což ovlivňuje výběr položky s názvem „Volba“. Mezi druhou a třetí volbou si uživatel vybere pomocí ''RadioButton'', nacházející se po pravé straně u druhé a třetí volby.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Mockup návrh EPI rozvrh v kombinaci s filtrem a zadej datum.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 2: Mockup návrh EPI rozvrh v kombinaci s filtrem a zadej datum.&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teď zpět k obrazovce rozvrhu hodin a rozbalovacímu menu. Kline-li uživatel na „Zadej datum“, dojde k vyvolání dialogu s kalendářem (obrázek č. 10, obrazovka č. 2). Výběrem data v tomto kalendáři a kliknutím na tlačítko „Hotovo“ dojde k návratu k předchozí obrazovce, na které bude zobrazený rozvrh hodin pro zvolené datum. Předchozí výběr z filtru však zůstane zachován. To znamená, že jestliže vybere uživatel ve filtru učitele se zkratkou XX a následně vybere datum, pro který má být rozvrh zobrazen, bude zobrazen rozvrh hodin pro učitele se zkratkou XX ve vybraném datu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dojde-li ke zmáčknutí tlačítka „Zpět“ nebo kliknutí mimo dialog pro výběr data nebo filtru, zobrazí se předtím zobrazovaný rozvrh hodin beze změn.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Návrh nastavení EPI rozvrh pro API 11 a větší.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 3: Návrh nastavení EPI rozvrh pro API 11 a větší.&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další položkou na hlavní obrazovce (obrázek č. 11, obrazovka č. 1) je nastavení. Klikne-li uživatel na tuto položku, aplikace přejde na obrazovku s číslem 2, kde se nachází nastavení aplikace, ve kterém lze nastavit celou řadu vlastností a dějů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lze zde nastavit, zda se má aplikace aktualizovat automaticky, anebo až po kliknutí na tlačítko „Aktualizovat“. Dále je zde položka pro nastavení četnosti aktualizací. To znamená, jak často se má aplikace aktualizovat, například denně, každý druhý den anebo každý týden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Také jsou zde přihlašovací údaje do školního systému, avšak jsou viditelné pouze dvě položky a to přihlašovací jméno a kontext. Položka heslo není uživateli zobrazena, aby nedošlo k&amp;amp;nbsp;zneužití těchto údajů třetí osobou.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_nastaven%C3%AD_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11785</id>
		<title>Súbor:Návrh nastavení EPI rozvrh pro API 11 a větší.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_nastaven%C3%AD_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11785"/>
		<updated>2013-09-06T09:47:13Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Návrh nastavení EPI rozvrh pro API 11 a větší.jpg“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_v_kombinaci_s_filtrem_a_zadej_datum.jpg&amp;diff=11784</id>
		<title>Súbor:Mockup návrh EPI rozvrh v kombinaci s filtrem a zadej datum.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_v_kombinaci_s_filtrem_a_zadej_datum.jpg&amp;diff=11784"/>
		<updated>2013-09-06T09:47:10Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Mockup návrh EPI rozvrh v kombinaci s filtrem a zadej datum.jpg“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11783</id>
		<title>Súbor:Mockup návrh EPI rozvrh pro API 11 a větší.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11783"/>
		<updated>2013-09-06T09:47:08Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Mockup návrh EPI rozvrh pro API 11 a větší.jpg“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11782</id>
		<title>Súbor:Mockup návrh EPI rozvrh pro API 11 a větší.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11782"/>
		<updated>2013-09-06T09:41:19Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_v_kombinaci_s_filtrem_a_zadej_datum.jpg&amp;diff=11781</id>
		<title>Súbor:Mockup návrh EPI rozvrh v kombinaci s filtrem a zadej datum.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Mockup_n%C3%A1vrh_EPI_rozvrh_v_kombinaci_s_filtrem_a_zadej_datum.jpg&amp;diff=11781"/>
		<updated>2013-09-06T09:41:17Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_nastaven%C3%AD_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11780</id>
		<title>Súbor:Návrh nastavení EPI rozvrh pro API 11 a větší.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:N%C3%A1vrh_nastaven%C3%AD_EPI_rozvrh_pro_API_11_a_v%C4%9Bt%C5%A1%C3%AD.jpg&amp;diff=11780"/>
		<updated>2013-09-06T09:41:03Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11779</id>
		<title>Analýza informačního systému rozvrhu a možnosti zpracování dat</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11779"/>
		<updated>2013-09-06T09:29:58Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Efektivita informačního systému se hodnotí i podle toho, kolik času stráví uživatel než nalezne požadovanou informaci. Avšak také se odvíjí od toho, jak je možné tento systém rozšířit a přizpůsobit novým technologiím. V&amp;amp;nbsp;následující části bude popsána funkcionalita informačního systému EPI s.r.o. a možnosti jeho rozšíření.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis informačního systému EPI ==&lt;br /&gt;
Informační systém EPI s.r.o. se skládá z&amp;amp;nbsp;modulů jako je rozvrh hodin, internetová knihovna, omluva absence, elektronické testy, FTP, modul pro organizování státních závěrečných zkoušek atd. Přihlašování do systému probíhá pomocí LDAP skriptu napsaném v jazyce&amp;amp;nbsp;PHP. LDAP spolupracuje s&amp;amp;nbsp;netwareovým systémem NOVEL, jenž obsahuje přihlašovací údaje studentů, zaměstnanců a učitelů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Úkolem skriptu LDAP je připojit se pomocí LDAP protokolu k&amp;amp;nbsp;LDAP serveru, pro ověření přihlašovacích údajů. [7, s. 354]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;PHP je skriptovací programovací jazyk určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML. Při použití PHP pro dynamické stránky jsou skripty prováděny na straně serveru. K uživateli je přenášen až výsledek jejich činnosti. Interpreta PHP skriptu je možné volat pomocí příkazového řádku, dotazovacích metod HTTP nebo pomocí webových služeb. [5, s. 17]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro přihlášení je potřeba tří údajů: &lt;br /&gt;
&lt;br /&gt;
* jméno, udávající příjmení studenta nebo učitele psané bez diakritiky,&lt;br /&gt;
* kontext je u studentů zkratka studijního kruhu a rok zahájení studia, u učitelů je to „ucitel“ a u zaměstnanců „zamest“,&lt;br /&gt;
* heslo je automaticky generované při zavedení uživatele do systému, skládá se z&amp;amp;nbsp;číslic a písmen.&lt;br /&gt;
&lt;br /&gt;
Nejpoužívanější částí informačního systému EPI s.r.o. je rozvrh hodin, protože je denně využívaný studenty, učiteli a zaměstnanci vysoké školy. Vyznačuje se pestrým, přehledným a jednoduchým uživatelským rozhraním. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura rozvrhu hodin je postavena na skriptovacím jazyce PHP a relační databázi implementované do MYSQL. V&amp;amp;nbsp;této databázi se nachází záznamy obsahující detailní popis jednotlivých vyučovacích hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 3 je zachycen entitně relační diagram školního rozvrhu, skládající se ze sedmi databázových tabulek. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Tonda bc 11.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Entitně relační diagram školního rozvrhu&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schéma č. 3 zachycuje relace mezi jednotlivými tabulkami, tyto relace budou popsány v&amp;amp;nbsp;následujícím textu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_class eviduje studijní kruhy. Každý studijní kruh má v&amp;amp;nbsp;této tabulce vlastní a jedinečný záznam. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_class&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný číselný identifikátor, identifikující každý studijní kruh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| school_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Identifikátor školy, ve které se daný studijní kruh nachází&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Určije zda studijní kruh existuje, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Databázová tabulka epi_class &lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;předcházející tabulce č. 2 jsou definovány jednotlivé sloupce databázové tabulky a jejich krátký popis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject eviduje základní informace o jednotlivých vyučovacích předmětech. Popis jednotlivých databázových sloupců a jejich popis je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_subject&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor jednotlivých vyučovacích předmětů&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_info&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informace o vyučovacím předmětu, zpravidla nevyplněný údaj&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Databázová tabulka epi_subject&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject_type obsahuje záznamy o typu výuky. Typ výuky může být přednáška, cvičení, konzultace atd. Dále tato databázová tabulka obsahuje kód barvy uvedený v&amp;amp;nbsp;textovém řetězci. Barva identifikuje jednotlivé typy výuky. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_type&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název typu výuky, např.: Přednáška, Cvičení, atd.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_color&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Textový údaj, reprezentující barvu buňky &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Databázová tabulka epi_type&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_teacher obsahuje zkratku učitele. Další informace jsou umístěny v&amp;amp;nbsp;tabulce epi_users, kde jsou informace jako jméno, příjmení a tituly. Ostatní informace jsou pro vykreslení rozvrhu hodin nepotřebné. Tabulka epi_teacher je s&amp;amp;nbsp;tabulkou epi_users v&amp;amp;nbsp;relaci 1:N.&lt;br /&gt;
&lt;br /&gt;
Následující tabulka popisuje databázové sloupce z&amp;amp;nbsp;databázových tabulek epi_users a epi_teacher, které jsou potřebné pro vykreslení rozvrhu hodin. Ostatní databázové sloupce budou ignorovány.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Databázová tabulka'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učitele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| user_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor odkazující na tabulku epi_users&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_user&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| first_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jméno uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| last_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Příjmení uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly před jménem&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly za jménem&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Databázová tabulka epi_users a epi_teacher&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_room obsahuje informace o jednotlivých učebnách ve všech kampusech. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_room&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| building_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor budovy&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_capacity&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Obsahuje údaj o kapacitě učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informuje, zda je daná učebna provozuschopná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 5: Databázová tabulka epi_room&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_timetable je nejdůležitější tabulkou v&amp;amp;nbsp;celém relačním modelu. Skládá se zde celý rozvrh hodin. Každý záznam v&amp;amp;nbsp;této tabulce obsahuje odkazy na ostatní, již zmiňované databázové tabulky. Tato tabulka je tedy v&amp;amp;nbsp;relaci s&amp;amp;nbsp;ostatními tabulkami. Relace jsou zobrazeny na schématu č. 1 a v&amp;amp;nbsp;tabulce č. 7. Dále obsahuje informace o počtu hodin, počáteční hodině a datum daného dne. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_record&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_room, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_class, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_teacher, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_subject, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_type, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_date&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Datum, ke kterému se vztahuje záznam&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číslo vyučovací hodiny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour_count&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Počet hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_group&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Skupina, pro kterou daný záznam platí&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 6: Databázová tabulka epi_timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;předcházející tabulky plyne, že tabulka obsahuje cizí klíče, na jejichž základě je vytvořen rozvrh hodin. Díky těmto relacím je snížena velikost záznamů a rychlost dotazování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Možnosti rozšíření informačního systému  ==&lt;br /&gt;
V&amp;amp;nbsp;rámci zlepšování kvality informačního systému EPI, s.r.o. je vhodné tento systém rozšířit do řad jiných platforem. Toto rozšíření by bylo rozsáhlé, a proto v&amp;amp;nbsp;této práci bude rozebrána jen část tohoto rozšíření a to konkrétně rozvrh hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření poskytuje přístup k&amp;amp;nbsp;rozvrhu hodin pro aplikace běžících na různých platformách. Rozšíření je umístěno na školním serveru EPI, s.r.o. odkud je přístupné z&amp;amp;nbsp;jakéhokoliv bodu v&amp;amp;nbsp;rámci vnitřní sítě EPI, s.r.o. i mimo ni. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření se skládá ze dvou PHP skriptů neboli modulů. První modul slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Druhý modul slouží ke stažení určité části rozvrhu hodin ze školní databáze. Moduly byly vytvořeny v&amp;amp;nbsp;rámci této práce a jsou popsány v&amp;amp;nbsp;následujících kapitolách. Pro komunikaci s&amp;amp;nbsp;těmito moduly je potřeba dodržet pravidla jejich komunikačních protokolů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul pro přihlášení ===&lt;br /&gt;
Modul pro přihlášení slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Dotaz o ověření přihlašovacích údajů probíhá pomocí HTTP dotazovací metody POST. Dotaz má následující formát.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Formát požadavku na ověření přihlašovacích údajů http metodou POST: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
login:přihlašovací_jméno &lt;br /&gt;
pass:přihlašovací_heslo &lt;br /&gt;
kontext:kontext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modul pro ověření přihlašovacích údajů spolupracuje s&amp;amp;nbsp;LDAP serverem díky čemuž je možné ověřit, zda jsou přihlašovací údaje správné. Po odeslání přihlašovacích údajů modulem do LDAP serveru tento server vyhodnotí požadované údaje a vrátí modulu výsledek ve formě logického datového typu ''boolean''. Pokud modul obdrží logickou hodnotu false, indikující neúspěšné ověření údajů, odešle tuto hodnotu klientské straně. Klientskou stranou se myslí aplikace, jež žádá o ověření přihlašovacích údajů HTTP metodou POST. Obdrží-li hodnotu true, taktéž tuto hodnotu odešle klientské straně. Informace, jež modul zprostředkovává tazateli, jsou ve formě prostého textu (text bez formátování). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul rozvrhu hodin ===&lt;br /&gt;
Modul pro získání dat rozvrhu hodin získává data z&amp;amp;nbsp;MYSQL databáze již zaběhnutého rozvrhu hodin. Dotazování o data z&amp;amp;nbsp;tohoto modulu probíhá pomocí HTTP metody POST. Tento modul zprostředkovává data ve dvou formách, které se odvíjí od konkrétního dotazu. Formy dotazů jsou popsány v&amp;amp;nbsp;následujícím komunikačním protokolu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání seznamů pomocí HTTP metody POST jsou tři. První dotaz získá seznam aktivních učitelů, druhý dotaz získá seznam aktivních studijních kruhů a třetí dotaz získá seznam aktivních místností. Tyto seznamy jsou důležité například při výběru, pro který studijní kruh nebo pro kterého učitele bude zobrazen rozvrh hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Získání seznamu učitelů, studijních kruhů a místností:&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních učitelů: &lt;br /&gt;
#* seznam:ucitel&lt;br /&gt;
# Seznam aktivních studijních kruhů: &lt;br /&gt;
#* seznam:kruh&lt;br /&gt;
# Seznam aktivních místností:&lt;br /&gt;
#*seznam:mistnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem je serializovaný prostý text s&amp;amp;nbsp;vnitřní strukturou JSON, který reprezentuje seznam učitelů, studijních kruhů nebo místností. Tyto data jsou seřazeny sestupně. Serializace je proces, kdy se objekt transformuje do holého textu. Struktura JSON je pole objektů využívající strukturu klíč:hodnota. Jednotlivé objekty se oddělují pomocí složených závorek. Mezi jednotlivými objekty jsou čárky. Jeden objekt může obsahovat mnoho prvků klíč:hodnota.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Příklad výstupu pro dotaz seznam:ucitel je:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CJ&amp;quot;},&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CL&amp;quot;},&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;DV&amp;quot;}, &lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;PT“},&lt;br /&gt;
… ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat rozvrhu hodin jsou taktéž prováděny pomocí HTTP metody POST. Jednotlivé dotazy musí obsahovat tři údaje. Prvním údajem je zkratka učitele, místnosti nebo studijního kruhu. Další dva údaje reprezentují interval dat ve formátu „den-měsíc-rok“. Data rozvrhu hodin všech dnů z&amp;amp;nbsp;tohoto intervalu budou staženy ze školní databáze. Interval dat je (date_from, date_to), kde date_from reprezentuje začátek intervalu a date_to reprezentuje konec intervalu. Vynechá-li se údaj reprezentující konec intervalu, tedy bude-li HTTP dotaz ochuzen o údaj date_to, PHP modul automaticky tento chybějící údaj doplní a to o údaj date_from+6. To znamená, že interval stahovaných dat bude 7 dnů, tedy jeden týden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat pomocí HTTP metody POST z&amp;amp;nbsp;rozvrhu hodin pro určité období:&lt;br /&gt;
&lt;br /&gt;
* Data pro učitele za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
teacher:zkratka_ucitele, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Data pro studijní kruhy za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class:zkratka_kruhu, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Data pro místnosti za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
room:zkratka_mistnosti, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupem jsou data z&amp;amp;nbsp;databáze, které jsou serializovány a následně strukturovány metodou JSON, jejímž výstupem je prostý text s&amp;amp;nbsp;vnitřní strukturou JSON. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Část odpovědi pro dotaz room:K10, date_from:2012-02-03, date_to:2012-02-03 s&amp;amp;nbsp;vnitřní strukturou JSON:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[{„rv_date&amp;quot;:&amp;quot;2012-02-03&amp;quot;,&lt;br /&gt;
&amp;quot;rv_hour&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
&amp;quot;rv_hour_count&amp;quot;:&amp;quot;4&amp;quot;,&lt;br /&gt;
&amp;quot;room_title_sm&amp;quot;:&amp;quot;K10&amp;quot;,&lt;br /&gt;
&amp;quot;subject_title_sm&amp;quot;:&amp;quot;FIT&amp;quot;,&lt;br /&gt;
&amp;quot;teacher_title&amp;quot;:&amp;quot;BN&amp;quot;,&lt;br /&gt;
&amp;quot;type_color&amp;quot;:&amp;quot;7FFFD4&amp;quot;}, … ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Struktura odpovědi odpovídá záznamům z&amp;amp;nbsp;databázové tabulky epi_timetable, která je v&amp;amp;nbsp;relaci 1:N s&amp;amp;nbsp;ostatními popisovanými tabulkami.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11778</id>
		<title>Analýza informačního systému rozvrhu a možnosti zpracování dat</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11778"/>
		<updated>2013-09-06T09:28:13Z</updated>

		<summary type="html">&lt;p&gt;Tonda: /* Multiplatformní modul rozvrhu hodin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Praca_uvod|2|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
= =&lt;br /&gt;
&lt;br /&gt;
Efektivita informačního systému se hodnotí i podle toho, kolik času stráví uživatel než nalezne požadovanou informaci. Avšak také se odvíjí od toho, jak je možné tento systém rozšířit a přizpůsobit novým technologiím. V&amp;amp;nbsp;následující části bude popsána funkcionalita informačního systému EPI s.r.o. a možnosti jeho rozšíření.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis informačního systému EPI ==&lt;br /&gt;
Informační systém EPI s.r.o. se skládá z&amp;amp;nbsp;modulů jako je rozvrh hodin, internetová knihovna, omluva absence, elektronické testy, FTP, modul pro organizování státních závěrečných zkoušek atd. Přihlašování do systému probíhá pomocí LDAP skriptu napsaném v jazyce&amp;amp;nbsp;PHP. LDAP spolupracuje s&amp;amp;nbsp;netwareovým systémem NOVEL, jenž obsahuje přihlašovací údaje studentů, zaměstnanců a učitelů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Úkolem skriptu LDAP je připojit se pomocí LDAP protokolu k&amp;amp;nbsp;LDAP serveru, pro ověření přihlašovacích údajů. [7, s. 354]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;PHP je skriptovací programovací jazyk určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML. Při použití PHP pro dynamické stránky jsou skripty prováděny na straně serveru. K uživateli je přenášen až výsledek jejich činnosti. Interpreta PHP skriptu je možné volat pomocí příkazového řádku, dotazovacích metod HTTP nebo pomocí webových služeb. [5, s. 17]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro přihlášení je potřeba tří údajů: &lt;br /&gt;
&lt;br /&gt;
* jméno, udávající příjmení studenta nebo učitele psané bez diakritiky,&lt;br /&gt;
* kontext je u studentů zkratka studijního kruhu a rok zahájení studia, u učitelů je to „ucitel“ a u zaměstnanců „zamest“,&lt;br /&gt;
* heslo je automaticky generované při zavedení uživatele do systému, skládá se z&amp;amp;nbsp;číslic a písmen.&lt;br /&gt;
&lt;br /&gt;
Nejpoužívanější částí informačního systému EPI s.r.o. je rozvrh hodin, protože je denně využívaný studenty, učiteli a zaměstnanci vysoké školy. Vyznačuje se pestrým, přehledným a jednoduchým uživatelským rozhraním. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura rozvrhu hodin je postavena na skriptovacím jazyce PHP a relační databázi implementované do MYSQL. V&amp;amp;nbsp;této databázi se nachází záznamy obsahující detailní popis jednotlivých vyučovacích hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 3 je zachycen entitně relační diagram školního rozvrhu, skládající se ze sedmi databázových tabulek. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Tonda bc 11.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Entitně relační diagram školního rozvrhu&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schéma č. 3 zachycuje relace mezi jednotlivými tabulkami, tyto relace budou popsány v&amp;amp;nbsp;následujícím textu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_class eviduje studijní kruhy. Každý studijní kruh má v&amp;amp;nbsp;této tabulce vlastní a jedinečný záznam. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_class&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný číselný identifikátor, identifikující každý studijní kruh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| school_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Identifikátor školy, ve které se daný studijní kruh nachází&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Určije zda studijní kruh existuje, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Databázová tabulka epi_class &lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;předcházející tabulce č. 2 jsou definovány jednotlivé sloupce databázové tabulky a jejich krátký popis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject eviduje základní informace o jednotlivých vyučovacích předmětech. Popis jednotlivých databázových sloupců a jejich popis je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_subject&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor jednotlivých vyučovacích předmětů&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_info&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informace o vyučovacím předmětu, zpravidla nevyplněný údaj&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Databázová tabulka epi_subject&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject_type obsahuje záznamy o typu výuky. Typ výuky může být přednáška, cvičení, konzultace atd. Dále tato databázová tabulka obsahuje kód barvy uvedený v&amp;amp;nbsp;textovém řetězci. Barva identifikuje jednotlivé typy výuky. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_type&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název typu výuky, např.: Přednáška, Cvičení, atd.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_color&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Textový údaj, reprezentující barvu buňky &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Databázová tabulka epi_type&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_teacher obsahuje zkratku učitele. Další informace jsou umístěny v&amp;amp;nbsp;tabulce epi_users, kde jsou informace jako jméno, příjmení a tituly. Ostatní informace jsou pro vykreslení rozvrhu hodin nepotřebné. Tabulka epi_teacher je s&amp;amp;nbsp;tabulkou epi_users v&amp;amp;nbsp;relaci 1:N.&lt;br /&gt;
&lt;br /&gt;
Následující tabulka popisuje databázové sloupce z&amp;amp;nbsp;databázových tabulek epi_users a epi_teacher, které jsou potřebné pro vykreslení rozvrhu hodin. Ostatní databázové sloupce budou ignorovány.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Databázová tabulka'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učitele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| user_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor odkazující na tabulku epi_users&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_user&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| first_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jméno uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| last_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Příjmení uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly před jménem&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly za jménem&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Databázová tabulka epi_users a epi_teacher&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_room obsahuje informace o jednotlivých učebnách ve všech kampusech. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_room&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| building_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor budovy&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_capacity&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Obsahuje údaj o kapacitě učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informuje, zda je daná učebna provozuschopná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 5: Databázová tabulka epi_room&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_timetable je nejdůležitější tabulkou v&amp;amp;nbsp;celém relačním modelu. Skládá se zde celý rozvrh hodin. Každý záznam v&amp;amp;nbsp;této tabulce obsahuje odkazy na ostatní, již zmiňované databázové tabulky. Tato tabulka je tedy v&amp;amp;nbsp;relaci s&amp;amp;nbsp;ostatními tabulkami. Relace jsou zobrazeny na schématu č. 1 a v&amp;amp;nbsp;tabulce č. 7. Dále obsahuje informace o počtu hodin, počáteční hodině a datum daného dne. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_record&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_room, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_class, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_teacher, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_subject, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_type, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_date&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Datum, ke kterému se vztahuje záznam&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číslo vyučovací hodiny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour_count&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Počet hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_group&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Skupina, pro kterou daný záznam platí&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 6: Databázová tabulka epi_timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;předcházející tabulky plyne, že tabulka obsahuje cizí klíče, na jejichž základě je vytvořen rozvrh hodin. Díky těmto relacím je snížena velikost záznamů a rychlost dotazování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Možnosti rozšíření informačního systému  ==&lt;br /&gt;
V&amp;amp;nbsp;rámci zlepšování kvality informačního systému EPI, s.r.o. je vhodné tento systém rozšířit do řad jiných platforem. Toto rozšíření by bylo rozsáhlé, a proto v&amp;amp;nbsp;této práci bude rozebrána jen část tohoto rozšíření a to konkrétně rozvrh hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření poskytuje přístup k&amp;amp;nbsp;rozvrhu hodin pro aplikace běžících na různých platformách. Rozšíření je umístěno na školním serveru EPI, s.r.o. odkud je přístupné z&amp;amp;nbsp;jakéhokoliv bodu v&amp;amp;nbsp;rámci vnitřní sítě EPI, s.r.o. i mimo ni. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření se skládá ze dvou PHP skriptů neboli modulů. První modul slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Druhý modul slouží ke stažení určité části rozvrhu hodin ze školní databáze. Moduly byly vytvořeny v&amp;amp;nbsp;rámci této práce a jsou popsány v&amp;amp;nbsp;následujících kapitolách. Pro komunikaci s&amp;amp;nbsp;těmito moduly je potřeba dodržet pravidla jejich komunikačních protokolů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul pro přihlášení ===&lt;br /&gt;
Modul pro přihlášení slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Dotaz o ověření přihlašovacích údajů probíhá pomocí HTTP dotazovací metody POST. Dotaz má následující formát.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Formát požadavku na ověření přihlašovacích údajů http metodou POST: &lt;br /&gt;
&lt;br /&gt;
login:přihlašovací_jméno &lt;br /&gt;
&lt;br /&gt;
pass:přihlašovací_heslo &lt;br /&gt;
&lt;br /&gt;
kontext:kontext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modul pro ověření přihlašovacích údajů spolupracuje s&amp;amp;nbsp;LDAP serverem díky čemuž je možné ověřit, zda jsou přihlašovací údaje správné. Po odeslání přihlašovacích údajů modulem do LDAP serveru tento server vyhodnotí požadované údaje a vrátí modulu výsledek ve formě logického datového typu ''boolean''. Pokud modul obdrží logickou hodnotu false, indikující neúspěšné ověření údajů, odešle tuto hodnotu klientské straně. Klientskou stranou se myslí aplikace, jež žádá o ověření přihlašovacích údajů HTTP metodou POST. Obdrží-li hodnotu true, taktéž tuto hodnotu odešle klientské straně. Informace, jež modul zprostředkovává tazateli, jsou ve formě prostého textu (text bez formátování). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul rozvrhu hodin ===&lt;br /&gt;
Modul pro získání dat rozvrhu hodin získává data z&amp;amp;nbsp;MYSQL databáze již zaběhnutého rozvrhu hodin. Dotazování o data z&amp;amp;nbsp;tohoto modulu probíhá pomocí HTTP metody POST. Tento modul zprostředkovává data ve dvou formách, které se odvíjí od konkrétního dotazu. Formy dotazů jsou popsány v&amp;amp;nbsp;následujícím komunikačním protokolu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání seznamů pomocí HTTP metody POST jsou tři. První dotaz získá seznam aktivních učitelů, druhý dotaz získá seznam aktivních studijních kruhů a třetí dotaz získá seznam aktivních místností. Tyto seznamy jsou důležité například při výběru, pro který studijní kruh nebo pro kterého učitele bude zobrazen rozvrh hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Získání seznamu učitelů, studijních kruhů a místností:&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních učitelů: &lt;br /&gt;
#* seznam:ucitel&lt;br /&gt;
# Seznam aktivních studijních kruhů: &lt;br /&gt;
#* seznam:kruh&lt;br /&gt;
# Seznam aktivních místností:&lt;br /&gt;
#*seznam:mistnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem je serializovaný prostý text s&amp;amp;nbsp;vnitřní strukturou JSON, který reprezentuje seznam učitelů, studijních kruhů nebo místností. Tyto data jsou seřazeny sestupně. Serializace je proces, kdy se objekt transformuje do holého textu. Struktura JSON je pole objektů využívající strukturu klíč:hodnota. Jednotlivé objekty se oddělují pomocí složených závorek. Mezi jednotlivými objekty jsou čárky. Jeden objekt může obsahovat mnoho prvků klíč:hodnota.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Příklad výstupu pro dotaz seznam:ucitel je:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CJ&amp;quot;},&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CL&amp;quot;},&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;DV&amp;quot;}, &lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;PT“},&lt;br /&gt;
… ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat rozvrhu hodin jsou taktéž prováděny pomocí HTTP metody POST. Jednotlivé dotazy musí obsahovat tři údaje. Prvním údajem je zkratka učitele, místnosti nebo studijního kruhu. Další dva údaje reprezentují interval dat ve formátu „den-měsíc-rok“. Data rozvrhu hodin všech dnů z&amp;amp;nbsp;tohoto intervalu budou staženy ze školní databáze. Interval dat je (date_from, date_to), kde date_from reprezentuje začátek intervalu a date_to reprezentuje konec intervalu. Vynechá-li se údaj reprezentující konec intervalu, tedy bude-li HTTP dotaz ochuzen o údaj date_to, PHP modul automaticky tento chybějící údaj doplní a to o údaj date_from+6. To znamená, že interval stahovaných dat bude 7 dnů, tedy jeden týden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat pomocí HTTP metody POST z&amp;amp;nbsp;rozvrhu hodin pro určité období:&lt;br /&gt;
&lt;br /&gt;
* Data pro učitele za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
teacher:zkratka_ucitele, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Data pro studijní kruhy za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class:zkratka_kruhu, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Data pro místnosti za určité období:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
room:zkratka_mistnosti, &lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupem jsou data z&amp;amp;nbsp;databáze, které jsou serializovány a následně strukturovány metodou JSON, jejímž výstupem je prostý text s&amp;amp;nbsp;vnitřní strukturou JSON. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Část odpovědi pro dotaz room:K10, date_from:2012-02-03, date_to:2012-02-03 s&amp;amp;nbsp;vnitřní strukturou JSON:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[{„rv_date&amp;quot;:&amp;quot;2012-02-03&amp;quot;,&lt;br /&gt;
&amp;quot;rv_hour&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
&amp;quot;rv_hour_count&amp;quot;:&amp;quot;4&amp;quot;,&lt;br /&gt;
&amp;quot;room_title_sm&amp;quot;:&amp;quot;K10&amp;quot;,&lt;br /&gt;
&amp;quot;subject_title_sm&amp;quot;:&amp;quot;FIT&amp;quot;,&lt;br /&gt;
&amp;quot;teacher_title&amp;quot;:&amp;quot;BN&amp;quot;,&lt;br /&gt;
&amp;quot;type_color&amp;quot;:&amp;quot;7FFFD4&amp;quot;}, … ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Struktura odpovědi odpovídá záznamům z&amp;amp;nbsp;databázové tabulky epi_timetable, která je v&amp;amp;nbsp;relaci 1:N s&amp;amp;nbsp;ostatními popisovanými tabulkami.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Tonda_bc_11.png&amp;diff=11777</id>
		<title>Súbor:Tonda bc 11.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Tonda_bc_11.png&amp;diff=11777"/>
		<updated>2013-09-06T09:04:02Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hierarchie_grafick%C3%BDch_element%C5%AF.png&amp;diff=11776</id>
		<title>Súbor:Hierarchie grafických elementů.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hierarchie_grafick%C3%BDch_element%C5%AF.png&amp;diff=11776"/>
		<updated>2013-09-06T09:02:33Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Hierarchie grafických elementů.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Princip_navigace_pomoc%C3%AD_tla%C4%8D%C3%ADtka_zp%C4%9Bt_a_up.png&amp;diff=11775</id>
		<title>Súbor:Princip navigace pomocí tlačítka zpět a up.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Princip_navigace_pomoc%C3%AD_tla%C4%8D%C3%ADtka_zp%C4%9Bt_a_up.png&amp;diff=11775"/>
		<updated>2013-09-06T09:00:59Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Princip navigace pomocí tlačítka zpět a up.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vizu%C3%A1ln%C3%AD_rozvr%C5%BEen%C3%AD_aplikace.png&amp;diff=11774</id>
		<title>Súbor:Vizuální rozvržení aplikace.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vizu%C3%A1ln%C3%AD_rozvr%C5%BEen%C3%AD_aplikace.png&amp;diff=11774"/>
		<updated>2013-09-06T09:00:30Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Vizuální rozvržení aplikace.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vkl%C3%A1d%C3%A1n%C3%AD_aktivit_do_z%C3%A1sobn%C3%ADku.png&amp;diff=11773</id>
		<title>Súbor:Vkládání aktivit do zásobníku.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vkl%C3%A1d%C3%A1n%C3%AD_aktivit_do_z%C3%A1sobn%C3%ADku.png&amp;diff=11773"/>
		<updated>2013-09-06T09:00:13Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Vkládání aktivit do zásobníku.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Stavov%C3%BD_diagram_%C5%BEivotn%C3%ADho_cyklu_aktivity.png&amp;diff=11772</id>
		<title>Súbor:Stavový diagram životního cyklu aktivity.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Stavov%C3%BD_diagram_%C5%BEivotn%C3%ADho_cyklu_aktivity.png&amp;diff=11772"/>
		<updated>2013-09-06T08:58:54Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Stavový diagram životního cyklu aktivity.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Ukl%C3%A1d%C3%A1n%C3%AD_prom%C4%9Bnn%C3%BDch_do_objektu_Bundle.png&amp;diff=11771</id>
		<title>Súbor:Ukládání proměnných do objektu Bundle.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Ukl%C3%A1d%C3%A1n%C3%AD_prom%C4%9Bnn%C3%BDch_do_objektu_Bundle.png&amp;diff=11771"/>
		<updated>2013-09-06T08:58:51Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Tonda bola nahraná nová verzia „Súbor:Ukládání proměnných do objektu Bundle.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Li%C5%A1ta_ActionBar.png&amp;diff=11770</id>
		<title>Súbor:Lišta ActionBar.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Li%C5%A1ta_ActionBar.png&amp;diff=11770"/>
		<updated>2013-09-06T08:50:22Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Princip_navigace_pomoc%C3%AD_tla%C4%8D%C3%ADtka_zp%C4%9Bt_a_up.png&amp;diff=11769</id>
		<title>Súbor:Princip navigace pomocí tlačítka zpět a up.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Princip_navigace_pomoc%C3%AD_tla%C4%8D%C3%ADtka_zp%C4%9Bt_a_up.png&amp;diff=11769"/>
		<updated>2013-09-06T08:50:04Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zobrazen%C3%AD_prvk%C5%AF_na_r%C5%AFzn%C3%BDch_velikostech_obrazovky.png&amp;diff=11768</id>
		<title>Súbor:Zobrazení prvků na různých velikostech obrazovky.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zobrazen%C3%AD_prvk%C5%AF_na_r%C5%AFzn%C3%BDch_velikostech_obrazovky.png&amp;diff=11768"/>
		<updated>2013-09-06T08:49:45Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Fyzick%C3%A9_rozm%C4%9Bry_a_hustota_obrazovky.png&amp;diff=11767</id>
		<title>Súbor:Fyzické rozměry a hustota obrazovky.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Fyzick%C3%A9_rozm%C4%9Bry_a_hustota_obrazovky.png&amp;diff=11767"/>
		<updated>2013-09-06T08:49:30Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vizu%C3%A1ln%C3%AD_rozvr%C5%BEen%C3%AD_aplikace.png&amp;diff=11766</id>
		<title>Súbor:Vizuální rozvržení aplikace.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vizu%C3%A1ln%C3%AD_rozvr%C5%BEen%C3%AD_aplikace.png&amp;diff=11766"/>
		<updated>2013-09-06T08:49:16Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vkl%C3%A1d%C3%A1n%C3%AD_aktivit_do_z%C3%A1sobn%C3%ADku.png&amp;diff=11765</id>
		<title>Súbor:Vkládání aktivit do zásobníku.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vkl%C3%A1d%C3%A1n%C3%AD_aktivit_do_z%C3%A1sobn%C3%ADku.png&amp;diff=11765"/>
		<updated>2013-09-06T08:48:58Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Ukl%C3%A1d%C3%A1n%C3%AD_prom%C4%9Bnn%C3%BDch_do_objektu_Bundle.png&amp;diff=11764</id>
		<title>Súbor:Ukládání proměnných do objektu Bundle.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Ukl%C3%A1d%C3%A1n%C3%AD_prom%C4%9Bnn%C3%BDch_do_objektu_Bundle.png&amp;diff=11764"/>
		<updated>2013-09-06T08:48:43Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Stavov%C3%BD_diagram_%C5%BEivotn%C3%ADho_cyklu_aktivity.png&amp;diff=11763</id>
		<title>Súbor:Stavový diagram životního cyklu aktivity.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Stavov%C3%BD_diagram_%C5%BEivotn%C3%ADho_cyklu_aktivity.png&amp;diff=11763"/>
		<updated>2013-09-06T08:48:21Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hierarchie_grafick%C3%BDch_element%C5%AF.png&amp;diff=11762</id>
		<title>Súbor:Hierarchie grafických elementů.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hierarchie_grafick%C3%BDch_element%C5%AF.png&amp;diff=11762"/>
		<updated>2013-09-06T08:48:00Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Roz%C5%A1%C3%AD%C5%99en%C3%AD_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_EPI,_s.r.o._na_mobiln%C3%AD_platformu_Android&amp;diff=11761</id>
		<title>Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Roz%C5%A1%C3%AD%C5%99en%C3%AD_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_EPI,_s.r.o._na_mobiln%C3%AD_platformu_Android&amp;diff=11761"/>
		<updated>2013-09-06T08:47:42Z</updated>

		<summary type="html">&lt;p&gt;Tonda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div itemtype=&amp;quot;http://schema.org/ScholarlyArticle&amp;quot; itemscope=&amp;quot;itemscope&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=5 cellspacing=0 width=100%&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div style=&amp;quot;font-size:18px;text-align:center&amp;quot;&amp;gt;Evropský polytechnický institut, s.r.o.&amp;lt;br/&amp;gt;Kunovice, ČR&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div style=&amp;quot;text-align:center;font-size:20px&amp;quot;&amp;gt;{{PAGENAME}}&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px&amp;quot;&amp;gt;Bakalářská práce&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 0px red solid;&amp;quot; cellpadding=5 cellspacing=0 &lt;br /&gt;
|- style=&amp;quot;width:300px&amp;quot;&lt;br /&gt;
|'''Autor''':&lt;br /&gt;
|&amp;lt;span itemscope=&amp;quot;itemscope&amp;quot; itemprop=&amp;quot;author&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Antonín Šajboch&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Pedagogický vedúci''':&lt;br /&gt;
|Ing. Jindřich Petrucha, PhD&lt;br /&gt;
|-&lt;br /&gt;
|'''Študijný odbor''':&lt;br /&gt;
|&amp;lt;span itemprop=&amp;quot;articleSection&amp;quot;&amp;gt;Elektronické počítače&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Akademický rok'''&lt;br /&gt;
|&amp;lt;span itemprop=&amp;quot;copyrightYear&amp;quot;&amp;gt;2012/2013&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Praca_uvod|1|Rozšíření informačního systému EPI, s.r.o. na mobilní platformu Android|Analýza platformy Android|Analýza informačního systému rozvrhu a možnosti zpracování dat|Návrh vzhledu aplikace mobilního rozvrhu|Návrh funkcionality aplikace mobilního rozvrhu|Realizace projektu EPIrozvrh a popis kódu|Testování funkcionality aplikace EPIrozvrh a uvedení do provozu}}&lt;br /&gt;
&lt;br /&gt;
{{abstrakt&lt;br /&gt;
|Cílem práce bylo vytvořit aplikaci školního rozvrhu pro mobilní platformu Android. Tato aplikace pravidelně automaticky stahuje nové aktualizace rozvrhu ze školní databáze a je přístupná i v režimu offline. V této práci je provedena analýza platformy Android a princip vývoje aplikací pro tuto platformu včetně jejího vývojového prostředí. Dále jsou zde také popsány principy programování, vývojové diagramy popisující architekturu celé aplikace. Všechny tyto informace jsou využity v praktické části, kde je detailně popsáno, jak aplikace pracuje s daty včetně jejího třídění a zobrazování. Součástí práce je kromě hotové aplikace veškerá dokumentace a videonávod.&lt;br /&gt;
|The aim was to create an application school schedule for the Android mobile platform. This application automatically downloads regular updates schedule from the school database and can be accessed in offline mode. This paper is an analysis of the Android platform and the principle of development applications for the platform, including its development environment. Furthermore, there are also described principles of programming, flowcharts describing the architecture of the application. All this information is used in the practical part, where is described in detail how the application works with data including the sorting and displaying. The work done by excluding all documentation and video tutorials.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Díky mobilním technologiím můžeme být neustále v kontaktu se svou rodinou, přáteli &lt;br /&gt;
i dalšími lidmi po celém světě. Mobilní telefony se postupem času stali „malými počítači“. Obdobně jako počítače obsahují procesor, datové úložiště, paměť RAM, ale také operační systém. Takto vybavený mobilní telefon nám může poskytnout bohatou sadu služeb. Běžnou součástí mobilního telefonu se stalo bezdrátové připojení k internetu. Díky tomuto připojení se k emailům či svým datům dostaneme téměř odkudkoliv.    &lt;br /&gt;
&lt;br /&gt;
Android není jenom operační systém, ale je také celou platformou pro vývoj aplikačního softwaru. Android nabízí vývojáři aplikací velkou míru svobody při tvorbě a přístupu k funkcím zařízení. K těmto funkcím se přistupuje přes standardizované programové rozhraní (API).&lt;br /&gt;
&lt;br /&gt;
V rámci modernizace na „Evropském polytechnickém institutu s.r.o.“, dále jen EPI, jsem se rozhodl rozšířit informační systém na mobilní platformu Android. Toto rozšíření se bude týkat rozvrhu hodin. Díky tomuto rozšíření bude mít student, učitel nebo zaměstnanec školy možnost přistupovat k rozvrhu školy pomocí aplikace ve svém mobilním zařízení s OS Android.   &lt;br /&gt;
&lt;br /&gt;
Aplikace bude obsahovat vlastní databázi rozvrhu, která se bude automaticky aktualizovat ze školního serveru. Aktualizace však bude možná jen za předpokladu úspěšného připojení do sítě internet. Jinak bude aplikace čerpat ze své vlastní databáze, která již byla aktualizována dříve.&lt;br /&gt;
&lt;br /&gt;
V první kapitole bude podrobně analyzována platforma Android a princip vývoje aplikací na této platformě. Dále zde bude popsáno vývojové prostředí pro tvorbu aplikací pro OS Android, princip vývoje aplikací, základní struktura aplikace a pravidla vizuálního návrhu. &lt;br /&gt;
&lt;br /&gt;
Druhá kapitola bude popisovat stávající informační systém s cíleným zaměřením na rozvrh hodin, který bude analyzován velmi podrobně. Také zde bude popsáno multiplatformní rozšíření rozvrhu hodin, které bude vytvořeno na základě předchozí analýzy rozvrhu hodin. &lt;br /&gt;
&lt;br /&gt;
Třetí kapitola bude popisovat návrh vzhledu aplikace v kombinaci s navigačními prvky. Tento návrh vzhledu předchází vývoji aplikace. To znamená, že na základě tohoto návrhu bude vytvořen reálný vzhled aplikace s navigačními prvky, které tato kapitola popisuje.&lt;br /&gt;
&lt;br /&gt;
Další kapitola, tedy kapitola čtvrtá, bude definovat architekturu aplikace a způsob, jakým bude aplikace uchovávat své data. Popis architektury aplikace bude postaven na UML diagramech. &lt;br /&gt;
&lt;br /&gt;
Pátá kapitola bude popisovat již hotovou aplikaci a rozebírat jednotlivé části aplikace. Budou zde ukázky zdrojového kódu v kombinaci s diagramy tříd a ukázky konečného vzhledu aplikace. Části zdrojového kódu budou popsány a podrobně vysvětleny. &lt;br /&gt;
&lt;br /&gt;
Kapitola číslo šest se zabývá testováním funkcionality hotové aplikace. Testování aplikace bude rozděleno na dvě části. V první části se bude jednat o obecné testování aplikace, tedy o to zda se aplikace nechová nepředvídatelně. Tyto testy budou prováděny na principu testování aplikací, které zveřejnila firma Google v dokumentu „App Quality“ na portále pro vývojáře aplikací pro OS Android. [40] Ve druhé části se bude provádět individuální testování aplikace. To znamená, jestli se aplikace chová přesně tak, jak bylo definováno &lt;br /&gt;
a nedochází například ke zkreslování informací nebo ke špatnému zobrazení na různých zařízeních.&lt;br /&gt;
&lt;br /&gt;
Cílem této práce je vytvořit aplikaci pro mobilní zařízení se systémem Android, která bude poskytovat přístup k aktuálnímu rozvrhu hodin a tuto aplikaci uvést do provozu na EPI.&lt;br /&gt;
&lt;br /&gt;
V této práci bude použito hodně anglických výrazů, které nelze věrohodně přeložit, nebo neexistuje v českém jazyce synonymum překládaného slova. Aby nedocházelo ke skloňování nebo špatnému překladu těchto slov, budou tato slova označena kurzívou &lt;br /&gt;
a nebudou skloňována a překládána. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Analýza platformy Android=&lt;br /&gt;
Tento OS podporují přední prodejci mobilních telefonů a tabletů, mezi které patří například Samsung, HTC, Sony Ericsson a Motorola. Nejenom přední výrobci mobilních&lt;br /&gt;
telefonů, ale i přední výrobci osobních počítačů jej využívají pro své produkty, zejména pro tablety. Mezi tyto přední výrobce osobních počítačů patří například Asus, Acer, atd.&lt;br /&gt;
&lt;br /&gt;
== Vývoj platformy Android ==&lt;br /&gt;
Společnost Android Inc. byla založena ve Spojených státech amerických v&amp;amp;nbsp;roce 2003 a jejím zakladatelem byl Andy Rubin. V&amp;amp;nbsp;roce 2005 ji odkoupila společnost Google Inc. a vydala první verzi operačního systému Android v&amp;amp;nbsp;mobilním telefonu s&amp;amp;nbsp;názvem Google mobile, ale tato verze nebyla úspěšná. Google přepracoval tento operační systém a po roce jej znovu vydal pro mobilní telefon HTC, tato verze již úspěšná byla. Uživatelů operačního systému Android začalo přibývat. Dne 5. listopadu v roce 2007, několik společností, včetně Google, HTC, Motorola, Intel, T-Mobile, a NVIDIA, vytvořilo OHA. &amp;lt;nowiki&amp;gt;[19][11 s. 4]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OHA je uskupení výrobců mobilních telefonů, telekomunikačních operátorů a technologických firem, stojící za vývojem OS Android. Cílem tohoto seskupení je vyvinutí otevřeného standardu pro mobilní zařízení. Od října 2008 je Android k&amp;amp;nbsp;dispozici jako ''open-source''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Verze'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Kódové jméno'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Verze API'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 1.5&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Cupcake&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 3&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 1.6&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Donut&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 4&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 2.0/2.1&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Eclair&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 6/7&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 2.2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| FroYo&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 8&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 2.3&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Gingerbread&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 3.0 – 3.2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Honeycomb&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 12 – 14&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 4.0&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Ice Cream Sandwich&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 15&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 4.1/4.2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jelly Bean&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| 16/17&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Rozdělení platformy Android podle dostupných verzí&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [20]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Předcházející tabulka reprezentuje seznam používaných verzí operačního systému. Každá verze operačního systému obsahuje číslo verze, kódové označení a verzi API. Z&amp;amp;nbsp;této tabulky je tedy zřejmé, že OS Android je k&amp;amp;nbsp;dispozici v&amp;amp;nbsp;široké škále verzí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android Architektura  ==&lt;br /&gt;
Následující obrázek, který se skládá z pěti vrstev, zobrazuje hlavní komponenty OS Android. Každá z těchto vrstev má svůj specifický význam a ten je rozebrán níže.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Tonda bc 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 1: Pohled na Architekturu platformy Android&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [12]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základním kamenem platformy Android je Linuxové jádro 2.6, což je nejnižší vrstva.Na obrázku č. 1 je tato vrstva označena jako Linux Kernel. Toto Linuxové jádro je nejčastěji používaným ''open-source''&amp;lt;nowiki&amp;gt; jádrem díky jeho stabilitě, flexibilitě a dalším výhodám. [13][10, s. 19]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toto linuxové jádro obsahuje ovladače nutné ke komunikaci ostatních vrstev s hardwarem zařízení. Dále je toto jádro obohaceno o specifické funkce, jako je speciální sdílená paměť, meziprocesorová komunikace, alokace operační paměti pro procesy atd. &lt;br /&gt;
&lt;br /&gt;
Tyto specifické funkce jsou důležité pro provoz na mobilních zařízeních zejména kvůli nízké operační paměti a méně výkonným procesorům (CPU).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další v&amp;amp;nbsp;pořadí je vrstva, která je na obrázku č. 1 označena jako ''Libraries'' (knihovny). Tato vrstva obsahuje řadu C/C++ nativních knihoven. Knihovny jsou používané různými komponentami systému Android. Jsou nezbyté pro vývoj aplikací většího rozsahu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé z&amp;amp;nbsp;těchto knihoven:&lt;br /&gt;
&lt;br /&gt;
* ''Media'' ''Libraries -'' tato knihovna podporuje přehrávání a nahrávání mnoha známých audio a video formátů, jako jsou například AAC, AMR atd., podporuje také obrazové soubory,&lt;br /&gt;
* SQLite ''-'' všestranný relační databázový systém, který je přístupný všem aplikacím,&lt;br /&gt;
* LibWebCore ''-'' moderní jádro webového prohlížeče implementováno do webového prohlížeče OS Android, ale také je obsaženo v&amp;amp;nbsp;grafické komponentě ''web view'' přístupné pro vývojáře,&lt;br /&gt;
* SGL ''-'' základní 2D grafický ''engine'',&lt;br /&gt;
* 3D ''libraries -''obsahují implementace založené na OpenGL ES 1.0 API, využívá 3D hardwarovou akceleraci (pokud je k&amp;amp;nbsp;dispozici), nebo vysoce optimalizované softwarové 3D rastrování. &amp;lt;nowiki&amp;gt;[13]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Další částí je virtuální stroj Dalvik, který je na obrázku označen jako Android Runtime. Virtuální stroj Dalvik zajišťuje, že každá aplikace běží ve vlastním procesu, s&amp;amp;nbsp;vlastní instancí. [12] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;toho plyne, že zajišťuje nezávislost aplikací na hardware a každá aplikace je obsluhována vlastním vláknem. Další důležitou vlastností virtuálního stroje Dalvik je nejenom nezávislost aplikace na hardware, ale zejména nezávislost na instrukční sadě procesoru. Díky tomu je možné provozovat aplikace na architektuře x86 i na procesorech ARM. Samozřejmě to neplatí za použití nativních knihoven, které by bylo nutno přeložit zvlášť.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platforma Android nabízí široké možnosti při vytváření designu aplikace. Taktéž je možno plně využívat funkce hardwaru zařízení (GPS). Mohou také pracovat s&amp;amp;nbsp;informacemi o poloze, spouštět služby na pozadí či přidat oznámení. &amp;lt;nowiki&amp;gt;[10, s. 25]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslední vrstvě s názvem „Aplications“ jsou aplikace, které jsou dodávané s&amp;amp;nbsp;téměř každým zařízením pracujícím na platformě Android, například webový prohlížeč, seznam kontaktů a další. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip vývoje aplikací  ==&lt;br /&gt;
Vývoj aplikací pro mobilní zařízení je od vývoje aplikací pro stolní počítače nebo servery poněkud odlišný. Mobilní zařízení mají ve většině případů malou obrazovku, mohou a nemusí mít fyzickou klávesnici, ovládají se dotykem (velké prsty na malé obrazovce jsou nepřesné), operační paměť a rychlost CPU je v&amp;amp;nbsp;porovnání se stolními počítači malá. &amp;lt;nowiki&amp;gt;[1, s. 22] [14]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tyto předpoklady je proto důležité znát a implementovat je do vyvíjené aplikace, například vytvářet všechny tlačítka a ovládací prvky dostatečně velké, aby bylo možné snadné ovládání. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mobilní zařízení, tedy konkrétně mobilní telefony, jsou navíc odlišné v&amp;amp;nbsp;tom, že jejich primární funkce je přijímat hovory, přijímat textové zprávy a zprávy MMS. Tyto služby jsou pro uživatele naprosto prioritní. Určitě by se nikomu nelíbilo, kdyby mobilní telefon přestal pracovat kvůli nějaké aplikaci. Při běhu aplikace můžou nastat různé jevy, které znemožní tyto primární funkce telefonu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jevy, které znemožní primární funkce telefonu:&lt;br /&gt;
&lt;br /&gt;
* dojde k&amp;amp;nbsp;takovému vytížení procesoru, že mobilní telefon nebude schopný přijmout hovor,&lt;br /&gt;
* aplikace nezmizí do pozadí, když telefon upozorní uživatele na příchozí hovor nebo si chce uživatel přečíst textovou zprávu,&lt;br /&gt;
* aplikace způsobí pád systému.&lt;br /&gt;
&lt;br /&gt;
Mark L. Murphy, vývojář mobilních aplikací pro Android, napsal ve své knize Android 2: Průvodce programováním mobilních aplikací: „''Aplikace spuštěné v&amp;amp;nbsp;telefonu se musí neustále potýkat s&amp;amp;nbsp;tím, že jsou spuštěné právě v&amp;amp;nbsp;telefonu''“. &amp;lt;nowiki&amp;gt;[1, s. 22]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platforma Android se snaží o kompromis tak, že aplikace spuštěné v&amp;amp;nbsp;mobilním telefonu můžou využívat největší možnou část operační paměti a procesoru, ale zároveň jsou zajištěny již zmiňované primární funkce mobilního telefonu. Nabízí poměrně rigidní &amp;lt;nowiki&amp;gt;a oddělený aplikační rámec, ve kterém musí běžet veškeré aplikace, aby nenarušovali základní funkci ostatních aplikací nebo samotného telefonu. [14]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programovací jazyk, ve kterém se píší aplikace pro mobilní zařízení s&amp;amp;nbsp;OS Android, je obdobný jako programovací jazyk Java. Využívá se stejné syntaxe a některých negrafických objektů. Grafické objekty si platforma Android definuje sama. Předchozí znalost programovacího jazyku Java je předpokladem pro pochopení vývoje aplikací pro platformu Android. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Android emulátor ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Android SDK obsahuje virtuální zařízení Android Virtual Device (AVD), které simuluje běh mobilního telefonu v&amp;amp;nbsp;počítači. Emulátor umožňuje ladění a testování aplikací bez použití fyzického zařízení. [17][16][1, s. 28] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Emulátor však nepodporuje všechny hardwarové a softwarové prvky typické pro mobilní zařízení. Poskytuje však celou řadu kontrolních a navigačních kláves, které je možné ovládat pomocí kliknutí myši nebo klávesnice. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro použití emulátoru se nejprve musí vytvořit virtuální zařízení v&amp;amp;nbsp;AVD Manager, který se spustí z&amp;amp;nbsp;vývojového prostředí nebo z&amp;amp;nbsp;příkazové řádky. Při vytváření AVD je potřeba vytvořit konfiguraci. V&amp;amp;nbsp;každé konfiguraci je možno zadat verzi platformy Android, velikost obrazovky, velikost paměťové karty, popřípadě se dá zvolit některé z fyzicky existujících zařízení (Nexus 7). Každé AVD funguje nezávisle s&amp;amp;nbsp;vlastním skladovacím prostorem pro uživatelská data. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Části AVD jsou:&lt;br /&gt;
&lt;br /&gt;
* Hardwarový profil - definuje funkce hardware virtuálního zařízení. Může určit, zda má virtuální zařízení fotoaparát, kolik má paměti, atd.&lt;br /&gt;
* Mapování systémového obrazu - definuje, jaká verze platformy Android poběží na virtuálním zařízení.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Další možnosti - umožňují zadat rozměry obrazovky, vzhled, emulaci SD karty atd. [17][18]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vývojové prostředí ===&lt;br /&gt;
Oficiálně podporované vývojové prostředí pro aplikace Android je IDE Eclipse s&amp;amp;nbsp;doinstalovaným zásuvným modulem Android Developer Tools (ADT). Vývojáři ovšem nejsou nuceni pracovat s&amp;amp;nbsp;vývojovým prostředím Eclipse, ale mohou si zvolit jiné IDE, například NetBeans nebo jednoduchý textový editor a kompilace pomocí příkazové řádky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nástroje pro vývoj aplikací pro platformu Android jsou obsaženy v&amp;amp;nbsp;Android Software Development Kit (SDK), které jsou dostupné pro všechny známé operační systémy GNU/Linux, Windows i Mac OS. &amp;lt;nowiki&amp;gt;[15]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sada SDK se skládá z&amp;amp;nbsp;balíků, které je možné stáhnout a nainstalovat popřípadě aktualizovat samostatně pomocí Android SDK Manager. Vyjde-li nová verze platformy Android nebo jsou k&amp;amp;nbsp;dispozici aktualizace SDK Tools, je možno pomocí SDK Manager stáhnout tyto aktualizace do používaného vývojového prostředí. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Balíčky pro Android SDK:&lt;br /&gt;
&lt;br /&gt;
* SDK Tools - obsahuje nástroje pro ladění, testování aplikací a další nástroje, které jsou nezbytné k&amp;amp;nbsp;rozvoji aplikací, &lt;br /&gt;
* SDK Platform - je k&amp;amp;nbsp;dispozici pro každou verzi Android, obsahuje soubor (android.jar) s&amp;amp;nbsp;knihovnami,&lt;br /&gt;
* zdrojové kódy pro Android SDK,&lt;br /&gt;
* dokumentace offline - kopie nejnovější dokumentace pro platformu Android.&lt;br /&gt;
&lt;br /&gt;
'''Struktura projektu'''&lt;br /&gt;
&lt;br /&gt;
Překladový systém operačního systému Android je založen na speciální stromové struktuře adresářů v&amp;amp;nbsp;projektu. Je to velmi podobné jako v&amp;amp;nbsp;jakémkoli jiném Java projektu. Platforma Android využívá XML souborů pro definování statických parametrů, které definují danou aplikaci. XML soubory jsou využity i při vytváření statického designu aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
XML je značkovací jazyk využívaný pro různé účely a obsahuje různé typy dat. &amp;lt;nowiki&amp;gt;Zpracování XML je podporováno řadou nástrojů a programovacích jazyků. XML neobsahuje předdefinované značky (tagy), proto je třeba definovat vlastní značky, které budou použity. [4, s. 17]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po vytvoření nového projektu v&amp;amp;nbsp;Android SDK se vytvoří v&amp;amp;nbsp;kořenovém adresáři několik položek, včetně následujících:&lt;br /&gt;
&lt;br /&gt;
* AndroidManifest.xml je XML soubor popisující vyvíjenou aplikaci a komponenty,&lt;br /&gt;
* build.xml je skript pro kompilaci a instalaci aplikace na telefon,&lt;br /&gt;
* assets/ je složka obsahující statické soubory, které je potřeba přibalit k&amp;amp;nbsp;aplikaci,&lt;br /&gt;
* bin/ je složka ve které se nachází aplikace po kompilaci,&lt;br /&gt;
* libs/ je složka uchovávající java archívy třetích stran,&lt;br /&gt;
* src/ je složka uchovávající zdrojové kódy aplikace,&lt;br /&gt;
* res/ je složka uchovávající prostředky a to jsou například ikony, zabalené návrhy grafického rozhraní (GUI) se zkompilovaným zdrojovým kódem. &lt;br /&gt;
&lt;br /&gt;
Soubor AndroidManifest.xml je základem jakékoliv aplikace pro Android. Tento soubor se automaticky vygeneruje po vytvoření aplikace. Deklaruje se zde obsah, práva a služby aplikace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V souboru&amp;amp;nbsp;AndroidManifest.xml můžeme naleznout následující elementy:&lt;br /&gt;
&lt;br /&gt;
* ''permission'' zprostředkovává práva jiným aplikacím, aby mohli využívat logiku či data aktuální aplikace,&lt;br /&gt;
* ''uses-permission'' jsou práva, které bude aplikace potřebovat, aby mohla správně fungovat,&lt;br /&gt;
* ''instrumentation'' deklarují zdrojový kód, který je potřeba volat při výskytu klíčových systémových událostí,&lt;br /&gt;
* ''uses-library'' připojují některé android komponenty, například mapovací služby.&lt;br /&gt;
&lt;br /&gt;
== Základní objekty při tvorbě aplikace ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Grafická část aplikace je nejdůležitější částí vývoje aplikací pro mobilní zařízení. Platforma Android si zakládá na jednoduchosti ovládání, které by mělo být intuitivní. Proto je při tvorbě vzhledu důležité dodržovat zásady, které byly vyvinuty na základně zkušeností uživatelů Android. [32]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Grafické uživatelské prostředí (GUI) pro Android aplikace je sestaveno s&amp;amp;nbsp;použitím hierarchie objektů ''View'' a ''ViewGroup'', které jsou základními stavebními kameny pro vytváření designu aplikace. Každý grafický element musí být potomkem jedné z&amp;amp;nbsp;těchto tříd. ''ViewGroup'' je neviditelná skupina prvků ''View'' a ''ViewGroup''. ''ViewGroup'' je taktéž nazývaný kontejner. Tento kontejner může obsahovat jak prvky ''View'', tak prvky ''ViewGroup''&amp;lt;nowiki&amp;gt;. [24] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''View'' je dále nedělitelný element, který slouží pro zobrazení nebo interakci s uživatelem. Na obrázku č. 2 je vyobrazena tato hierarchie jednotlivých elementů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vzhled aplikace se skládá ze dvou základních elementů, vizuální komponenta (potomek třídy ''View'') a layout (v překladu nákres, potomek třídy ''ViewGroup''), viz obrázek č. 2. V&amp;amp;nbsp;této práci bude použito označení komponenta a layout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Hierarchie grafických elementů.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 2: Hierarchie grafických elementů&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [24]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozložení prvků zachycuje obrázek č. 2, kde lze vidět, že prvek ''ViewGroup,''&amp;lt;nowiki&amp;gt; tedy layout, je rodičovským prvkem a může obsahovat další prvky. Typickými zástupci layoutu jsou LinearLayout a RelativeLayout sloužící pro specifické rozmístění jakýchkoliv grafických prvků. [22][23]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ačkoli je technicky vzato možné vytvářet všechny vizuální komponenty a layouty prostřednictvím zdrojového kódu obvyklejší je používat XML soubor s&amp;amp;nbsp;návrhem uživatelského rozhraní. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dynamické vytváření instancí vizuálních komponent prostřednictvím zdrojového kódu se používá, když vizuální komponenty nejsou známé při kompilaci, například naplnění sloupce na základě dat získaných ze sítě internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Android považuje návrhy založené na XML za prostředky (''resources''), a proto jsou uloženy v&amp;amp;nbsp;adresáři res/layout v Android projektu. XML soubor obsahuje strom elementů &amp;lt;nowiki&amp;gt;s atributy identifikující rozložení elementů a jejich bližší vlastnosti. [1, s. 42]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Atributy v&amp;amp;nbsp;XML návrhu popisují jak má daný element vypadat nebo jak se má chovat. Pokud má nějaká vizuální komponenta, například ''TextView,'' hodnotu atributu android:textColor=„0000FF“, znamená to, že text, který se zobrazí, bude modrý. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Téměř vše, co se dá vytvořit pomocí XML, lze vytvořit pomocí zdrojového kódu. Místo použití atributu v&amp;amp;nbsp;XML návrhu android:textColor, se může použít metoda setTextColor(int). Avšak obrovskou výhodou vytváření designu pomocí XML návrhu oproti vytváření designu pomocí zdrojového kódu, je možnost využití nástrojů pro návrh GUI systému Android. Díky těmto nástrojům se vytváření uživatelského prostřední značně zjednoduší, protože veškeré úpravy jsou viditelné v&amp;amp;nbsp;reálném čase. Další výhodou XML návrhu je větší přehlednost a srozumitelnost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elementy vytvořené v&amp;amp;nbsp;XML lze jednoduše používat ve zdrojovém kódu a to pomocí takzvaných identifikátorů. Každý element, který je potřeba jakkoli zpracovat, musí mít následující atribut android:id=“@id/jedinecne_id“, aby jej bylo možné identifikovat ve zdrojovém kódu. Takový atribut musí mít jedinečnou hodnotu, aby nedošlo k&amp;amp;nbsp;jeho záměně s&amp;amp;nbsp;jiným elementem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vizuální komponenty ===&lt;br /&gt;
Rodičovským prvek vizuálních komponent je ''View''. ''View''&amp;lt;nowiki&amp;gt; je dále nedělitelná jednotka, která se používá pro vykreslení na obrazovku a komunikaci s&amp;amp;nbsp;uživatelem. [21]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komunikací s&amp;amp;nbsp;uživatelem se myslí interaktivní ovládání, například nějaká akce po kliknutí, po táhnutí, po dlouhém kliknutí nebo zadání textu či čísla uživatelem. Některé vizuální komponenty jsou již přeprogramované a připravené k&amp;amp;nbsp;použití.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přeprogramované vizuální komponenty:&lt;br /&gt;
&lt;br /&gt;
* ''TextView'' slouží pro zadání nějakého textu či čísla,&lt;br /&gt;
* ''Button'' je tlačítko, které po zmáčknutí vyvolá programově definovanou funkci,&lt;br /&gt;
* ''CheckBox ''je zaškrtávací políčko, které když je zaškrtnuto nabývá hodnoty ''true'', pokud není, nabývá hodnoty ''false''.&lt;br /&gt;
&lt;br /&gt;
Výrazem ''CustomView'' se označují vizuální komponenty, které si programátor sám vytvořil. Tyto vizuální komponenty se vytvářejí programově, poté se na ně může odkazovat v&amp;amp;nbsp;XML návrhu. Tvorba ''CustomView'' je velmi užitečná při vytváření netypických prvků, které nejsou v&amp;amp;nbsp;základní nabídce vizuálních komponent. ''CustomView'' by měl být potomek třídy ''View'' nebo ''ViewGroup'', jinak by nebylo možné jej správně vykreslit. ''CustomView'' může mít definované vlastní atributy v&amp;amp;nbsp;XML. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplikační principy platformy Android ==&lt;br /&gt;
Android aplikace jsou zkompilované zdrojové soubory, které jsou s&amp;amp;nbsp;dalšími prostředky zabalené do balíku s&amp;amp;nbsp;koncovkou apk. Ten slouží k&amp;amp;nbsp;instalaci na zařízení s&amp;amp;nbsp;OS Android &amp;lt;nowiki&amp;gt;a k další distribuci aplikace. [25]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Základní vlastností platformy Android je možnost v aplikaci využívat funkcionalitu jiné aplikace. Díky tomu se zamezí opakovanému vytváření stejné funkcionality a usnadní se tím práce vývojářů. Právě kvůli tomu byly aplikace navrženy jako balíky několika aplikačních komponent, u kterých lze vytvářet instance. Existují čtyři typy aplikačních komponent: ''Activity'', ''Service'', ''Broadcast'' ''receiver'' a ''Content'' ''provider''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Základní struktura aplikace ===&lt;br /&gt;
Aktivity'' ''&amp;lt;nowiki&amp;gt;jsou stavebními kameny pro tvorbu uživatelského rozhraní aplikace. Aplikace může mít neomezený počet aktivit, což je možné chápat jako analogii oken či dialogů aplikace pro stolní počítač. [1 s. 23] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ačkoli je možné, aby aplikace neměli UI, většina zdrojového kódu aplikace bez UI bude obsahovat převážně dodavatele obsahu a služby.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak uživatel prochází mezi obrazovkami aplikace, tak instance aktivit prochází různými stavy. Těmto stavům se říká životní cyklus aktivity. Například, když je aplikace spuštěna poprvé, jde aktivita do popředí systému, říká se, že získala ''focus''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Během procesu změny stavu aktivity, volá Android řadu metod životního cyklu aktivity, v&amp;amp;nbsp;němž se nastavilo UI a další komponenty. Pokud uživatel provede činnost, která spustí jinou aktivitu nebo se přepne do jiné aplikace, systém zavolá další sadu metod životního cyklu aktivity. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Díky volání metod během změny stavu aktivity je možné definovat chování aplikace v&amp;amp;nbsp;určitých fázích životního cyklu aktivity, kdy je aktivita přesouvána do popředí nebo do pozadí systému, tedy aktivita získává nebo ztrácí ''focus''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aktivity také zabraňují zbytečnému využívání procesoru, pokud jej daná aktivita nepotřebuje. Princip životního cyklu aktivity je nesmírně důležitý pro správnou činnost celého mobilního zařízení. Například pokud je obsluhována nějaká aplikace, a najednou přijde příchozí hovor, právě spuštěná aktivita spuštěné aplikace přejde do pozadí a do popředí přejde aplikace pro obsluhu telefonních hovorů. Po úspěšném či neúspěšném dokončení hovoru aktivita aplikace pro obsluhu telefonních hovorů přejde do pozadí, a do popředí přejde aktivita aplikace, která byla předtím spuštěna.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Během života aktivity systém zavolá několik metod životního cyklu aktivity v&amp;amp;nbsp;pořadí podobném pyramidě, viz schéma č. 1. To znamená, že&amp;amp;nbsp;každá fáze životního cyklu aktivity je samostatný krok na této pyramidě. [26] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jakmile systém vytvoří instanci aktivity, každá metoda zpětného volání posune stav aktivity po pyramidě směrem nahoru. Samotný vrchol pyramidy je stav, kdy aktivita komunikuje s&amp;amp;nbsp;uživatelem (má ''focus'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Stavový diagram životního cyklu aktivity.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Stavový diagram životního cyklu aktivity&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [26]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Celý životní cyklus aktivity se skládá ze sedmi metod zpětného volání: onCreate(), onStart(), onResume(), onPause(), onRestart(), onStop(), onDestroy()&amp;lt;nowiki&amp;gt;. V&amp;amp;nbsp;závislosti na složitosti aktivity pravděpodobně nebude potřeba implementovat veškeré metody zpětného volání. Nicméně je důležité každé této metodě porozumět a umět ji použít, aby aktivita pracovala přesně tak, jak se od ní očekává. [6, s. 133]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vlivy změn stavů aktivit na správné chování aplikace:&lt;br /&gt;
&lt;br /&gt;
* aplikace nesmí selhat, pokud uživatel příjme telefonní hovor nebo přepne do jiné aplikace,&lt;br /&gt;
* aplikace nespotřebovává cenné systémové zdroje, zatímco je aplikace neaktivní,&lt;br /&gt;
* aplikace neztrácí rozpracované data či pokrok v&amp;amp;nbsp;aplikaci, pokud uživatel přepne do jiné aplikace, &lt;br /&gt;
* aplikace nesmí selhat, pokud dojde k&amp;amp;nbsp;rotaci obrazovky.&lt;br /&gt;
&lt;br /&gt;
Existuje několik situací, ve kterých aktivita přechází mezi různými stavy. Při každém přechodu aktivity do jiného stavu jsou volány již zmiňované metody zpětného volání, jak je vidět na schématu č. 1. Nicméně jenom tři stavy mohou být statické. To znamená, že aktivita může existovat jenom v&amp;amp;nbsp;jednom ze tří stavů po delší dobu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Stavy, ve kterých se aktivity můžou nacházet:&lt;br /&gt;
&lt;br /&gt;
* ''Resumed'' - v&amp;amp;nbsp;tomto stavu je aktivita v&amp;amp;nbsp;popředí a uživatel s&amp;amp;nbsp;ní může pracovat,&lt;br /&gt;
* ''Paused'' - v&amp;amp;nbsp;tomto stavu je aktivita částečně pozastavena, &lt;br /&gt;
* ''Stopped'' - aktivita je v&amp;amp;nbsp;tomto stavu pro uživatele úplně skrytá, čili je považováno, že je v&amp;amp;nbsp;pozadí. &amp;lt;nowiki&amp;gt;[6, s. 134]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další stavy (''Created'' a ''Started'') jsou přechodné a systém mezi nimi přechází. To znamená, že poté, co se zavolá metoda onCreate(), aktivita přejde do stavu ''Created''. Pak se zavolá metoda onStart() a poté, jakmile aktivita přejde do stavu ''Started, ''se zavolá metoda onResume(). Po tomto volání přejde aktivita to statického stavu ''Resumed'', kde zůstává po delší dobu. Doba, po kterou aktivita zůstane ve stavu ''Resumed,'' se odvíjí od toho, jak uživatel pracuje s&amp;amp;nbsp;danou aktivitou. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Přechody mezi stavy by měli být rychlé, proto by v&amp;amp;nbsp;metodách zpětného volání nemělo docházet ke&amp;amp;nbsp;zbytečnému zdržování. Například při odchodu z&amp;amp;nbsp;aplikace není vhodné ukládat mnoho dat do souboru nebo přistupovat k&amp;amp;nbsp;síťovým prostředkům.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pozastavení a obnovení aktivity'''&lt;br /&gt;
&lt;br /&gt;
Během používání aktivity je&amp;amp;nbsp;někdy nutno aktivitu překrýt jinými grafickými komponenty, například dialog, což způsobí, že se zavolá metoda onPause(). Aktivita poté přejde do stavu ''Paused, ''kde zůstává tak dlouho, jak je v&amp;amp;nbsp;popředí vyvolaná grafická komponenta. Tím, že přejde aktivita do stavu ''Paused''&amp;lt;nowiki&amp;gt; by se měli zastavit činnosti, které nejsou v&amp;amp;nbsp;tomto stavu potřebné, třeba přehrávání videa. [27] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Poté se uživatel může vrátit zpět k&amp;amp;nbsp;aktivitě. Pokud tak učiní, zavolá se metoda onResume() a aktivita přejde do stavu ''Resumed''. V&amp;amp;nbsp;této části by se měla obnovit veškerá předešlá činnost aktivity. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Když aktivita obdrží volání onPause()&amp;lt;nowiki&amp;gt;, může to být známkou toho, že se aktivita na okamžik odmlčí. Uživatel se poté může vrátit zpět. Nicméně je to obvykle první náznak toho, že uživatel opouští aktivitu. [27]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Zastavení a restartování aktivity'''&lt;br /&gt;
&lt;br /&gt;
Správné zastavení a restartování aktivity je důležitý proces v&amp;amp;nbsp;životním cyklu, který umožňuje uživatelům vnímat, že aplikace je stále aktuální a neztrácí progres. Aktivitu zastaví systémové volání metody onStop() a restartuje ji. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metoda onStop() se volá v&amp;amp;nbsp;těchto případech:&lt;br /&gt;
&lt;br /&gt;
* uživatel se vrátí k&amp;amp;nbsp;dříve otevřené aplikaci nebo otevře jinou aplikaci. Jakmile se uživatel vrátí k&amp;amp;nbsp;aplikaci, zavolá se metoda onRestart(),&lt;br /&gt;
* uživatel vyvolá v&amp;amp;nbsp;aplikaci činnost, která spustí jinou aktivitu v&amp;amp;nbsp;rámci aplikace,&lt;br /&gt;
* mezitím co uživatel používá aplikaci, obdrží telefonní hovor.&lt;br /&gt;
&lt;br /&gt;
Pokud aktivita obdrží systémové volání onStop(), přesune se do stavu ''Stopped''. Jakmile je v&amp;amp;nbsp;tomto stavu, systém může zahodit její instanci a uvolnit tak operační paměť, pokud jí má nedostatek. V&amp;amp;nbsp;extrémních případech systém může zrušit činnost celé aplikace bez volání metody onDestroy()&amp;lt;nowiki&amp;gt;. [28]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Existuje několik situací, ve kterých se aktivita ukončí v&amp;amp;nbsp;důsledku přirozeného průběhu aplikace, např. zmáčkne-li uživatel tlačítko zpět nebo dojde k&amp;amp;nbsp;otočení obrazovky, dojde k&amp;amp;nbsp;volání metody finish(). Pokud je tedy aktivita zničena, je zničena i její instance, ale systém si pamatuje, že taková instance existovala. Pokud uživatel například pomocí tlačítka zpět přejde na již zničenou instanci aktivity, systém vytvoří novou instanci zničené aktivity pomocí sady uložených dat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Uložená data, nazývající se ''instance'' ''state'', obsahují informace o stavu zničené aktivity a další doplňující informace identifikující danou aktivitu. Takto uložená data se uchovávají v&amp;amp;nbsp;objektu nazývaném ''Bundle''&amp;lt;nowiki&amp;gt;, jenž je kolekcí dvojic klíč-hodnota. [29]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je-li potřeba uložit jiná data, která jsou důležitá pro obnovení činnosti aktivity do objektu ''Bundle'', musí se uložit v&amp;amp;nbsp;metodě zpětného volání onSaveInstanceState(Bundle). Systém volá tuto metodu, pokud uživatel opouští aktivitu a předá své metodě onSaveInstanceState(Bundle) objekt ''Bundle''. Při návratu uživatele k&amp;amp;nbsp;aktivitě systém zavolá metody onRestoreInstanceState(Bundle) a OnCreate(). Metodě onRestoreInstanceState(Bundle) předá objekt ''Bundle'' s&amp;amp;nbsp;informacemi, které byly uloženy při předcházejícím systémovém volání onSaveInstanceState(Bundle). Tento děj volání metod pro uložení nebo načtení z&amp;amp;nbsp;objektu ''Bundle'' je vyobrazen na schématu č. 2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor: Ukládání proměnných do objektu Bundle.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 2: Ukládání proměnných do objektu ''Bundle ''(stavový diagram)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [29]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Způsob uchování aktivity'''&lt;br /&gt;
&lt;br /&gt;
Aplikace většinou obsahují více aktivit. Každá aktivita by měla být navržena s&amp;amp;nbsp;ohledem na určitý typ akce, kterou může uživatel provést. Například emailové aplikace mají jednu aktivitu pro zobrazení seznamu všech emailů a druhou aktivitu pro zobrazení &amp;lt;nowiki&amp;gt;jednotlivých emailů. Aktivita v&amp;amp;nbsp;určité aplikaci může spustit aktivitu z&amp;amp;nbsp;jiné aplikace. [30]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Android všechny aktivity vkládá do zásobníku s&amp;amp;nbsp;názvem ''Back'' ''stack''. Tento zásobník je typu LIFO, to znamená, že aktivita, která je do zásobníku umístěna jako první, opustí zásobník jako poslední, viz obrázek č. 3. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak můžeme vidět na obrázku č. 3, aktivita číslo 1 spouští aktivitu číslo 2, přičemž se uloží aktivita číslo 1 do zásobníku. Poté aktivita číslo 2 spustí aktivitu číslo 3, aktivita číslo 2 se uloží do zásobníku. Po zmáčknutí navigačního tlačítka „Zpět“ v&amp;amp;nbsp;aktivitě číslo 3 se tato aktivita zahodí a obnoví se aktivita číslo 2. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vkládání aktivit do zásobníku.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 3: Vkládání aktivit do zásobníku a jejich rušení &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [30]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Služby ===&lt;br /&gt;
Služba je část aplikace, která může provádět některé činnosti dlouhodobě na pozadí &amp;lt;nowiki&amp;gt;a neposkytuje žádné UI, přičemž jiná aplikační komponenta může spustit službu a ta bude pracovat v&amp;amp;nbsp;pozadí, i když uživatel přepne do jiné aplikace. Navíc se komponenta může vázat neboli komunikovat s&amp;amp;nbsp;touto službou, dokonce může provádět mezi procesorovou komunikaci (IPC). [31] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Služby mohou pokračovat ve své činnosti, i když byla aktivita, ze které byla tato služba spuštěna, ukončena. Používají se ke stahování či nahrávání dat, přehrávání hudby po ukončení aktivity, atd. Službu lze kdykoliv bezproblémově ukončit. [1, s. 23]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Služby se vyskytují ve dvou stavech:&lt;br /&gt;
&lt;br /&gt;
# ''Started -'' služba je spuštěna, když aplikační komponenta, například aktivita, spustí službu voláním metody startService(). Po spuštění může služba běžet po dobu neurčitou, i když aplikační komponenta, která ji spustila, byla ukončena. Obvykle takto spuštěná služba provádí jednu činnost a nevrací žádný výsledek. Po dokončení činnosti se sama vypne. Používá se například pro stahování dat ze sítě.&lt;br /&gt;
# ''Bound'' ''-'' aplikační komponenta spouští službu a váže se na ni voláním metody bindService(). Vázaná služba nabízí rozhraní klient-server, jenž dovoluje aplikační komponentě komunikovat se spuštěnou službou. Ke stejné službě může získat přístup více aplikačních komponent, ale pokud se všechny odpojí, služba přestane existovat.&lt;br /&gt;
&lt;br /&gt;
== Pravidla vizuálního návrhu pro platformu Android ==&lt;br /&gt;
Společnost Google Inc. navádí vývojáře aplikací, aby vytvářeli vizuální návrh zajímavý, ale zároveň jednoduchý. Uživatel by měl být schopen se v&amp;amp;nbsp;každé aplikaci co nejrychleji zorientovat. Například se upouští od klasických tlačítek, místo nich se používají tlačítka tvořené z&amp;amp;nbsp;ikon, protože člověk se snáze a rychleji orientuje podle obrázků. Do vizuálního návrhu patří také návrh textů. Upřednostňují se krátké jednoduché texty obsahující co nejvíce informací. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UI operačního systému Android se skládá ze tří obrazovek (''Home'' ''screen'', ''All'' ''apps'' ''screen'', ''Recents'' ''screen)''&amp;lt;nowiki&amp;gt;, ze kterých je možné přistupovat do aplikace. Každá aplikace, běžící na platformě Android od verze API 16, má tři společné navigační panely, pomocí kterých je možné ovládat aplikaci. [34] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vizuální rozvržení aplikace.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 4: Vizuální rozvržení aplikace&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [34]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující číselný seznam odpovídá číslům na obrázku č. 4:&lt;br /&gt;
&lt;br /&gt;
# ''Main'' ''ActionBar'' umožňuje vývojáři vytvořit vlastní hierarchii pro navigaci v&amp;amp;nbsp;aplikaci. Panel také slouží k&amp;amp;nbsp;informování uživatele o jeho umístění v&amp;amp;nbsp;aplikaci,&lt;br /&gt;
&lt;br /&gt;
# ''View'' ''Controll'' umožňuje uživateli přepínat mezi různými zobrazeními, která aplikace poskytuje. Zobrazení se většinou skládají z&amp;amp;nbsp;různých funkčních aspektů nebo různého uspořádání dat,&lt;br /&gt;
# ''Content'' ''Area'' je místo pro samotnou aplikaci,&lt;br /&gt;
# ''Split'' ''ActionBar'' je další panel, který se používá, pokud je ''Main'' ''ActionBar'' přeplněn. &lt;br /&gt;
&lt;br /&gt;
=== Mobilní zařízení a obrazovky ===&lt;br /&gt;
Android obsluhuje mobilní zařízení s&amp;amp;nbsp;různou fyzickou velikostí, rozlišením a hustotou obrazovek (dpi). Jelikož mobilní zařízení využívají různé fyzické rozměry a typy obrazovek, jsou kategorizovány do čtyř kategorií v&amp;amp;nbsp;závislosti na jejich úhlopříčce (''small'', ''normal'', ''large'', ''xlarge''), což můžeme vidět na obrázku č. 5. Do čtyř kategorií je také kategorizována hustota obrazovky (dpi), kategorie jsou: ''ldpi'', ''mdpi'', ''hdpi'', ''xhdpi'' (viz obrázek č. 7).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Fyzické rozměry a hustota obrazovky.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 5: Fyzické rozměry a hustota obrazovky&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [35], vlastní zpracování&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pixel zobrazovaný na velké obrazovce s rozlišením 1280 × 800 bude větší než pixel na menší obrazovce se stejným rozlišením. Pokud by se používala jednotka pixel na menších obrazovkách, některé prvky by byly hůře viditelné. Aby k&amp;amp;nbsp;tomuto nedocházelo, platforma Android zavedla jednotku virtuálního pixelu dp, který se počítá na základě hustoty obrazovky (dpi) podle vzorce:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathit{px}=\frac{\mathit{dp}\ast \mathit{dpi}}{160}&amp;lt;/math&amp;gt; &amp;lt;nowiki&amp;gt;[35] &amp;lt;/nowiki&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podle tohoto vzorce Android automaticky dopočítá pro každé mobilní zařízení jednotku dp. Tím se zajistí, že zobrazovaný bod, text nebo odsazení bude na všech mobilních zařízeních téměř totožné, avšak může dojít k&amp;amp;nbsp;nepatrným nepřesnostem.&lt;br /&gt;
&lt;br /&gt;
Pokud se vytvoří vizuální objekt o konstantních rozměrech v&amp;amp;nbsp;jednotkách dp a zobrazí se na dvou zařízeních s&amp;amp;nbsp;různě velkými obrazovkami, bude mít tento objekt na obou zařízeních stejné fyzické rozměry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při návrhu vizuálního layoutu se musí brát ohled na to, že při zobrazení layoutu pro obrazovkou ''small'' bude na obrazovce ''xlarge'' ve většině případů spoustu nevyužitého místa. Proto se v&amp;amp;nbsp;některých situacích vytváří layout pro každou kategorii velikosti obrazovky zvlášť. Poté se umístí do adresářové struktury tak, aby layout vytvořený pro obrazovky ''small'' byl ve složce určené právě pro ně.&lt;br /&gt;
&lt;br /&gt;
Adresářová struktura pro umístění layout:&lt;br /&gt;
&lt;br /&gt;
* res/layout/layout.xml - Layout pro ''normal ''obrazovky (výchozí)&lt;br /&gt;
* res/layout-small/layout.xml - Layout pro ''small'' obrazovky &lt;br /&gt;
* res/layout-large/layout.xml - Layout pro ''large'' obrazovky &lt;br /&gt;
* res/layout-xlarge/layout.xml - Layout pro ''xlarge'' obrazovky &lt;br /&gt;
&lt;br /&gt;
Pokud se tak neučiní, bude se načítat výchozí layout, který je umístěný v&amp;amp;nbsp;adresáři res/layout/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při vytváření obrázku nebo ikony aplikace nelze v&amp;amp;nbsp;grafickém editoru použít jednotku virtuálního pixelu dp, proto se využívá kategorií hustot obrazovky, kde se určí u jednotlivých hustot obrazovek střední hodnota. Střední hodnota kategorie ''mdpi'' je 160dpi, což znamená, že jestliže se dosadí tato hodnota do vzorce a za jednotku dp se dosadí hodnota 1, zjistí se, že velikost jednoho dp je jeden pixel. Z&amp;amp;nbsp;toho plyne, že pro obrazovky s&amp;amp;nbsp;hustotou ''mdpi'' je jeden pixel stejně velký jako dp. Tento poměr 1:1 je vidět i na obrázku č. 6, kde se při špatném zobrazení používají jednotky pixel a při správném zobrazení jednotky dp. Vytváření obrázků a ikon v&amp;amp;nbsp;grafických editorech se proto vytváří nejprve pro obrazovky s&amp;amp;nbsp;hustotou ''mdpi'', a poté se zvětšují nebo zmenšují do požadovaných hustotních kategorií. Velikost stran obrázku se vypočítá podle předcházejícího vzorce. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upravený obrázek se pak umístní do adresářové struktury na místo:&lt;br /&gt;
&lt;br /&gt;
* res/drawable-ldpi/obrazek.png - obrázek pro hustotu obrazovky ''ldpi''&lt;br /&gt;
* res/drawable-mdpi/obrazek.png - obrázek pro hustotu obrazovky ''mdpi''&lt;br /&gt;
* res/drawable-hdpi/obrazek.png - obrázek pro hustotu obrazovky ''hdpi''&lt;br /&gt;
* res/drawable-xhdpi/obrazek.png - obrázek pro hustotu obrazovky ''xhdpi''&lt;br /&gt;
&lt;br /&gt;
Rozdíl mezi špatně a správně vytvořeným a zobrazeným obrázkem je jasně viditelný na obrázku č. 6, kde při špatném zobrazení je na první pohled jasné, že při nepoužití dp dochází k&amp;amp;nbsp;rozdílnému zobrazení prvku na různých obrazovkách. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zobrazení prvků na různých velikostech obrazovky.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 6: Zobrazení prvků na různých velikostech obrazovky&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [35]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Při použití zobrazovacích jednotek pixel (obrázek č. 6, druhá řada) jsou jednotlivé prvky na různých obrazovkách rozdílné. Liší se velikostí i uspořádáním, přičemž tlačítko na větším rozlišení obrazovky je menší (obrázek č. 6, druhá řada, třetí sloupec), než to stejné tlačítko zobrazené na obrazovce s&amp;amp;nbsp;menším rozlišením (obrázek č. 6, druhá řada, první sloupec), kdežto v&amp;amp;nbsp;případě zobrazování prvků pomocí zobrazovacích jednotek dp jsou prvky na všech obrazovkách stejně veliké (obrázek 6, první řada). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grafický styl ===&lt;br /&gt;
Pro vytvoření graficky moderní a uživatelsky příjemné aplikace je vhodné brát ohled na doporučované principy tvorby UI od firmy Google. Principy se vztahují na vhodný výběr barev, umístění objektů a výběr písma. Dokonce se tyto principy vztahují i na tvorbu jednoduchých a srozumitelných textů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Grafické motivy'''&lt;br /&gt;
&lt;br /&gt;
Google poskytuje několik základních grafických motivů, které definují vizuální styl &amp;lt;nowiki&amp;gt;a vlastnosti prvků. Grafický motiv je šablona, která zajišťuje, aby poskytované grafické prvky měli definované vlastnosti, tvar a vzhled. Například dialog má v&amp;amp;nbsp;jednom grafickém motivu odlišné barevné a tvarové kombinace než v&amp;amp;nbsp;jiném motivu. [36][2, s. 48] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motivy jsou navrženy tak, aby vypadali vzhledně a čitelně na všech zařízeních s&amp;amp;nbsp;OS Android. Není potom nutné u některých prvků nastavovat velikostní rozměry, protože prvek v&amp;amp;nbsp;tomto motivu má pro různé velikosti obrazovek předem dopočítanou velikost. Dopočítané velikosti však nejsou prioritní, proto ji vývojář může změnit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mezi grafické motivy od verze API 11 patří:&lt;br /&gt;
&lt;br /&gt;
* ''Holo'' ''Light'',&lt;br /&gt;
* ''Holo'' ''Dark'',&lt;br /&gt;
* ''Holo'' ''Light'' s&amp;amp;nbsp;tmavým ''ActionBar''&amp;lt;nowiki&amp;gt;. [36]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mezi grafické motivy do verze API 11 patří:&lt;br /&gt;
&lt;br /&gt;
* ''Theme'',&lt;br /&gt;
* ''Theme'' ''Light'',&lt;br /&gt;
* ''Theme'' ''Black''&amp;lt;nowiki&amp;gt;. [36]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Zpětná odezva'''&lt;br /&gt;
&lt;br /&gt;
Grafické prvky ovládané uživatelem mají grafickou nebo zvukovou odezvu tak, aby bylo uživateli jasné, zda kliknul na ovládací prvek. Tato grafická odezva také slouží k&amp;amp;nbsp;odlišení vybraných a neaktivních. Grafická odezva je reprezentována změnou barvy či průhledností prvku. Uvádí se, že aktivní prvek je neprůhledný, neaktivní prvek je průhledný ze 70 % a vybraný prvek je poloprůhledný s&amp;amp;nbsp;okrajem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Navigace ===&lt;br /&gt;
Navigace napříč aplikací je funkce systému Android, která zajišťuje, aby uživatel mohl aplikací bezproblémově procházet. Tato navigace se dělí na dvě části. První část je do verze API 11, kde jako hlavní navigační prvek vystupuje tlačítko zpět. Druhý pramen je od verze API 11, kde k&amp;amp;nbsp;tlačítku zpět přibylo tlačítko s&amp;amp;nbsp;obecným označením „nahoru“ a ovládací lišta ''ActionBar''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Princip navigace pomocí tlačítka zpět a up.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 7: Princip navigace pomocí tlačítka zpět a up&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [37]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tlačítko „Zpět“ pracuje na principu návratu k&amp;amp;nbsp;předchozí aktivitě, která byla jako poslední vložena do zásobníku. Například po otevření aplikace Gmail z&amp;amp;nbsp;hlavního menu dojde k&amp;amp;nbsp;zobrazení seznamu příchozích emailů. Pokud se otevře některý email z&amp;amp;nbsp;tohoto seznamu, dojde k&amp;amp;nbsp;zobrazení aktivity pro čtení jednotlivých emailů. Zmáčkne-li se v této fázi aplikace tlačítko „Zpět“, vyvolá se předchozí aktivita pro zobrazení seznamu příchozích emailů. Zmáčknutím tlačítka „Zpět“ v&amp;amp;nbsp;tomto místě dojde k&amp;amp;nbsp;opuštění aplikace. Celý tento proces využití tlačítka „Zpět“ je vyobrazen na obrázku č. 7. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zavedením tlačítka „Nahoru“ (API 11) se tvoří určitá hierarchie dané aplikace. Tlačítko „Nahoru“ se nachází v&amp;amp;nbsp;levé horní části obrazovky, což znamená, že se nachází v &amp;amp;nbsp;''ActionBar''. Reprezentuje jej špičatá závorka spolu s&amp;amp;nbsp;ikonou aplikace. &amp;lt;nowiki&amp;gt;Toto tlačítko slouží pro návrat do předem určené části aplikace. [38][37]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Například při čtení příchozích emailů pomocí aplikace Gmail dojde ke&amp;amp;nbsp;zmáčknutí tlačítka „Nahoru“ a do popředí přejde aktivita pro zobrazení seznamu emailů. Na funkci tohoto tlačítka nemají vliv dříve spuštěné aktivity. Dokonce na toto tlačítko nemá vliv ani aktivita, která se nachází v&amp;amp;nbsp;horní části zásobníku, což neplatí při použití tlačítka „Zpět“. Celý tento popisovaný děj je zachycen na obrázku č. 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Možnosti využití ActionBar'''&lt;br /&gt;
&lt;br /&gt;
''ActionBar'', viz obrázek č. 10, je lišta, která slouží pro zobrazení různých nástrojů a navigací. Tato lišta je umístněna v&amp;amp;nbsp;horní části obrazovky a často v&amp;amp;nbsp;ní bývá umístěna ikona aplikace, vyhledávání, sdílení, informační popisky, nastavení atd. ''ActionBar''&amp;lt;nowiki&amp;gt; je tedy vývojáři definovaná lišta, která obsahuje navigační a ovládací prvky. [38]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Možnost zobrazení ''ActionBar'' přibyla ve verzi API 11. Pokud je potřeba, aby se ''ActionBar'' zobrazil, je třeba nastavit doporučenou verzi na vyšší nebo stejnou jako API 11 v&amp;amp;nbsp;souboru AndroidManifest.xml.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kód pro nastavení minimální a doporučené verze API:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;uses-sdk android:minSdkVersion=&amp;quot;8&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
android:targetSdkVersion=&amp;quot;11&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''ActionBar'' obsahuje řadu ikon reprezentujících různé funkce, další rozbalovací menu &amp;lt;nowiki&amp;gt;a navigační prvky. Tyto funkce a navigační nástroje si vývojář vytváří sám, což vývojáři umožní lehce vytvořit vlastní navigační hierarchii. [38]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor: Lišta ActionBar.png]]&lt;br /&gt;
&lt;br /&gt;
Obrázek č. 8: Lišta ''ActionBar''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Zdroj: [39]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Popis jednotlivých částí obrázku č. 8:&lt;br /&gt;
&lt;br /&gt;
# logo aplikace sloužící jako navigační tlačítko nahoru, pokud jej doprovází šipka vlevo,&lt;br /&gt;
&lt;br /&gt;
# pokud aplikace obsluhuje jiné view, jsou zobrazena v&amp;amp;nbsp;tomto rozbalovacím menu, &lt;br /&gt;
# slouží pro přídavná akční tlačítka,&lt;br /&gt;
# rozbalovací menu obsahující méně používané akční položky, jako nastavení atd.&lt;br /&gt;
&lt;br /&gt;
Nastavení je místo v&amp;amp;nbsp;aplikaci, kde uživatelé mohou modifikovat chování aplikace nebo si aplikaci přizpůsobit, například vzhled aplikace. Položce nastavení se klade malý důraz, protože není často používanou položkou. Většinou se použije pouze k&amp;amp;nbsp;určitému přizpůsobení a poté se víckrát nepoužívá. Proto se položka nastavení umisťuje do přídavného menu, které je reprezentováno třemi tečkami umístěnými nad sebou, nebo hardwarovým tlačítkem. Položky v&amp;amp;nbsp;nastavení by měli být srozumitelné běžným uživatelům a měli by mít jednoduchý popisek, který trefně a jednoduše popisuje to, co daná položka ovládá či modifikuje. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Testování aplikace ===&lt;br /&gt;
Kvalita aplikace přímo ovlivňuje dlouhodobý úspěch aplikace ve smyslu počtu instalací, hodnocení aplikace a udržení si uživatelů. Uživatelé inteligentních zařízení s OS Android očekávají vysoce kvalitní aplikace s důrazem na jejich správnou funkčnost, ale i na design. Při návrhu by měla být respektována metodika pro tvorbu designu aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Firma Google publikovala na vývojářském portálu dokument pod názvem „''App'' Q''uality''&amp;lt;nowiki&amp;gt;“, který definuje sérii testů pro posouzení úrovně kvality aplikace. [40] &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Před publikováním aplikace by měl vývojář podrobit svou aplikaci sérii těchto testů, které hodnotí aplikaci z pohledu správného fungování na různých zařízeních Android, definovaného způsobu navigace v rámci aplikace a designu aplikace. Účelem dokumentu „''App'' Q''uality''“ je tedy definovat základní kvalitativní metriky při testování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dokument obsahuje 3 části:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;nowiki&amp;gt;základní parametry kvality [41],&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;nowiki&amp;gt;parametry kvality aplikací pro tablety [42],&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# &amp;lt;nowiki&amp;gt;pokročilé metody zvyšování kvality [43].&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
První část dokumentu &amp;quot;Základní parametry kvality&amp;quot; se skládá ze čtyř sérií testů:&lt;br /&gt;
&lt;br /&gt;
* design aplikací a interakce s uživatelem,&lt;br /&gt;
* funkcionalita, &lt;br /&gt;
* výkon a stabilita,&lt;br /&gt;
* Obchod Play.&lt;br /&gt;
&lt;br /&gt;
Druhá část dokumentu se zaměřuje na parametry kvality aplikací určené i pro tablety. Tato metodika definuje následující části:&lt;br /&gt;
&lt;br /&gt;
* test základní funkcionality aplikací,&lt;br /&gt;
* optimalizace designu aplikace pro velké displeje,&lt;br /&gt;
* využití nových prvků designu pro velké displeje,&lt;br /&gt;
* správné použití velikosti grafiky a písma,&lt;br /&gt;
* úprava velikosti widgetů pro tablety,&lt;br /&gt;
* implementování plné funkcionality aplikace na tabletu (pokud existuje aplikace pro telefon),&lt;br /&gt;
* správné nastavení cílové verze API,&lt;br /&gt;
* prezentace grafiky pro tablety na obchodě Play.&lt;br /&gt;
&lt;br /&gt;
Třetí část dokumentu se zabývá publikováním aplikace na Google Play ve spojení s&amp;amp;nbsp;kvalitou aplikace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tento dokument definuje následující části:&lt;br /&gt;
&lt;br /&gt;
* reagovat na přání a stížnosti uživatelů,&lt;br /&gt;
* zlepšení stability aplikace a odstranění chyb,&lt;br /&gt;
* maximální rychlost reakce uživatelského rozhraní,&lt;br /&gt;
* profesionální vzhled a estetika aplikace,&lt;br /&gt;
* správná funkcionalita všech funkcí aplikace.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11758</id>
		<title>Analýza informačního systému rozvrhu a možnosti zpracování dat</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11758"/>
		<updated>2013-09-05T14:33:13Z</updated>

		<summary type="html">&lt;p&gt;Tonda: /* Analýza informačního systému rozvrhu a možnosti zpracování dat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Efektivita informačního systému se hodnotí i podle toho, kolik času stráví uživatel než nalezne požadovanou informaci. Avšak také se odvíjí od toho, jak je možné tento systém rozšířit a přizpůsobit novým technologiím. V&amp;amp;nbsp;následující části bude popsána funkcionalita informačního systému EPI s.r.o. a možnosti jeho rozšíření.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis informačního systému EPI ==&lt;br /&gt;
Informační systém EPI s.r.o. se skládá z&amp;amp;nbsp;modulů jako je rozvrh hodin, internetová knihovna, omluva absence, elektronické testy, FTP, modul pro organizování státních závěrečných zkoušek atd. Přihlašování do systému probíhá pomocí LDAP skriptu napsaném v jazyce&amp;amp;nbsp;PHP. LDAP spolupracuje s&amp;amp;nbsp;netwareovým systémem NOVEL, jenž obsahuje přihlašovací údaje studentů, zaměstnanců a učitelů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Úkolem skriptu LDAP je připojit se pomocí LDAP protokolu k&amp;amp;nbsp;LDAP serveru, pro ověření přihlašovacích údajů. [7, s. 354]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;PHP je skriptovací programovací jazyk určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML. Při použití PHP pro dynamické stránky jsou skripty prováděny na straně serveru. K uživateli je přenášen až výsledek jejich činnosti. Interpreta PHP skriptu je možné volat pomocí příkazového řádku, dotazovacích metod HTTP nebo pomocí webových služeb. [5, s. 17]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro přihlášení je potřeba tří údajů: &lt;br /&gt;
&lt;br /&gt;
* jméno, udávající příjmení studenta nebo učitele psané bez diakritiky,&lt;br /&gt;
* kontext je u studentů zkratka studijního kruhu a rok zahájení studia, u učitelů je to „ucitel“ a u zaměstnanců „zamest“,&lt;br /&gt;
* heslo je automaticky generované při zavedení uživatele do systému, skládá se z&amp;amp;nbsp;číslic a písmen.&lt;br /&gt;
&lt;br /&gt;
Nejpoužívanější částí informačního systému EPI s.r.o. je rozvrh hodin, protože je denně využívaný studenty, učiteli a zaměstnanci vysoké školy. Vyznačuje se pestrým, přehledným a jednoduchým uživatelským rozhraním. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura rozvrhu hodin je postavena na skriptovacím jazyce PHP a relační databázi implementované do MYSQL. V&amp;amp;nbsp;této databázi se nachází záznamy obsahující detailní popis jednotlivých vyučovacích hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 3 je zachycen entitně relační diagram školního rozvrhu, skládající se ze sedmi databázových tabulek. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Tonda bc 11.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Entitně relační diagram školního rozvrhu&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schéma č. 3 zachycuje relace mezi jednotlivými tabulkami, tyto relace budou popsány v&amp;amp;nbsp;následujícím textu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_class eviduje studijní kruhy. Každý studijní kruh má v&amp;amp;nbsp;této tabulce vlastní a jedinečný záznam. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_class&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný číselný identifikátor, identifikující každý studijní kruh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| school_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Identifikátor školy, ve které se daný studijní kruh nachází&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Určije zda studijní kruh existuje, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Databázová tabulka epi_class &lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;předcházející tabulce č. 2 jsou definovány jednotlivé sloupce databázové tabulky a jejich krátký popis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject eviduje základní informace o jednotlivých vyučovacích předmětech. Popis jednotlivých databázových sloupců a jejich popis je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_subject&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor jednotlivých vyučovacích předmětů&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_info&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informace o vyučovacím předmětu, zpravidla nevyplněný údaj&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Databázová tabulka epi_subject&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject_type obsahuje záznamy o typu výuky. Typ výuky může být přednáška, cvičení, konzultace atd. Dále tato databázová tabulka obsahuje kód barvy uvedený v&amp;amp;nbsp;textovém řetězci. Barva identifikuje jednotlivé typy výuky. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_type&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název typu výuky, např.: Přednáška, Cvičení, atd.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_color&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Textový údaj, reprezentující barvu buňky &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Databázová tabulka epi_type&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_teacher obsahuje zkratku učitele. Další informace jsou umístěny v&amp;amp;nbsp;tabulce epi_users, kde jsou informace jako jméno, příjmení a tituly. Ostatní informace jsou pro vykreslení rozvrhu hodin nepotřebné. Tabulka epi_teacher je s&amp;amp;nbsp;tabulkou epi_users v&amp;amp;nbsp;relaci 1:N.&lt;br /&gt;
&lt;br /&gt;
Následující tabulka popisuje databázové sloupce z&amp;amp;nbsp;databázových tabulek epi_users a epi_teacher, které jsou potřebné pro vykreslení rozvrhu hodin. Ostatní databázové sloupce budou ignorovány.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Databázová tabulka'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učitele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| user_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor odkazující na tabulku epi_users&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_user&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| first_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jméno uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| last_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Příjmení uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly před jménem&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly za jménem&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Databázová tabulka epi_users a epi_teacher&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_room obsahuje informace o jednotlivých učebnách ve všech kampusech. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_room&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| building_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor budovy&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_capacity&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Obsahuje údaj o kapacitě učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informuje, zda je daná učebna provozuschopná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 5: Databázová tabulka epi_room&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_timetable je nejdůležitější tabulkou v&amp;amp;nbsp;celém relačním modelu. Skládá se zde celý rozvrh hodin. Každý záznam v&amp;amp;nbsp;této tabulce obsahuje odkazy na ostatní, již zmiňované databázové tabulky. Tato tabulka je tedy v&amp;amp;nbsp;relaci s&amp;amp;nbsp;ostatními tabulkami. Relace jsou zobrazeny na schématu č. 1 a v&amp;amp;nbsp;tabulce č. 7. Dále obsahuje informace o počtu hodin, počáteční hodině a datum daného dne. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_record&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_room, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_class, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_teacher, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_subject, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_type, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_date&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Datum, ke kterému se vztahuje záznam&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číslo vyučovací hodiny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour_count&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Počet hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_group&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Skupina, pro kterou daný záznam platí&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 6: Databázová tabulka epi_timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;předcházející tabulky plyne, že tabulka obsahuje cizí klíče, na jejichž základě je vytvořen rozvrh hodin. Díky těmto relacím je snížena velikost záznamů a rychlost dotazování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Možnosti rozšíření informačního systému  ==&lt;br /&gt;
V&amp;amp;nbsp;rámci zlepšování kvality informačního systému EPI, s.r.o. je vhodné tento systém rozšířit do řad jiných platforem. Toto rozšíření by bylo rozsáhlé, a proto v&amp;amp;nbsp;této práci bude rozebrána jen část tohoto rozšíření a to konkrétně rozvrh hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření poskytuje přístup k&amp;amp;nbsp;rozvrhu hodin pro aplikace běžících na různých platformách. Rozšíření je umístěno na školním serveru EPI, s.r.o. odkud je přístupné z&amp;amp;nbsp;jakéhokoliv bodu v&amp;amp;nbsp;rámci vnitřní sítě EPI, s.r.o. i mimo ni. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření se skládá ze dvou PHP skriptů neboli modulů. První modul slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Druhý modul slouží ke stažení určité části rozvrhu hodin ze školní databáze. Moduly byly vytvořeny v&amp;amp;nbsp;rámci této práce a jsou popsány v&amp;amp;nbsp;následujících kapitolách. Pro komunikaci s&amp;amp;nbsp;těmito moduly je potřeba dodržet pravidla jejich komunikačních protokolů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul pro přihlášení ===&lt;br /&gt;
Modul pro přihlášení slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Dotaz o ověření přihlašovacích údajů probíhá pomocí HTTP dotazovací metody POST. Dotaz má následující formát.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Formát požadavku na ověření přihlašovacích údajů http metodou POST: &lt;br /&gt;
&lt;br /&gt;
login:přihlašovací_jméno &lt;br /&gt;
&lt;br /&gt;
pass:přihlašovací_heslo &lt;br /&gt;
&lt;br /&gt;
kontext:kontext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modul pro ověření přihlašovacích údajů spolupracuje s&amp;amp;nbsp;LDAP serverem díky čemuž je možné ověřit, zda jsou přihlašovací údaje správné. Po odeslání přihlašovacích údajů modulem do LDAP serveru tento server vyhodnotí požadované údaje a vrátí modulu výsledek ve formě logického datového typu ''boolean''. Pokud modul obdrží logickou hodnotu false, indikující neúspěšné ověření údajů, odešle tuto hodnotu klientské straně. Klientskou stranou se myslí aplikace, jež žádá o ověření přihlašovacích údajů HTTP metodou POST. Obdrží-li hodnotu true, taktéž tuto hodnotu odešle klientské straně. Informace, jež modul zprostředkovává tazateli, jsou ve formě prostého textu (text bez formátování). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul rozvrhu hodin ===&lt;br /&gt;
Modul pro získání dat rozvrhu hodin získává data z&amp;amp;nbsp;MYSQL databáze již zaběhnutého rozvrhu hodin. Dotazování o data z&amp;amp;nbsp;tohoto modulu probíhá pomocí HTTP metody POST. Tento modul zprostředkovává data ve dvou formách, které se odvíjí od konkrétního dotazu. Formy dotazů jsou popsány v&amp;amp;nbsp;následujícím komunikačním protokolu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání seznamů pomocí HTTP metody POST jsou tři. První dotaz získá seznam aktivních učitelů, druhý dotaz získá seznam aktivních studijních kruhů a třetí dotaz získá seznam aktivních místností. Tyto seznamy jsou důležité například při výběru, pro který studijní kruh nebo pro kterého učitele bude zobrazen rozvrh hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Získání seznamu učitelů, studijních kruhů a místností:&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních učitelů: &lt;br /&gt;
&lt;br /&gt;
seznam:ucitel&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních studijních kruhů: &lt;br /&gt;
&lt;br /&gt;
seznam:kruh&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních místností:&lt;br /&gt;
&lt;br /&gt;
seznam:mistnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem je serializovaný prostý text s&amp;amp;nbsp;vnitřní strukturou JSON, který reprezentuje seznam učitelů, studijních kruhů nebo místností. Tyto data jsou seřazeny sestupně. Serializace je proces, kdy se objekt transformuje do holého textu. Struktura JSON je pole objektů využívající strukturu klíč:hodnota. Jednotlivé objekty se oddělují pomocí složených závorek. Mezi jednotlivými objekty jsou čárky. Jeden objekt může obsahovat mnoho prvků klíč:hodnota.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Příklad výstupu pro dotaz seznam:ucitel je:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CJ&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CL&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;DV&amp;quot;}, &lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;PT“},&lt;br /&gt;
&lt;br /&gt;
… ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat rozvrhu hodin jsou taktéž prováděny pomocí HTTP metody POST. Jednotlivé dotazy musí obsahovat tři údaje. Prvním údajem je zkratka učitele, místnosti nebo studijního kruhu. Další dva údaje reprezentují interval dat ve formátu „den-měsíc-rok“. Data rozvrhu hodin všech dnů z&amp;amp;nbsp;tohoto intervalu budou staženy ze školní databáze. Interval dat je (date_from, date_to), kde date_from reprezentuje začátek intervalu a date_to reprezentuje konec intervalu. Vynechá-li se údaj reprezentující konec intervalu, tedy bude-li HTTP dotaz ochuzen o údaj date_to, PHP modul automaticky tento chybějící údaj doplní a to o údaj date_from+6. To znamená, že interval stahovaných dat bude 7 dnů, tedy jeden týden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat pomocí HTTP metody POST z&amp;amp;nbsp;rozvrhu hodin pro určité období:&lt;br /&gt;
&lt;br /&gt;
* Data pro učitele za určité období:&lt;br /&gt;
&lt;br /&gt;
teacher:zkratka_ucitele, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
* Data pro studijní kruhy za určité období:&lt;br /&gt;
&lt;br /&gt;
class:zkratka_kruhu, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
* Data pro místnosti za určité období:&lt;br /&gt;
&lt;br /&gt;
room:zkratka_mistnosti, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem jsou data z&amp;amp;nbsp;databáze, které jsou serializovány a následně strukturovány metodou JSON, jejímž výstupem je prostý text s&amp;amp;nbsp;vnitřní strukturou JSON. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Část odpovědi pro dotaz room:K10, date_from:2012-02-03, date_to:2012-02-03 s&amp;amp;nbsp;vnitřní strukturou JSON:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[{„rv_date&amp;quot;:&amp;quot;2012-02-03&amp;quot;,&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;rv_hour&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;rv_hour_count&amp;quot;:&amp;quot;4&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;room_title_sm&amp;quot;:&amp;quot;K10&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;subject_title_sm&amp;quot;:&amp;quot;FIT&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;teacher_title&amp;quot;:&amp;quot;BN&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;type_color&amp;quot;:&amp;quot;7FFFD4&amp;quot;}, … ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura odpovědi odpovídá záznamům z&amp;amp;nbsp;databázové tabulky epi_timetable, která je v&amp;amp;nbsp;relaci 1:N s&amp;amp;nbsp;ostatními popisovanými tabulkami.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11757</id>
		<title>Analýza informačního systému rozvrhu a možnosti zpracování dat</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Anal%C3%BDza_informa%C4%8Dn%C3%ADho_syst%C3%A9mu_rozvrhu_a_mo%C5%BEnosti_zpracov%C3%A1n%C3%AD_dat&amp;diff=11757"/>
		<updated>2013-09-05T14:32:43Z</updated>

		<summary type="html">&lt;p&gt;Tonda: Vytvorená stránka „=Analýza informačního systému rozvrhu a možnosti zpracování dat=  Efektivita informačního systému se hodnotí i podle toho, kolik času stráví uživatel než...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Analýza informačního systému rozvrhu a možnosti zpracování dat=&lt;br /&gt;
&lt;br /&gt;
Efektivita informačního systému se hodnotí i podle toho, kolik času stráví uživatel než nalezne požadovanou informaci. Avšak také se odvíjí od toho, jak je možné tento systém rozšířit a přizpůsobit novým technologiím. V&amp;amp;nbsp;následující části bude popsána funkcionalita informačního systému EPI s.r.o. a možnosti jeho rozšíření.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Popis informačního systému EPI ==&lt;br /&gt;
Informační systém EPI s.r.o. se skládá z&amp;amp;nbsp;modulů jako je rozvrh hodin, internetová knihovna, omluva absence, elektronické testy, FTP, modul pro organizování státních závěrečných zkoušek atd. Přihlašování do systému probíhá pomocí LDAP skriptu napsaném v jazyce&amp;amp;nbsp;PHP. LDAP spolupracuje s&amp;amp;nbsp;netwareovým systémem NOVEL, jenž obsahuje přihlašovací údaje studentů, zaměstnanců a učitelů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Úkolem skriptu LDAP je připojit se pomocí LDAP protokolu k&amp;amp;nbsp;LDAP serveru, pro ověření přihlašovacích údajů. [7, s. 354]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;PHP je skriptovací programovací jazyk určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML. Při použití PHP pro dynamické stránky jsou skripty prováděny na straně serveru. K uživateli je přenášen až výsledek jejich činnosti. Interpreta PHP skriptu je možné volat pomocí příkazového řádku, dotazovacích metod HTTP nebo pomocí webových služeb. [5, s. 17]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro přihlášení je potřeba tří údajů: &lt;br /&gt;
&lt;br /&gt;
* jméno, udávající příjmení studenta nebo učitele psané bez diakritiky,&lt;br /&gt;
* kontext je u studentů zkratka studijního kruhu a rok zahájení studia, u učitelů je to „ucitel“ a u zaměstnanců „zamest“,&lt;br /&gt;
* heslo je automaticky generované při zavedení uživatele do systému, skládá se z&amp;amp;nbsp;číslic a písmen.&lt;br /&gt;
&lt;br /&gt;
Nejpoužívanější částí informačního systému EPI s.r.o. je rozvrh hodin, protože je denně využívaný studenty, učiteli a zaměstnanci vysoké školy. Vyznačuje se pestrým, přehledným a jednoduchým uživatelským rozhraním. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura rozvrhu hodin je postavena na skriptovacím jazyce PHP a relační databázi implementované do MYSQL. V&amp;amp;nbsp;této databázi se nachází záznamy obsahující detailní popis jednotlivých vyučovacích hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na schématu č. 3 je zachycen entitně relační diagram školního rozvrhu, skládající se ze sedmi databázových tabulek. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Tonda bc 11.png]]&lt;br /&gt;
&lt;br /&gt;
Schéma č. 1: Entitně relační diagram školního rozvrhu&lt;br /&gt;
&lt;br /&gt;
Zdroj:Vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schéma č. 3 zachycuje relace mezi jednotlivými tabulkami, tyto relace budou popsány v&amp;amp;nbsp;následujícím textu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_class eviduje studijní kruhy. Každý studijní kruh má v&amp;amp;nbsp;této tabulce vlastní a jedinečný záznam. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_class&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný číselný identifikátor, identifikující každý studijní kruh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| school_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Identifikátor školy, ve které se daný studijní kruh nachází&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název studijního kruhu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Určije zda studijní kruh existuje, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 1: Databázová tabulka epi_class &lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;předcházející tabulce č. 2 jsou definovány jednotlivé sloupce databázové tabulky a jejich krátký popis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject eviduje základní informace o jednotlivých vyučovacích předmětech. Popis jednotlivých databázových sloupců a jejich popis je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_subject&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor jednotlivých vyučovacích předmětů&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Celý název vyučovacího předmětu&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_info&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informace o vyučovacím předmětu, zpravidla nevyplněný údaj&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 2: Databázová tabulka epi_subject&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_subject_type obsahuje záznamy o typu výuky. Typ výuky může být přednáška, cvičení, konzultace atd. Dále tato databázová tabulka obsahuje kód barvy uvedený v&amp;amp;nbsp;textovém řetězci. Barva identifikuje jednotlivé typy výuky. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_type&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jedinečný identifikátor&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název typu výuky, např.: Přednáška, Cvičení, atd.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_color&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Textový údaj, reprezentující barvu buňky &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 3: Databázová tabulka epi_type&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Databázová tabulka epi_teacher obsahuje zkratku učitele. Další informace jsou umístěny v&amp;amp;nbsp;tabulce epi_users, kde jsou informace jako jméno, příjmení a tituly. Ostatní informace jsou pro vykreslení rozvrhu hodin nepotřebné. Tabulka epi_teacher je s&amp;amp;nbsp;tabulkou epi_users v&amp;amp;nbsp;relaci 1:N.&lt;br /&gt;
&lt;br /&gt;
Následující tabulka popisuje databázové sloupce z&amp;amp;nbsp;databázových tabulek epi_users a epi_teacher, které jsou potřebné pro vykreslení rozvrhu hodin. Ostatní databázové sloupce budou ignorovány.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Databázová tabulka'''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učitele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Indikuje, zda je tento předmět aktivní, nabývá hodnot 1 a 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| user_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_teacher&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor odkazující na tabulku epi_users&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_user&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| first_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Jméno uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| last_name&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Příjmení uživatele&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly před jménem&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| title2&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| epi_users&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Tituly za jménem&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 4: Databázová tabulka epi_users a epi_teacher&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_room obsahuje informace o jednotlivých učebnách ve všech kampusech. Popis jednotlivých databázových sloupců je v&amp;amp;nbsp;následující tabulce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_room&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| building_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor budovy&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title_sm&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Zkratka učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_title&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Název učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_capacity&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Obsahuje údaj o kapacitě učebny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_active&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Informuje, zda je daná učebna provozuschopná&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 5: Databázová tabulka epi_room&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tabulka epi_timetable je nejdůležitější tabulkou v&amp;amp;nbsp;celém relačním modelu. Skládá se zde celý rozvrh hodin. Každý záznam v&amp;amp;nbsp;této tabulce obsahuje odkazy na ostatní, již zmiňované databázové tabulky. Tato tabulka je tedy v&amp;amp;nbsp;relaci s&amp;amp;nbsp;ostatními tabulkami. Relace jsou zobrazeny na schématu č. 1 a v&amp;amp;nbsp;tabulce č. 7. Dále obsahuje informace o počtu hodin, počáteční hodině a datum daného dne. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Název sloupce '''&lt;br /&gt;
| style=&amp;quot;border-top:1pt solid #000001;border-bottom:2.25pt solid #000001;border-left:1pt solid #000001;border-right:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| '''Popis'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| id_record&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Unikátní číselný identifikátor záznamu v&amp;amp;nbsp;tabulce&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| room_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_room, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| class_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_class, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| teacher_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_teacher, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| subject_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_subject, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| type_id&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číselný identifikátor záznamu v&amp;amp;nbsp;tabulce epi_type, relace 1:N&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_date&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Datum, ke kterému se vztahuje záznam&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Číslo vyučovací hodiny&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_hour_count&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Počet hodin&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| rv_group&lt;br /&gt;
| style=&amp;quot;border:1pt solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.206cm;padding-right:0.191cm;&amp;quot;| Skupina, pro kterou daný záznam platí&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Tabulka č. 6: Databázová tabulka epi_timetable&lt;br /&gt;
&lt;br /&gt;
Zdroj: vlastní&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;předcházející tabulky plyne, že tabulka obsahuje cizí klíče, na jejichž základě je vytvořen rozvrh hodin. Díky těmto relacím je snížena velikost záznamů a rychlost dotazování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Možnosti rozšíření informačního systému  ==&lt;br /&gt;
V&amp;amp;nbsp;rámci zlepšování kvality informačního systému EPI, s.r.o. je vhodné tento systém rozšířit do řad jiných platforem. Toto rozšíření by bylo rozsáhlé, a proto v&amp;amp;nbsp;této práci bude rozebrána jen část tohoto rozšíření a to konkrétně rozvrh hodin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření poskytuje přístup k&amp;amp;nbsp;rozvrhu hodin pro aplikace běžících na různých platformách. Rozšíření je umístěno na školním serveru EPI, s.r.o. odkud je přístupné z&amp;amp;nbsp;jakéhokoliv bodu v&amp;amp;nbsp;rámci vnitřní sítě EPI, s.r.o. i mimo ni. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozšíření se skládá ze dvou PHP skriptů neboli modulů. První modul slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Druhý modul slouží ke stažení určité části rozvrhu hodin ze školní databáze. Moduly byly vytvořeny v&amp;amp;nbsp;rámci této práce a jsou popsány v&amp;amp;nbsp;následujících kapitolách. Pro komunikaci s&amp;amp;nbsp;těmito moduly je potřeba dodržet pravidla jejich komunikačních protokolů. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul pro přihlášení ===&lt;br /&gt;
Modul pro přihlášení slouží k&amp;amp;nbsp;ověření přihlašovacích údajů do školní sítě. Dotaz o ověření přihlašovacích údajů probíhá pomocí HTTP dotazovací metody POST. Dotaz má následující formát.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Formát požadavku na ověření přihlašovacích údajů http metodou POST: &lt;br /&gt;
&lt;br /&gt;
login:přihlašovací_jméno &lt;br /&gt;
&lt;br /&gt;
pass:přihlašovací_heslo &lt;br /&gt;
&lt;br /&gt;
kontext:kontext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modul pro ověření přihlašovacích údajů spolupracuje s&amp;amp;nbsp;LDAP serverem díky čemuž je možné ověřit, zda jsou přihlašovací údaje správné. Po odeslání přihlašovacích údajů modulem do LDAP serveru tento server vyhodnotí požadované údaje a vrátí modulu výsledek ve formě logického datového typu ''boolean''. Pokud modul obdrží logickou hodnotu false, indikující neúspěšné ověření údajů, odešle tuto hodnotu klientské straně. Klientskou stranou se myslí aplikace, jež žádá o ověření přihlašovacích údajů HTTP metodou POST. Obdrží-li hodnotu true, taktéž tuto hodnotu odešle klientské straně. Informace, jež modul zprostředkovává tazateli, jsou ve formě prostého textu (text bez formátování). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiplatformní modul rozvrhu hodin ===&lt;br /&gt;
Modul pro získání dat rozvrhu hodin získává data z&amp;amp;nbsp;MYSQL databáze již zaběhnutého rozvrhu hodin. Dotazování o data z&amp;amp;nbsp;tohoto modulu probíhá pomocí HTTP metody POST. Tento modul zprostředkovává data ve dvou formách, které se odvíjí od konkrétního dotazu. Formy dotazů jsou popsány v&amp;amp;nbsp;následujícím komunikačním protokolu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání seznamů pomocí HTTP metody POST jsou tři. První dotaz získá seznam aktivních učitelů, druhý dotaz získá seznam aktivních studijních kruhů a třetí dotaz získá seznam aktivních místností. Tyto seznamy jsou důležité například při výběru, pro který studijní kruh nebo pro kterého učitele bude zobrazen rozvrh hodin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Získání seznamu učitelů, studijních kruhů a místností:&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních učitelů: &lt;br /&gt;
&lt;br /&gt;
seznam:ucitel&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních studijních kruhů: &lt;br /&gt;
&lt;br /&gt;
seznam:kruh&lt;br /&gt;
&lt;br /&gt;
# Seznam aktivních místností:&lt;br /&gt;
&lt;br /&gt;
seznam:mistnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem je serializovaný prostý text s&amp;amp;nbsp;vnitřní strukturou JSON, který reprezentuje seznam učitelů, studijních kruhů nebo místností. Tyto data jsou seřazeny sestupně. Serializace je proces, kdy se objekt transformuje do holého textu. Struktura JSON je pole objektů využívající strukturu klíč:hodnota. Jednotlivé objekty se oddělují pomocí složených závorek. Mezi jednotlivými objekty jsou čárky. Jeden objekt může obsahovat mnoho prvků klíč:hodnota.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Příklad výstupu pro dotaz seznam:ucitel je:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CJ&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;CL&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;DV&amp;quot;}, &lt;br /&gt;
&lt;br /&gt;
{&amp;quot;teacher_title&amp;quot;:&amp;quot;PT“},&lt;br /&gt;
&lt;br /&gt;
… ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat rozvrhu hodin jsou taktéž prováděny pomocí HTTP metody POST. Jednotlivé dotazy musí obsahovat tři údaje. Prvním údajem je zkratka učitele, místnosti nebo studijního kruhu. Další dva údaje reprezentují interval dat ve formátu „den-měsíc-rok“. Data rozvrhu hodin všech dnů z&amp;amp;nbsp;tohoto intervalu budou staženy ze školní databáze. Interval dat je (date_from, date_to), kde date_from reprezentuje začátek intervalu a date_to reprezentuje konec intervalu. Vynechá-li se údaj reprezentující konec intervalu, tedy bude-li HTTP dotaz ochuzen o údaj date_to, PHP modul automaticky tento chybějící údaj doplní a to o údaj date_from+6. To znamená, že interval stahovaných dat bude 7 dnů, tedy jeden týden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dotazy pro získání dat pomocí HTTP metody POST z&amp;amp;nbsp;rozvrhu hodin pro určité období:&lt;br /&gt;
&lt;br /&gt;
* Data pro učitele za určité období:&lt;br /&gt;
&lt;br /&gt;
teacher:zkratka_ucitele, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
* Data pro studijní kruhy za určité období:&lt;br /&gt;
&lt;br /&gt;
class:zkratka_kruhu, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
* Data pro místnosti za určité období:&lt;br /&gt;
&lt;br /&gt;
room:zkratka_mistnosti, &lt;br /&gt;
&lt;br /&gt;
date_from:yyyy-MM-dd,&lt;br /&gt;
&lt;br /&gt;
date_to:yyyy-MM-dd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výstupem jsou data z&amp;amp;nbsp;databáze, které jsou serializovány a následně strukturovány metodou JSON, jejímž výstupem je prostý text s&amp;amp;nbsp;vnitřní strukturou JSON. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Část odpovědi pro dotaz room:K10, date_from:2012-02-03, date_to:2012-02-03 s&amp;amp;nbsp;vnitřní strukturou JSON:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[{„rv_date&amp;quot;:&amp;quot;2012-02-03&amp;quot;,&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;rv_hour&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;rv_hour_count&amp;quot;:&amp;quot;4&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;room_title_sm&amp;quot;:&amp;quot;K10&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;subject_title_sm&amp;quot;:&amp;quot;FIT&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;teacher_title&amp;quot;:&amp;quot;BN&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&amp;quot;type_color&amp;quot;:&amp;quot;7FFFD4&amp;quot;}, … ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktura odpovědi odpovídá záznamům z&amp;amp;nbsp;databázové tabulky epi_timetable, která je v&amp;amp;nbsp;relaci 1:N s&amp;amp;nbsp;ostatními popisovanými tabulkami.&lt;/div&gt;</summary>
		<author><name>Tonda</name></author>
		
	</entry>
</feed>