AndMote XBMC - Steuerung des XBMC Media Centers
- Autor: Christoph Amrein (camrein@hsr.ch)
- Status: Thema ok. Bitte Aufgabenstellung formulieren und Vorarbeiten dokumentieren.
- Zurück zu Miniprojekte_HS2011
Ziel ist es, eine Android App zu entwickeln, welche es erlaubt, das sich im Netzwerk befindliche Open Source Media Center XBMC (http://www.xbmc.org ) zu steuern.
Der Zugriff auf XBMC wird über das HTTP Protokoll mittels JSON-RPC bewerkstelligt.
Erwartete Resultate:
- Die App funktioniert vollumfänglich auf meinem Nexus S (Gingerbread 2.3.6)
- Die App kann einwandfrei auf meine im Netzwerk befindliche XBMC Installation zugreifen (mittels W-LAN)
- Die Basis bedienelemente einer Fernbedienung sind implementiert (Play/Pause, Fast Forward, Rewind, Skip Next, Skip Previous)
Nachtrag:
Da die Entwicklung wesentlich besser vorangeht als erwartet, habe ich persönlich Zusätzliche Anforderungen gestellt:
- Abfrage der Filmliste + Anzeige der Filmdetails
- Abfrage der Serienliste + Staffelliste + Episodenliste + Anzeige der Episodendetails
- Die Mediensteuerung wird auf eine Komplette Fernbedienung erweitert (Menü Navigationsfunktionen etc.)
- Ich versuche die Covers für entsprechende Einträge abzufragen und anzuzeigen
- Implementation von gestures
Da das gesamte JSON RPC Interface erst mit dem Eden Release stark entwickelt wird, gestaltet es sich relativ schwierig ohne ausführliche Schnittstellendokumentationen solche Funktionen einzubinden (Trial and Error).
Zusätzlich versuche ich mittels Fragmenten Honeycomb Support in die App einzubinden (in erster Linie für die Unterstützung des Motorola Xoom).
Vorgaben/Infrastruktur/Abhängigkeiten
- Lizenz: closed source
- Java SE 6
- Android SDK
- XBMC 11 Eden (aktuell nur als Nightly Build verfügbar, Stand 01.10.2011) mit aktiviertem Webserver
- W-LAN
Bemerkung: XBMC 10.1 Dharma (aktuelle Stable Version, Stand 01.10.2011) wird nicht verwendet, da viele JSON RPC Methoden noch nicht in diese Version implementiert wurden.
XBMC
Android
UPnP
- Woche 38: Themenwahl
- Woche 39:
- Wiki Seite erfassen
- Eclipse mit Android SDK aufsetzen
- Überblick über Android SDK verschaffen
- Überblick über die verfügbaren XBMC JSON RPC Methoden verschaffen
- Absetzen eines ersten JSON RPC Befehls um die funktionalität zu testen
- Woche 40:
- Grobe Architektur der Android APP erstellen
- Subversion Repository erstellen
- Woche 41:
- Untersuchung des XBMC Thumbnail Systems (zur Abfrage von Covern)
- Je nach Resultat wird die Coveranzeige implementiert
- Erweiterung der Detailanzeige für Episoden (Anzeige der Wertung und sonstige "nützliche" Informationen)
- Implementation der Detailanzeige für Filme
- Implementation der Möglichkeit das angezeigte Element (Episode/Film) direkt abzuspielen
- Woche 42:
- Gestures überarbeiten (die aktuellen sind nicht sauber/nur testweise implementiert)
- Switch für die Untertitel
- Switch für die Audiostreams
- Anzeige der aktuellen Wiedergabe
- Anbindung der Hardware Steuerelemente (D-PAD) für die Ferbendieunungsfunktionen
- Woche 43:
- Screenshot Funktion
- Sortierung der Staffel und Filmliste (übriges scheint korrekt sortiert zu kommen)
- Detailansicht von Fernsehsendungen
- Anbindung an Audio Bibliothek
- Woche 44:
- Überarbeitung/Verschönerung des start Interfaces
- Standardisierung des Zugriffs auf die Einstellungen (Menu Button => Preferences)
- Code refactoring
- Woche 45:
- Abschluss der Überarbeitung/Verschönerung des start Interfaces
- Proguard optimieren für Release Exports (exportiertes APK lässt sich installieren, aber die App nicht ausführen)
- Woche 46:
- Implementation der Unterstützung von mehreren Hosts/XBMC Installationen
- Woche 47:
- Woche 48:
- Quick Host-Switch implementieren
- Woche 49:
- Implementation von Widgets
- Woche 50:
- Widgets Honeycomb optimieren
- UPnP implementation (in erster Phase als Auto-Discovery feature)
Originalplanung (nicht mehr relevant, da Entwicklung weit schneller voran geht als ursprünglich angenommen)
- Woche 41: Grobes App Design entwerfen
- Woche 42-44: Implementation der Medien Befehle in die Android App (play, pause, rewind etc.)
- Woche 45-46: Erstellen eines GUIs zur Erfassung eines XBMC HTTP-Servers
- Woche 47: Testing
- Woche 48: Bug-Fixing
- Woche 49-50: Reserve
- Woche 51: Kurzpräsentation
-
Aufgabenstellung formuliert
-
Eclipse mit Android SDK aufsetzen
-
Grobe App Architektur erstellen
-
Architektur möglichst Honeycombkompatibel machen
-
Subversion Repository erstellen
-
XBMC JSON-RPC Schnittstelle erstellen
-
Grobes App Design entwerfen
-
Medien Befehle implementieren
-
Gestures implementieren
-
GUI zur Erfassung eines XBMC HTTP-Servers implementieren
-
App Icon erstellen
-
Anzeige der Filmliste
-
Anzeige der Filmdetails
-
Anzeige von Filmcovern
-
Abspielen des angezeigten Films
-
Anzeige der Serienliste
-
Anzeige der Staffelliste
-
Anzeige der Episodenliste
-
Anzeige der Episodendetails
-
Anzeige von Episodencover
-
Abspielen der angzeigten Episode
-
Anzeige des aktuell abgespielten Elements
-
Untertitel wechselbar
-
Audiostreams wechselbar
-
Anbindung von Hardware Steuerelementen
-
Screenshot Funktion
-
Sortierung der Staffel und Filmliste (übriges scheint korrekt sortiert zu kommen)
-
Detailansicht von Fernsehsendungen
-
Anbindung an Audio Bibliothek
-
Überarbeitung/Verschönerung des start Interfaces
-
Standardisierung des Zugriffs auf die Einstellungen (Menu Button => Preferences)
-
Code refactoring
-
Verwendung von Interfaces anstelle der genauen Klasse (z.B. bei Listen: List anstelle von ArrayList)
-
Deaktivierung des Menüs auf Serien-Ebene (Detailansicht)
-
Weiterverfolgung der entdeckten Android Bugs (bzw. der Backwards Compatibility Library) und deren Behebung (gegebenenfalls eigene Umgangslösung implementieren) => Fixed in rev5 (Dezember release)
- Analyse der Gesture-Funktion und Tracking der Ursache der Probleme mit "Simplen" Gestures (hoch/runter, links/rechts) und dementsprechende Behebung
- Cover flow (à la Android Gallery)
- Abspiellisten erstellen
- Hinzufügen einzelner Elemente
- Hinzufügen von ganzen Staffeln
- Caching
- Covers/Thumbnails
- Listen
- Film-/Episodendetails
-
Möglichkeit zur Erfassung mehrer XBMC Installationen/Hosts
- Widgets
Woche 39:
- Wiki Seite erfasst
- Android SDK installiert
- Grobes einarbeiten in Android SDK
- Kurzes überfliegen der von XBMC zur Verfügung gestellten Methoden
- Erster JSON-RPC Command Test mittels Firefox und dem Addon HttpRequester (VideoPlayer.PlayPause)
Woche 40:
- In Android eingearbeitet
- Android Fragmente studiert
- Grobe Applikationsarchitektur entworfen
- Architektur Honeycombkompatibel gemacht (u.a. Fragmente)
- Verschiedene Listenanzeigen implementiert
- Filmliste
- Serienliste
- Staffelliste
- Episodenliste
- Anzeige von Episodendetails implementiert
- Fernbedienungsfunktionen implementiert
- Mediennavigation (play/pause, rewind, forward etc.)
- Menünavigation (up/down, select, home etc.)
- Gesture Funktionen implementiert
- Host Editor implementiert
- Einstellungen werden in die SharedPreferences der App gespeichert
- Passwort wird mittels XOR-Schlüssel, Caesar-Verschlüsselung und Base64 geschützt (leider konnte ich keine passende Android Funktion für das sichere speichern von Passwörtern finden)
- Alle übrigen Einstellungen werden im klartext abgelegt
- App Icon erstellt
Woche 41:
- Thumbnail-Anzeige für ausgewählte Episode implementiert
- Abspielmöglichkeit für Episoden implementiert
- Filmdetail & Filmcover Anzeige implementiert
- Listen und Detailanzeigen refactored (Auslagerung diverser Codefragmente in Abstrakte Klassen)
- Analyse diverser Möglichkeiten für die Implementation eines Coverflows
- Mittels Gallery Widget von Android (sieht leider nicht so schön aus)
- Mittels Android "Image Picker" bei welchem sämtliche Covers vorerst auf die SD-Karte mit speziellen Namen gecached werden. Diese Namen können dann von der App dementsprechend geparsed werden (Fehler-/Manipulationsanfällig).
- Fernbedienungsfunktionen erweitert
- da einige Funktionen im JSON-RPC Protokoll (noch) nicht vorhanden sind, wurde auf das HTTP-API zurückgegriffen
- Menü und Informationsanzeige implementiert
- Langes halten von Navigationsbuttons führt nun zu einer repetitiven Ausführung
Woche 42:
- Anzeige der aktuellen Wiedergabe implementiert
- Funktion zum wechseln & aktivieren/deaktivieren der Untertitel
- Funktion zum wechseln des benutzten Audiostreams
- Fernbedienungsfunktionen erweitert
- Die Steuerung ist nun ebenfalls mit Hardware-Bedienelementen (z.B: D-PAD und Tastatur) möglich
- Tastatureingaben werden 1:1 an XBMC weitergeleitet
- Code refactoring
- Auslagerung der Anzeigefunktionen
- Unterstützung für Android 4.0 implementiert
- "Paging" (Android ViewPager) für die Detailanzeigen implementiert (Episoden und Filme)
Woche 43:
- Screenshot Funktion implementiert
- Sortierung der Staffel und Filmliste implementiert
- Detailansicht von Fernsehsendungen implementiert
- Anbindung an Audio Bibliothek implementiert
- Filterung nach Album
- Filterung nach Genre
- Filterung nach Interpret
Woche 44
- Überarbeitung/Verschönerung des start Interfaces (nicht abgeschlossen, noch nicht alle Buttons wurden gezeichnet)
- Standardisierung des Zugriffs auf die Einstellungen (Menu Button => Preferences)
- Code refactoring
Woche 45:
- Überarbeitung des Start-Interfaces abgeschlossen
- Proguard optimiert, exportierte Apps lassen sich nun einwandfrei installieren
Woche 46:
- Multi-Host Unterstützung implementiert.
Woche 47:
Woche 48:
- Quick-Host Switch implementiert
Woche 49:
Woche 50:
- Android compatibility Package upgraded
-
UPnP Experimentell eingebaut
-
Host Auto-Discover
-
Anzeige der Lautstärke von UPnP MediaRenderern
- Filterfunktion bei Listen eingebaut
- UPnP Funktion wieder entfernt (zu Ressourcen-Intensive Library)
- Präsentation vorbereitet
- Animationen für Tablet-Version angepasst
Woche 51: