Module app

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.