Das Verzeichnis app dient als eigenständiges gradle-Modul. Daher besitzt es eine eigene build.gradle Datei. Diese enthält diverse Einstellungen für das Modul. Unter anderem  wird hier definiert, für welche Android-Versionen die App gedacht ist,  welche Bibliotheken benötigt werden und was die Id der App ist.

ProGuard ist eine ByteCode Optimierer für Java. Ziel von ProGuard ist, den ByteCode der App soweit wie möglich zu reduzieren. Zur Konfiguration wird die proguard-rules.pro verwendet. In dieser Datei wird festgelegt, dass Funktions- und  Variablennamen nicht durch ProGuard umbenannt werden sollen. Außerdem  werden Warnmeldungen über fehlende Abhängigkeiten von BiWeekly  ignoriert, da diese nicht im Rahmen der App verwendet werden. Zuletzt  müssen zwei Klassen aus der Optimierung ausgenommen, da sonst ProGuard  diese notwendigen Klassen aus der App entfernen würde.

src

Der src-Ordner enthält verschiedene Ordner für  verschiedene Verwendungszwecke. In der StuV-Survival App bedeutet dies,  dass sich drei Unterordner finden. Der Ordner main enthält den eigentlichen Quellcode der App. Im Ordner test finden sich in Java programmierte Tests, welche keine Android-Laufzeit benötigen, während in androidTest sich die Testfälle befinden, die nur auf dem Android-Betriebssystem funktionieren.

main

Das AndroidManifest.xml enthält wichtige  Informationen für Android. So müssen in dieser Datei die verschiedenen  Komponenten der App, wie Activities, Services, Provider und Receiver  definiert werden. Gleichzeitig muss auch jede einzelne benötigte  Berechtigung angegeben werden. Sind die Komponenten nicht in dieser  Datei definiert, so werden die Berechtigungen nicht gegeben oder die App  stürzt beim Zugriff auf diese Komponenten ab.

Neben dieser Datei sind auch die beiden Unterordner java und res hier lokalisiert. Unterhalb von java finden sich nach den Java-Paketen sortiert die verschiedenen Quellcode-Dateien, während res ausgeschrieben für resources steht und verschiedene Dateien, wie Bilder, Style-Informationen und Übersetzungen enthält.

java

Unterhalb von java liegt in Packages sortiert der  Java-Quellcode der App. Im Folgenden wird auf die unterschiedlichen  Pakete eingegangen. Da alle Pakete unterhalb der App-Id de.stuv_mosbach.stuvapp liegt, lass ich diesen Pfad im folgenden weg.

about

Das Package about enthält die Activity und den Adapter für die Über Sektion. Die Daten dafür werden aus den values Ordnern aus den Ressourcen geholt. Neben den statischen Werten fügt die  Activity einen Eintrag mit Informationen über die App hinzu.

contentProvider

In diesem Paket liegen die verschiedenen Quellcode-Dateien, die für  die Datenbank benötigt werden. Für jede Tabelle existiert ein  sogenanntes Contract, welches die Struktur der Tabelle und die Befehle  zum Anlegen und löschen der Datenbank definiert.

Neben diesen Definitionen finden sich in der DBHelper.java die Funktionen, die durch Android zum Anlegen und Aktualisieren der Datenbank benutzt werden. In der Klasse Provider.java befindet sich die Datenbank-Abstraktion. In dieser Klasse werden die URIs auf die verschiedenen CRUD Operationen gemappt.

listFragments

Dieses Package dient für die notwendigen Komponenten der einzelnen  Listen. Diese umfassen die Neuigkeiten der Studierendenvertretung, die  aktuellen Termine, Vorlesungen und Veranstaltungen.

Bis auf den Newsfeed der StuV besteht jede der Listen aus einem  Fragment, welches sich um das Layout und Struktur der Oberfläche  kümmert. Diese erben einige wichtige Funktionen von den Eltern-Klassen  direkt im listFragment Package.

Die Liste für die Neuigkeiten der StuV enthält zusätzlich noch  Ansichten für den Bilderroll (eine horizontale Bilderleiste) und eine  Detailansicht eines News-Eintrags.

lunch

Im Lunch Package ist nur eine einzige Klasse. Diese  enthält nur einzige Klasse. Diese Klasse ist ein Fragment mit der  Struktur für die Vorschalt-Seite des Mensaplans.

Für das SwipeToRefresh in den Listen muss das Layout angepasst  werden. Der dafür notwendige Rahmen und die benötigten Funktionen sind  in der Klasse MySwipeToRefreshLayout im navigation Package drin.

Die andere Klasse enthält die Funktionen, die für den Wechsel der  verschiedenen Inhalte in der App notwendig sind. Die meisten Elemente in  der Navigationsleiste starten eine Funktion im NavigationHelper an.

notifications

Dieses Package enthält die Klassen für die Benachrichtigungen über die Nachrichten der StuV.

parser

Hier findet sich der Parser für die Liste der Kurse und der  respektiven URL, sowie zwei Container-Klassen für die Nachrichten und  Neuigkeiten der StuV.

settings

Zum einen gibt es hier eine Klasse, die Konstanten für die verschiedenen Einstellung der App enthält.

Zum anderen finden sich hier auch die beiden Klassen für die  Darstellung der Eigenschaften in der App. In dem Fragment existieren für  einige der Einstellungen Funktionen die bei einem Wechsel des Wertes  ausgeführt werden. Unter anderem betrifft dies die Synchronisation in  den System-Kalender von Android. Diese Funktionen sind notwendig, damit  z. B. bei der Deaktivierung der Synchronisierung in den System-Kalender  dort die Termine gelöscht werden.

startup

