Drei-Schichten-Architektur
Für
eine möglichst gute Wartbarkeit und Wiederverwendbarkeit des Codes wird
eine 3-Schichten Architektur angestrebt (Präsentation / Logik /
Datenhaltung). Die Präsentationsschicht ist durch die Vorgabe der
Android-Develpment-Tool Entwicklungsumgebung bereits separat gehalten.
Die Definition von Layouts (im XML-Format) und die Verwaltung von
Literalen und grafischen Ressourcen in eigenen Ressource-Verzeichnissen
gewährleistet die Austauschbarkeit (und auch übersichtliche Wartbarkeit)
dieser Schicht.
Die
Realisierung einer eigenen Datenhaltungsschicht erfolgt durch einen
entsprechenden Aufbau der Klassen im Programmcode und eine
Zusammenfassung dieser Klassen in eigene Java-Packages. Die kompletten
Datenhaltung ist (mit Ausnahme von wenigen lokalen
Einstellungsparametern) am Flickr-Fotoserver. Durch diese separate
Datenhaltungsschicht ist die Anbindung der Applikation an einen anderen
Fotoserver mit vertretbarem Aufwand möglich.
Programmcode
Der Programmcode der Applikation KeepInTouch ist öffentlich verfügbar. Unter der Internetadresse https://kitjku.googlecode.com/svn/trunk/KeepInTouch
kann der komplette Sourcecode inkl. der Resource-Files als
Eclipse-Projekt heruntergeladen werden. Ein Zugangscode ist nur für die
Veränderung der Daten notwendig (Speicherung erfolgt als
Subversion-Folder).
Benutzerrollen
In
dieser Anwendung gibt es nicht die häufig vorzufindenden Benutzerrollen
wie Administrator und normaler Benutzer. Der Benutzer meldet sich
hingegen nur ein mal beim ersten Start der App mit dem eigenen
Flickr-Konto an und hat somit Zugriff auf die eigenen Daten und auf alle
öffentlichen Alben sowie Fotos, die Kontakte auf Flickr für diesen
Account freigegeben haben. Es wäre jedoch denkbar eine Einstellung zur
Verfügung zu stellen, die es dem Benutzer ermöglicht bestimmte Bereich
zu sperren. Somit könnte zum Beispiel ein erfahrener Nutzer die App
einrichten und dann alle Bereiche die von dem tatsächlichen verbergen,
damit nichts mehr verstellt werden kann.
Funktionalitäten
Folgende Funktionalitäten sind implementiert:
- Anmeldung mit OAuth am Flickr Fotoserver
- Übersichtsanzeige der Fotos als Liste und als Grid: Zoomfunktion mit Anpassung der Größe des Vorschaubildes und der Anzahl der Spalten bei Grid-Darstellung. Ein Click auf ein Foto öffnet die Einzelbilddarstellung (mit Zoom/Verschieben/Rotation).
- Anzeige als Einzelbild: Zoomfunktion (2-Finger-touch), Verschieben (1-Finger); Rotation (Drehung mit 2-Finger Touch), Weiterblättern mit 2-Finger-Touch in gleiche Richtung, Weiterblättern mit 1-Finger-Touch und Verschieben des Bildes über die Mitte des Bildschirmes hinaus
- Gallery-Darstellung: Übersichtsleiste und das ausgewählte, größer angezeigte Einzelbild; Blättern durch Auswahl in Übersichtsleiste oder Verschieben des Bildes über die Hälfte des Bildschirmes
- Anzeige der Fotos mit Kartendarstellung: Auf Google-Maps Karten werden die Fotos (welche auch Geo-Koordinaten zugeordnet haben) am jeweiligen Ort eingeblendet. Die Karte ist umschaltbar zwischen Straßenkarte und Satellitenbild durch wiederholtes anklicken des Menü-Buttons für die Anzeige der Karte. Initial wird der Zoom-Faktor so gewählt, dass alle Fotos angezeigt werden und durch Zoom / Verschieben kann auf einzelne Fotos fokussiert werden. durch Auswahl eines Fotos schiebt sich die Position dieses Fotos in das Zentrum und Titel/Hinweise zum Foto werden angezeigt. Durch Anklicken des Fotos wird Einzelbilddarstellung (mit Zoom auf Foto etc.) geöffnet.
- Hochladen von Fotos aus der Gallery des Smartphones oder mit Neuaufnahme eines Bildes; Drehen des Bildes vor dem Upload möglich; Beschriftung des Bildes;
- Suchen von anderen Flick-Benutzern mit dem User-Namen
- Anzeige der Fotos von Kontakten
Funktionalitäten, die vorgesehen sind, jedoch nicht implementiert sind:
- Hinzufügen von gefundenen Benutzern als Kontakt (Freund oder Familie)
- Anzeige der Fotos mit Filterung nach diversen Kriterien (Album, Hochladedatum etc)
Probleme, welche bei der Implementierung auftraten:
- Flickr API unterstützt nicht das Hinzufügen von Kontakten und somit konnte diese Funktionalität nicht implementiert werden.
- Manchmal auftretende Abstürze mit Fehlerursache “Out of Memory”. Treten auf, wenn Bildverarbeitung durchgeführt wird (z.b. Bitmap neu erstellen, um die Rotation eines neuen Bildes durchzuführen).