Die verschiedenen Ansichten, die beim ersten Start der App angezeigt  werden, befinden sich in diesem Verzeichnis. Um die verschiedenen  Ansichten in der richtigen Reihenfolge anzuzeigen und verschiedene  Aktionen durchzuführen, erfolgt die Anzeige über die Klasse Startup. Dabei wird unter anderem der Kurs abgefragt.

sync

Die Synchronisation der diversen Datenquellen ist in diesem Package  geregelt. Die Synchronisation ist als Service ausgestaltet. Der Start  der Synchronisation erfolgt jedoch über die SyncAdapter Klasse.

Damit in der App der Status der Synchronisation angezeigt werden  kann, musste ein Observer gebaut werden. Dieser findet sich in der  Klasse MySyncStatusObserver.

Um für die verschiedenen Speicher in der App nicht Code unnötig zu verdoppeln, gibt es im Package localSources Repräsentationen der einzelnen Quellen. Diese sind unter anderem dafür  zuständig, die Informationen aus den lokalen Quellen mit den Daten von  den Servern abzugleichen und nur Änderungen abzuspeichern.

Das Abrufen der Informationen dagegen erfolgt über die einzelnen Klassen im Package syncer. Neben dem Abruf erfolgt auch das Verarbeiten der Informationen in diesen Klassen.

tutorial

Hier liegt das Layout für die Tutorial Anzeige in der App.

util

Das util Package enthält eine Vielzahl von Klassen, die an den verschiedensten Stellen der App verwendet werden. Dies umfasst:

  • eine Klasse zur Account-Nutzung von Android (notwendig für die Synchronisierung)
  • eine globale Konstanten
  • einen Fix für das horizontale Scrollen von Bildern
  • eine generische Activity zum Anzeigen von PDFs
  • die Klasse, die die API-Befehle umsetzt
  • einige Funktionen die für die korrekte Farbdarstellung benötigt wird
  • eine Klasse, die bei Updates der Apps bestimmte Befehle ausführt.

veventutils

Es gibt verschiedene Stellen in der App die Notwendigkeit Texte für  die Veranstaltungen und Vorlesungen zu formatieren. Unter anderem ist  die für Benachrichtigungen und die Listen in der App notwendig. Die  hierfür notwendigen Funktionen finden sich in diesem Package.

webview

Die in diesem Package liegenden Klassen ermöglichen es an  verschiedenen Stellen in der App, Webseiten im Rahmen der App  anzuzeigen. Hierzu wird beim Aufruf die entsprechende URL übergeben.

widget

Hier werden die notwendigen Komponenten für das Widget der App  gruppiert. Beim Anlegen des Widgets erscheint eine Activity, die es dem  Anwender ermöglicht, bestimmte Eigenschaften des Widgets zu  konfigurieren.

res

Bilder befinden sich unterhalb von res nach Größen sortiert in den Verzeichnissen drawable bis drawable-xxxhdpi.  Ein Bild sollte dabei in jedem dieser Verzeichnisse mit verschiedenen  Auflösungen liegen. Bei der Nutzung von Androids-Standard Icons wird  dies automatisch durch die IDE erledigt. Eigene Bilder müssen dagegen  entsprechend angepasst werden. Die Auswahl der korrekten Auswahl erfolgt  automatisch durch Android.

Die Ordner layout und layout-large-land enthalten die Struktur und Anordnung der verschiedenen Ansichten in der App. Als Sprache kommt XML mit einigen Android-spezifischen Namensräumen zum Einsatz. Über die  Nutzung der verschiedenen Ordner ist es möglich, für unterschiedliche  Gerätearten unterschiedliche Anordnungen zu verwenden. Wie bereits bei  den Bildern erfolgt auch hier die Auswahl der korrekten Datei durch das  Betriebssystem.

Der Ordner menu enthält, ebenfalls als XML-Datei,  die verschiedenen Menüs in der App. Für jeden Eintrag muss eine Id und  ein Text angegeben werden. Die meisten Einträge enthalten zusätzlich ein  Bild.

Die verschiedenen einzelnen Sprachelemente befinden sich in den verschiedenen values Ordnern. Der Order values selber enthält diese Daten für die Sprache Englisch, während die deutschen Elemente im Ordner values-de liegen. Weitere Sprachen können über zusätzliche Ordner hinzugefügt werden. Neben den Sprachinformationen liegen in den Ordnern auch über die Dateien attrs.xml, colors.xml, dimens.xml und styles.xml die Informationen über Farben und Abstände in den verschiedenen  Ansichten. Hier erfolgt wie bei den Struktur-Dateien selber eine  Abhängigkeit zu Geräten über die Dateien in den Ordnern values-large-land und values-v21 die jeweilige Datei im Ordner values überschreiben.

Im Ordner xml liegen weitere Metainformationen für die App. Die Datei authenticator.xml wird durch Android benötigt, damit es ein Konto gibt, an das sich die Synchronisation der App binden kann. Über die Datei shortcuts.xml können die Verlinkungen  auf dem Homescreen angepasst werden, sodass dort über den langen Druck  auf das App-Icon der Mensaplan schneller erreichbar ist.

test

In diesem Verzeichnisbaum finden sich diverse JUnit-Testfälle. Diese  befinden sich dabei in den gleichen Verzeichnissen unterhalb von test wie unterhalb von main.  Die Ausführung der Testfälle erfordert dabei kein laufendes Android.  Benötigte Android Abhängigkeiten werden mit dem Mockito-Framework  simuliert.

androidTest

Die Testfälle unterhalb dieses Verzeichnisbaums erfordern ein  laufendes Android-Betriebssystem. Die Testfälle hier testen vor allem,  dass die Activities erfolgreich starten und testen einige Tastendrücke  innerhalb der Ansichten.