From 555cf013ae431bb2375dca6a21231e2d8763a5e6 Mon Sep 17 00:00:00 2001 From: Daniel Spittank Date: Sun, 5 Feb 2017 12:58:22 +0100 Subject: [PATCH] =?UTF-8?q?Android-Implementierung=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ursprüngliche Implementierung für Android hinzugefügt. --- source/Android/__init__.py | 0 source/Android/alle.py | 22 +++ source/Android/android.py | 2 + source/Android/dateien/Datei.py | 71 +++++++ source/Android/dateien/DateiSystemElement.py | 104 ++++++++++ source/Android/dateien/Verzeichnis.py | 29 +++ source/Android/dateien/__init__.py | 0 source/Android/multimedia/AudioPlayer.py | 178 ++++++++++++++++++ source/Android/multimedia/AudioRecorder.py | 58 ++++++ source/Android/multimedia/BildRecorder.py | 51 +++++ source/Android/multimedia/JNIAudioRecorder.py | 91 +++++++++ source/Android/multimedia/Player.py | 144 ++++++++++++++ source/Android/multimedia/Recorder.py | 96 ++++++++++ source/Android/multimedia/VideoRecorder.py | 53 ++++++ source/Android/multimedia/__init__.py | 0 source/Android/sensoren/__init__.py | 0 source/Android/signale/AudioSignal.mp3 | Bin 0 -> 159703 bytes source/Android/signale/AudioSignal.py | 60 ++++++ source/Android/signale/Signal.py | 22 +++ source/Android/signale/TextSignal.py | 45 +++++ source/Android/signale/VibrationsSignal.py | 45 +++++ source/Android/signale/__init__.py | 0 source/Android/sprache/Sprachausgabe.py | 55 ++++++ source/Android/sprache/Spracheingabe.py | 39 ++++ source/Android/sprache/__init__.py | 0 source/Android/ui/__init__.py | 0 source/Android/ui/dialoge/Dialog.py | 79 ++++++++ source/Android/ui/dialoge/EingabeDialog.py | 103 ++++++++++ .../Android/ui/dialoge/EntscheidungsDialog.py | 152 +++++++++++++++ source/Android/ui/dialoge/PasswortDialog.py | 39 ++++ source/Android/ui/dialoge/__init__.py | 0 source/Android/werkzeuge/System.py | 14 ++ source/Android/werkzeuge/Zufallsgenerator.py | 86 +++++++++ source/Android/werkzeuge/Zwischenablage.py | 43 +++++ source/Android/werkzeuge/__init__.py | 0 35 files changed, 1681 insertions(+) create mode 100644 source/Android/__init__.py create mode 100644 source/Android/alle.py create mode 100644 source/Android/android.py create mode 100644 source/Android/dateien/Datei.py create mode 100644 source/Android/dateien/DateiSystemElement.py create mode 100644 source/Android/dateien/Verzeichnis.py create mode 100644 source/Android/dateien/__init__.py create mode 100644 source/Android/multimedia/AudioPlayer.py create mode 100644 source/Android/multimedia/AudioRecorder.py create mode 100644 source/Android/multimedia/BildRecorder.py create mode 100644 source/Android/multimedia/JNIAudioRecorder.py create mode 100644 source/Android/multimedia/Player.py create mode 100644 source/Android/multimedia/Recorder.py create mode 100644 source/Android/multimedia/VideoRecorder.py create mode 100644 source/Android/multimedia/__init__.py create mode 100644 source/Android/sensoren/__init__.py create mode 100644 source/Android/signale/AudioSignal.mp3 create mode 100644 source/Android/signale/AudioSignal.py create mode 100644 source/Android/signale/Signal.py create mode 100644 source/Android/signale/TextSignal.py create mode 100644 source/Android/signale/VibrationsSignal.py create mode 100644 source/Android/signale/__init__.py create mode 100644 source/Android/sprache/Sprachausgabe.py create mode 100644 source/Android/sprache/Spracheingabe.py create mode 100644 source/Android/sprache/__init__.py create mode 100644 source/Android/ui/__init__.py create mode 100644 source/Android/ui/dialoge/Dialog.py create mode 100644 source/Android/ui/dialoge/EingabeDialog.py create mode 100644 source/Android/ui/dialoge/EntscheidungsDialog.py create mode 100644 source/Android/ui/dialoge/PasswortDialog.py create mode 100644 source/Android/ui/dialoge/__init__.py create mode 100644 source/Android/werkzeuge/System.py create mode 100644 source/Android/werkzeuge/Zufallsgenerator.py create mode 100644 source/Android/werkzeuge/Zwischenablage.py create mode 100644 source/Android/werkzeuge/__init__.py diff --git a/source/Android/__init__.py b/source/Android/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/alle.py b/source/Android/alle.py new file mode 100644 index 0000000..5742269 --- /dev/null +++ b/source/Android/alle.py @@ -0,0 +1,22 @@ +from velamentum.dateien.DateiSystemElement import DateiSystemElement +from velamentum.dateien.Datei import Datei +from velamentum.dateien.Verzeichnis import Verzeichnis +from velamentum.multimedia.Recorder import Recorder +from velamentum.multimedia.AudioRecorder import AudioRecorder +from velamentum.multimedia.BildRecorder import BildRecorder +from velamentum.multimedia.VideoRecorder import VideoRecorder +from velamentum.multimedia.Player import Player +from velamentum.multimedia.AudioPlayer import AudioPlayer +from velamentum.signale.Signal import Signal +from velamentum.signale.AudioSignal import AudioSignal +from velamentum.signale.TextSignal import TextSignal +from velamentum.signale.VibrationsSignal import VibrationsSignal +from velamentum.sprache.Spracheingabe import Spracheingabe +from velamentum.sprache.Sprachausgabe import Sprachausgabe +from velamentum.ui.dialoge.Dialog import Dialog +from velamentum.ui.dialoge.EingabeDialog import EingabeDialog +from velamentum.ui.dialoge.EntscheidungsDialog import EntscheidungsDialog +from velamentum.ui.dialoge.PasswortDialog import PasswortDialog +from velamentum.werkzeuge.System import System +from velamentum.werkzeuge.Zufallsgenerator import Zufallsgenerator +from velamentum.werkzeuge.Zwischenablage import Zwischenablage diff --git a/source/Android/android.py b/source/Android/android.py new file mode 100644 index 0000000..c973844 --- /dev/null +++ b/source/Android/android.py @@ -0,0 +1,2 @@ +import androidhelper +androide = androidhelper.Android() diff --git a/source/Android/dateien/Datei.py b/source/Android/dateien/Datei.py new file mode 100644 index 0000000..f37b02b --- /dev/null +++ b/source/Android/dateien/Datei.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +from velamentum.dateien.DateiSystemElement import DateiSystemElement + +class Datei(DateiSystemElement): + """Die Klasse Datei dient dem Umgang mit Dateien. + + Attribute: + --- von 'DateiSystemElement' geerbte --- + groesse (Zahl): Die Größe der Datei in Byte. + inhalt (Zeichenkette): Der Inhalt der Datei. + """ + + def __init__(self, pPfad, pSofortEinlesen=False): + """Konstruktor. Initialisiert die Datei. + + Parameter: + pPfad (Zeichenkette): Der Pfad der Datei. + [optional] pSofortEinlesen: Gibt an, ob die Datei direkt bei der + Initialisierung eingelesen werden soll. [Standardwert: False] + """ + DateiSystemElement.__init__(self, pPfad) + if(pSofortEinlesen): + self.einlesen() + + def nenneGroesse(self): + """Anfrage. Gibt die Größe der Datei in Byte zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Die Größe der Datei in Byte. + """ + tSize = 0 + if self.istVorhanden(): + try: + tSize = os.path.getsize(self.pfad) + except: + print("Fehler. Auf '%s' kann nicht zugegriffen werden." + % self._pfad) + + def einlesen(self): + """Auftrag. Liest die Datei in das Attribut 'inhalt' ein. + + Parameter: + --- keine --- + """ + if self.istVorhanden(): + try: + tDatei = open(self._pfad, "r") + self.inhalt = tDatei.read() + tDatei.close() + except: + print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad) + else: + self.inhalt = "" + + def speichern(self): + """Auftrag. Schreibt den Wert des Attributs 'inhalt' in die Datei. + + Parameter: + --- keine --- + """ + try: + tDatei = open(self._pfad, "w") + tDatei.write(self.inhalt) + tDatei.close() + except: + print("Fehler. Speichern von '%s' nicht möglich." % self._pfad) + + # Attribute (verdeckte Getter und Setter) + groesse = property(nenneGroesse, doc="Die Größe der Datei in Byte.") diff --git a/source/Android/dateien/DateiSystemElement.py b/source/Android/dateien/DateiSystemElement.py new file mode 100644 index 0000000..03ac758 --- /dev/null +++ b/source/Android/dateien/DateiSystemElement.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Modul zur Erkennung des MIME-Types des Elements. +import mimetypes, shutil, os.path + +class DateiSystemElement(object): + """Die Klasse DateiSystemElement stellt die Basisklasse für Elemente + im Dateisystem (z.B. Dateien und Verzeichnisse) dar. + + Anmerkungen: + - Eigentlich sollte ein DateiSystemElement seinen eigenen Pfad nicht + kennen. Auch das Umbenennen und weitere Verwaltungsfunktionen gehören + eher zum übergeordneten Dateisystem. Aus praktikabilitätsgründen + wurde allerdings diese Implementierung gewählt. + - Für die Erkennung des MIME-Types wird derzeit lediglich die + Erweiterung des Elements berücksichtigt. + + Attribute: + name (Zeichenkette): Der Name des Elements im Dateisystem. + pfad (Zeichenkette): Der Pfad des Elements im Dateisystem. + typ (Zeichenkette): Gibt den MIME-Type des Elements an. + verzeichnis (Zeichenkette): Der Pfad des übergeordneten Verzeichnisses + der Datei. + """ + + def __init__(self, pPfad): + """Konstruktor. Initialisiert das DateiSystemElement. + + Parameter: + pPfad (Zeichenkette): Der Pfad des DateiSystemElements. + """ + # Slash am Ende entfernen + if pPfad.endswith('/'): + pPfad = pPfad[:-1] + + self._pfad = pPfad + self._erkenneTyp() + + def _erkenneTyp(self): + """Hilfsmethode. Erkennt den Typ des DateiSystemElements und speichert. + diesen im Attribut 'typ'. + """ + if os.path.isfile(self._pfad): + # Erkennung des MIME-Types. Es wird lediglich die Erweiterung + # der Datei geprüft. + self.typ = mimetypes.guess_type(self._pfad, False) + elif os.path.isdir(self._pfad): + self.typ = "inode/directory" + elif os.path.islink(self._pfad): + self.typ = "inode/symlink" + elif os.path.ismount(self._pfad): + self.typ = "inode/mount-point" + else: + self.typ = "application/octet-stream" + + def istVorhanden(self): + """Anfrage. Prüft, ob das Element im Dateisystem bereits existiert. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): True falls das Element im Dateisystem bereits + existiert, sonst False. + """ + return os.path.exists(self._pfad) + + def nennePfad(self): + """Anfrage. Gibt den Pfad des Elements im Dateisystem zurück.""" + return self._pfad + + def nenneVerzeichnis(self): + """Anfrage. Gibt das übergeordnete Verzeichnis des Elements zurück.""" + return os.path.dirname(self._pfad) + + def nenneName(self): + """Anfrage. Gibt den Namen des Elements im Dateisystem zurück.""" + return os.path.basename(self._pfad) + + def nenneTyp(self): + """Anfrage. Gibt den Typ des Elements zurück (als MIME-Type).""" + return self.typ + + def verschieben(pPfad): + """Auftrag. Hängt das Element im Dateisystem um. + + Parameter: + pPfad (Zeichenkette): Gibt den neuen Pfad im Dateisystem an. + """ + # Verschieben, falls Element bereits existiert. + if os.path.exists(pPfad): + try: + shutil.move(self._pfad, pPfad) + self._pfad = pPfad + except: + print("Fehler. Verschieben von '%s' nicht möglich." % self._pfad) + + # Attribute (verdeckte Getter und Setter) + pfad = property(nennePfad, verschieben, doc="Der Pfad des " \ + "DateiSystemElements im Dateisystem.") + name = property(nenneName, doc="Der Name des DateiSystemElements im" \ + "Dateisystem.") + verzeichnis = property(nenneVerzeichnis, doc="Der Pfad des übergeordneten" \ + " Verzeichnisses des DateiSystemElements im Dateisystem.") + + diff --git a/source/Android/dateien/Verzeichnis.py b/source/Android/dateien/Verzeichnis.py new file mode 100644 index 0000000..3569b9c --- /dev/null +++ b/source/Android/dateien/Verzeichnis.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from velamentum.dateien.DateiSystemElement import DateiSystemElement +import os + +class Verzeichnis(DateiSystemElement): + """Die Klasse Verzeichnis dient dem Umgang mit Verzeichnissen. + + Attribute: + --- von 'DateiSystemElement' geerbte --- + """ + + def __init__(self, pPfad): + """Konstruktor. Initialisiert das Verzeichnis. + + Parameter: + pPfad (Zeichenkette): Der Pfad des Verzeichnisses. + """ + DateiSystemElement.__init__(self, pPfad) + + def nenneKinder(self): + """Anfrage. Gibt eine Liste der Kinder des Verzeichnisses zurück.""" + tListe = [] + + try: + tListe = os.listdir(self._pfad) + except: + print("Fehler. Einlesen von '%s' nicht möglich." % self._pfad) + + return tListe diff --git a/source/Android/dateien/__init__.py b/source/Android/dateien/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/multimedia/AudioPlayer.py b/source/Android/multimedia/AudioPlayer.py new file mode 100644 index 0000000..4e5918d --- /dev/null +++ b/source/Android/multimedia/AudioPlayer.py @@ -0,0 +1,178 @@ +# -*- coding: utf-8 -*- +import time +import random +import velamentum.dateien.Datei +from velamentum.multimedia.Player import Player +from velamentum.android import * + +class AudioPlayer(Player): + """Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer + Datei. + + Attribute: + --- von 'Player' geerbte --- + datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll. + dauer (Zahl): Gesamtdauer der Datei in Millisekunden. + position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden. + wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von + vorne beginnen soll. + """ + + def __init__(self, pDatei, pSofortWiedergeben=False): + """Konstruktor. Initialisiert den Player. + + Parameter: + pDatei (Datei): Datei, die wiedergegeben werden soll. + [optional] pSofortWiedergeben (Wahrheitswert): Soll die Datei direkt + nach der Initialisierung wiedergegeben werden? + """ + self.datei = pDatei + # Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig + # wiederzugebender Streams. + self._id = "%s%04d" % (pDatei.nenneName(), random.randint(0,8191)) + + if self.datei.istVorhanden(): + androide.mediaPlay(self.datei.nennePfad(), self._id, + pSofortWiedergeben) + self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"]) + else: + print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad()) + + def __del__(self): + """Destruktor. Stellt sicher, dass die Wiedergabe beim Löschen des + Objekts beendet wird. + + Parameter: + --- keine --- + """ + androide.mediaPlayClose(self._id) + + def nenneDauer(self): + """Anfrage. Gibt die Gesamtdauer der Datei zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden. + """ + return self.dauer + + def nennePosition(self): + """Anfrage. Gibt die aktuelle Position der Wiedergabe zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden. + """ + return int(androide.mediaPlayInfo(self._id)[1]["position"]) + + def setzePosition(self, pPosition): + """Auftrag. Legt die aktuelle Position der Wiedergabe fest. + + Parameter: + pPosition (Zahl): Neue Position in Millisekunden. + """ + # Position auf gültigen Bereich (0 - dauer) beschränken. + if pPosition > self.dauer: + pPosition = self.dauer + elif pPosition < 0: + pPosition = 0 + + androide.mediaPlaySeek(pPosition, self._id) + + + def nenneDatei(self): + """Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll. + + Parameter: + --- keine --- + + Rückgabe (Datei): Datei, die wiedergegeben werden soll. + """ + return self.datei + + def setzeDatei(self, pDatei): + """Auftrag. Legt die Datei fest, die wiedergegeben werden soll. + + Parameter: + pDatei (Datei): Datei, die wiedergegeben werden soll. + """ + Player.setzeDatei(self, pDatei) + + if pDatei.istVorhanden(): + androide.mediaPlay(self.datei.nennePfad(), self._id, False) + self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"]) + else: + print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad()) + + def nenneWiederholen(self): + """Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne + beginnen soll. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): Soll die Datei wiederholt + wiedergegeben werden? + """ + return androide.mediaPlayInfo(self._id)[1]["looping"] + + def setzeWiederholen(self, pWiederholen): + """Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne + beginnen soll. + + Parameter: + pWiederholen (Wahrheitswert): Soll die Datei wiederholt + wiedergegeben werden? + """ + return androide.mediaPlaySetLooping(self._id, pWiederholen) + + def gibtWieder(self): + """Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft, + False sonst. + """ + return androide.mediaIsPlaying(self._id)["result"] + + def wiedergeben(self): + """Auftrag. Startet die Wiedergabe der Multimediadaten. + + Parameter + --- keine --- + """ + androide.mediaPlayStart(self._id) + + def pausieren(self): + """Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe + kann mit 'wiedergeben' fortgesetzt werden. + + Parameter + --- keine --- + """ + androide.mediaPlayPause(self._id) + + def stoppen(self): + """Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren', + Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann + von vorne. + + Parameter + --- keine --- + """ + androide.mediaPlayPause(self._id) + self.setzePosition(0) + + # Attribute (verdeckte Getter und Setter) + datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \ + "wiedergegeben werden soll.") + dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.") + position = property(nennePosition, setzePosition, doc = "Die aktuelle "\ + "Position der Wiedergabe.") + wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\ + "ob die Wiedergabe am Ende wieder von vorne beginnen soll.") + diff --git a/source/Android/multimedia/AudioRecorder.py b/source/Android/multimedia/AudioRecorder.py new file mode 100644 index 0000000..ac580d0 --- /dev/null +++ b/source/Android/multimedia/AudioRecorder.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +import velamentum.dateien.Datei +from velamentum.multimedia.Recorder import Recorder +from velamentum.ui.dialoge.Dialog import Dialog +from velamentum.android import * + +class AudioRecorder(Recorder): + """Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei. + + Attribute: + --- von 'Recorder' geerbte --- + """ + + def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")): + """Konstruktor. Initialisiert den AudioRecorder. + + Parameter: + [optional] datei (Datei): Datei, in der die Aufnahme gespeichert + werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a']. + """ + Recorder.__init__(self, pDatei) + + def aufnehmen(self): + """Auftrag. Startet die Aufnahme der Multimediadaten. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + --- keine --- + """ + Recorder.aufnehmen(self) + androide.recorderStartMicrophone(self.datei.nennePfad()) + + def stoppen(self): + """Auftrag. Stoppt die Aufnahme der Multimediadaten. + + Parameter + --- keine --- + """ + Recorder.stoppen(self) + androide.recorderStop() + + def aufnehmenInteraktiv(self): + """Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die + Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird + in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter: + --- keine --- + """ + self.aufnehmen() + dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \ + "'Ok' drücken.") + dialog.zeige() + self.stoppen() + diff --git a/source/Android/multimedia/BildRecorder.py b/source/Android/multimedia/BildRecorder.py new file mode 100644 index 0000000..62144d7 --- /dev/null +++ b/source/Android/multimedia/BildRecorder.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +import velamentum.dateien.Datei +from velamentum.multimedia.Recorder import Recorder +from velamentum.android import * + +class BildRecorder(Recorder): + """Die Klasse BildRecorder dient der Aufnahme von Bilddaten in eine Datei. + + Attribute: + --- von 'Recorder' geerbte --- + """ + + def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.jpg")): + """Konstruktor. Initialisiert den BildRecorder. + + Parameter: + [optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert + werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.jpg']. + """ + Recorder.__init__(self, pDatei) + + def aufnehmen(self): + """Auftrag. Macht ein Foto und speichert es in der angegebenen Datei. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + --- keine --- + """ + androide.cameraCapturePicture(self.datei.nennePfad()) + + def stoppen(self): + """Auftrag. Dummy. Für Fotos nutzlos. + + Parameter + --- keine --- + """ + pass + + def aufnehmenInteraktiv(self): + """Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die + Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird + auf die Standard-Kamera-App zurückgegriffen. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter: + --- keine --- + """ + androide.cameraInteractiveCapturePicture(self.datei.nennePfad()) + diff --git a/source/Android/multimedia/JNIAudioRecorder.py b/source/Android/multimedia/JNIAudioRecorder.py new file mode 100644 index 0000000..6dbd38d --- /dev/null +++ b/source/Android/multimedia/JNIAudioRecorder.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +import velamentum.dateien.Datei +from velamentum.multimedia.Recorder import Recorder +from velamentum.ui.dialoge.Dialog import Dialog + +from jnius import autoclass + +from velamentum.android import * + +class JNIAudioRecorder(Recorder): + """Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei. + + BUG: Die Nutzung aus der QPython-Konsole funktioniert derzeit nicht. + Der Aufruf aus einer Skriptdatei funktioniert hingegen problemlos. + + Attribute: + --- von 'Recorder' geerbte --- + """ + + def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")): + """Konstruktor. Initialisiert den JNIAudioRecorder. + + Parameter: + [optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert + werden soll [Standardwert: Datei mit Pfad + '/sdcard/aufnahme.m4a']. + """ + Recorder.__init__(self, pDatei) + + # Recorder initialisieren + MediaRecorder = autoclass('android.media.MediaRecorder') + AudioSource = autoclass('android.media.MediaRecorder$AudioSource') + OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat') + AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder') + self.__mRecorder = MediaRecorder() + self.__mRecorder.setOutputFile(pDatei.nennePfad()) # Pfad der Datei + self.__mRecorder.setAudioSource(AudioSource.MIC) # Aufnahme vom Mikrofon + self.__mRecorder.setAudioChannels(1) # Mono + self.__mRecorder.setAudioEncodingBitRate(131072) # 128 kbps + self.__mRecorder.setAudioSamplingRate(48000) # 48 kHz + # ACHTUNG: Reihenfolge ist relevant! Erst Format, dann Encoder! + self.__mRecorder.setOutputFormat(OutputFormat.MPEG_4) # MP4-Container + self.__mRecorder.setAudioEncoder(AudioEncoder.AAC) # AAC-Format + + def __del__(self): + """Destruktor. Notwendig zur Freigabe des MediaRecorders beim Löschen + des Python-Objekts. + + Parameter: + --- keine --- + """ + self.__mRecorder.release() + + def aufnehmen(self): + """Auftrag. Startet die Aufnahme der Multimediadaten. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + --- keine --- + """ + Recorder.aufnehmen(self) + self.__mRecorder.setOutputFile(self.datei.nennePfad()) + self.__mRecorder.prepare() + self.__mRecorder.start() + + def stoppen(self): + """Auftrag. Stoppt die Aufnahme der Multimediadaten. + + Parameter + --- keine --- + """ + Recorder.stoppen(self) + self.__mRecorder.stop() + + def aufnehmenInteraktiv(self): + """Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die + Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird + in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter: + --- keine --- + """ + self.aufnehmen() + dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \ + "'Ok' drücken.") + dialog.zeige() + self.stoppen() + diff --git a/source/Android/multimedia/Player.py b/source/Android/multimedia/Player.py new file mode 100644 index 0000000..6e8ea61 --- /dev/null +++ b/source/Android/multimedia/Player.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +import time +import velamentum.dateien.Datei +from velamentum.android import * + +class Player(object): + """Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer + Datei. + + Attribute: + datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll. + dauer (Zahl): Gesamtdauer der Datei in Millisekunden. + position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden. + wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von + vorne beginnen soll. + """ + + def __init__(self, pDatei): + """Konstruktor. Initialisiert den Player. + + Parameter: + pDatei (Datei): Datei, die wiedergegeben werden soll. + """ + self.datei = pDatei + # Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig + # wiederzugebender Streams. + self._id = "%s%04d" % (pDatei.nenneName(), randint(0,4095)) + + def nenneDatei(self): + """Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll. + + Parameter: + --- keine --- + + Rückgabe (Datei): Datei, die wiedergegeben werden soll. + """ + return self.datei + + def setzeDatei(self): + """Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll. + + Parameter: + --- keine --- + + Rückgabe (Datei): Datei, die wiedergegeben werden soll. + """ + return self.datei + + def nenneWiederholen(self): + """Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne + beginnen soll. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): Soll die Datei wiederholt + wiedergegeben werden? + """ + return False + + def setzeWiederholen(self, pWiederholen): + """Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne + beginnen soll. + + Parameter: + pWiederholen (Wahrheitswert): Soll die Datei wiederholt + wiedergegeben werden? + """ + pass + + def nenneDauer(self): + """Anfrage. Gibt die Gesamtdauer der Datei zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden. + """ + return 0 + + def nennePosition(self): + """Anfrage. Gibt die aktuelle Position der Wiedergabe zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden. + """ + return 0 + + def setzePosition(self, pPosition): + """Auftrag. Legt die aktuelle Position der Wiedergabe fest. + + Parameter: + pPosition (Zahl): Neue Position in Millisekunden. + """ + pass + + def gibtWieder(self): + """Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft, + False sonst. + """ + return False + + def wiedergeben(self): + """Auftrag. Startet die Wiedergabe der Multimediadaten. + + Parameter + --- keine --- + """ + pass + + def pausieren(self): + """Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe + kann mit 'wiedergeben' fortgesetzt werden. + + Parameter + --- keine --- + """ + pass + + def stoppen(self): + """Auftrag. Stoppt die Wiedergabe der Multimediadaten. + + Parameter + --- keine --- + """ + pass + + # Attribute (verdeckte Getter und Setter) + datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \ + "wiedergegeben werden soll.") + dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.") + position = property(nennePosition, setzePosition, doc = "Die aktuelle "\ + "Position der Wiedergabe.") + wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\ + "ob die Wiedergabe am Ende wieder von vorne beginnen soll.") + + diff --git a/source/Android/multimedia/Recorder.py b/source/Android/multimedia/Recorder.py new file mode 100644 index 0000000..92616f3 --- /dev/null +++ b/source/Android/multimedia/Recorder.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +import time +import velamentum.dateien.Datei +from velamentum.android import * + +class Recorder(object): + """Die Klasse Recorder dient der Aufnahme von Multimediadaten in eine Datei. + + Attribute: + aufnahmeLaeuft (Wahrheitswert): Gibt an, ob gerade eine Aufnahme läuft. + datei (Datei): Die Datei, in der die Aufnahme gespeichert werden soll. + """ + + def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme")): + """Konstruktor. Initialisiert den Recorder. + + Parameter: + [optional] datei (Datei): Datei, in der die Aufnahme gespeichert + werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme']. + """ + self.aufnahmeLaeuft = False + self.datei = pDatei + + def nimmtAuf(self): + """Anfrage. Gibt an, ob gerade eine Aufgabe läuft. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): True falls eine Aufnahme läuft, False sonst. + """ + return self.aufnahmeLaeuft + + def nenneDatei(self): + """Anfrage. Gibt die Datei zurück, in der die Aufnahme gespeichert + werden soll. + + Parameter + --- keine --- + + Rückgabe (Datei): Datei, in der die Aufnahme gespeichert werden soll. + """ + return self.datei + + def setzeDatei(self, pDatei): + """Auftrag. Legt die Datei fest, in der die Aufnahme gespeichert + werden soll. + + Parameter + pDatei (Datei): Datei, in der die Aufnahme gespeichert werden soll. + """ + self.datei = pDatei + + def aufnehmen(self): + """Auftrag. Startet die Aufnahme der Multimediadaten. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + --- keine --- + """ + self.aufnahmeLaeuft = True + + def stoppen(self): + """Auftrag. Stoppt die Aufnahme der Multimediadaten. + + Parameter + --- keine --- + """ + self.aufnahmeLaeuft = False + + def aufnehmenAuto(self, pDauer): + """Auftrag. Startet eine Aufnahme mit der in 'pDauer' angegebenen Dauer + und beendet die Aufnahme danach automatisch. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + pDauer (Zahl): Dauer der Aufnahme. + """ + self.aufnehmen() + time.sleep(pDauer) + self.stoppen() + + def aufnehmenInteraktiv(self): + """Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die + Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird + in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter: + --- keine --- + """ + pass + diff --git a/source/Android/multimedia/VideoRecorder.py b/source/Android/multimedia/VideoRecorder.py new file mode 100644 index 0000000..acb7e34 --- /dev/null +++ b/source/Android/multimedia/VideoRecorder.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +import velamentum.dateien.Datei +from velamentum.multimedia.Recorder import Recorder +from velamentum.android import * + +class VideoRecorder(Recorder): + """Die Klasse VideoRecorder dient der Aufnahme von Videodaten in eine Datei. + + Attribute: + --- von 'Recorder' geerbte --- + """ + + def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.mp4")): + """Konstruktor. Initialisiert den VideoRecorder. + + Parameter: + [optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert + werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a']. + """ + Recorder.__init__(self, pDatei) + + def aufnehmen(self): + """Auftrag. Startet die Aufnahme der Multimediadaten. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter + --- keine --- + """ + Recorder.aufnehmen(self) + androide.recorderCaptureVideo(self.datei.nennePfad()) + + def stoppen(self): + """Auftrag. Stoppt die Aufnahme der Multimediadaten. + + Parameter + --- keine --- + """ + Recorder.stoppen(self) + androide.recorderStop() + + def aufnehmenInteraktiv(self): + """Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die + Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird + in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen. + + HINWEIS: Die angegebene Datei wird überschrieben. + + Parameter: + --- keine --- + """ + androide.startInteractiveVideoRecording(self.datei.nennePfad()) + diff --git a/source/Android/multimedia/__init__.py b/source/Android/multimedia/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/sensoren/__init__.py b/source/Android/sensoren/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/signale/AudioSignal.mp3 b/source/Android/signale/AudioSignal.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f18ee797d2032c2f9100e18d5afb40bef6c83288 GIT binary patch literal 159703 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%0DxFk#L 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 Lc}ODEWc~*LL6vp$ literal 0 HcmV?d00001 diff --git a/source/Android/signale/AudioSignal.py b/source/Android/signale/AudioSignal.py new file mode 100644 index 0000000..c33354b --- /dev/null +++ b/source/Android/signale/AudioSignal.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +from velamentum.signale.Signal import Signal +from velamentum.multimedia.AudioPlayer import AudioPlayer +from velamentum.dateien.Datei import Datei +import os.path + +class AudioSignal(Signal): + """Die Klasse AudioSignal dient der Übermittlung von Audiosignalen + an den Benutzer. + + Attribute: + datei (Datei): Audiodatei, die für das Signal verwendet werden soll. + """ + + def __init__(self, pDatei=None): + """Konstruktor. Initialisiert das AudioSignal. + + Parameter: + [optional] pDatei (Zeichenkette): Audiodatei, die für das Signal + verwendet werden soll. [Standardwert: None] + """ + Signal.__init__(self) + self.setzeDatei(pDatei) + self.__audioPlayer = AudioPlayer(self.nenneDatei()) + + def nenneDatei(self): + """Anfrage. Gibt die Audiodatei des Signals zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Audiodatei des Signals. + """ + return self.__datei + + def setzeDatei(self, pDatei): + """Auftrag. Ändert die Audiodatei des Signals. + + Parameter: + pDatei (Zeichenkette): Audiodatei des Signals. + """ + # Falls keine Datei angegeben wurde, verwende Standarddatei aus dem + # Modulpfad. + if pDatei==None: + tDatei = os.path.join(os.path.dirname(__file__),"AudioSignal.mp3") + pDatei = Datei(tDatei) + + self.__datei = pDatei + + def signalisiere(self): + """Auftrag. Übermittelt das Signal an den Benutzer. + + Parameter + --- keine --- + """ + self.__audioPlayer.wiedergeben() + + # Attribute (verdeckte Getter und Setter) + datei = property(nenneDatei, setzeDatei, doc="Die Audiodatei, die für das "\ + "Signal verwendet werden soll.") diff --git a/source/Android/signale/Signal.py b/source/Android/signale/Signal.py new file mode 100644 index 0000000..c69dba2 --- /dev/null +++ b/source/Android/signale/Signal.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +from velamentum.android import * + +class Signal(object): + """Die Klasse Signal dient der Übermittlung von Signalen an den Benutzer.""" + + def __init__(self): + """Konstruktor. Initialisiert das Signal. + + Parameter: + --- keine --- + """ + pass + + def signalisiere(self): + """Auftrag. Übermittelt das Signal an den Benutzer. + + Parameter + --- keine --- + """ + pass + diff --git a/source/Android/signale/TextSignal.py b/source/Android/signale/TextSignal.py new file mode 100644 index 0000000..e86e08b --- /dev/null +++ b/source/Android/signale/TextSignal.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from velamentum.signale.Signal import Signal + +class TextSignal(Signal): + """Die Klasse TextSignal dient der Übermittlung von Textsignalen + an den Benutzer. + + Attribute: + text (Zeichenkette): Text des Signals. + """ + + def __init__(self, pText="TextSignal"): + """Konstruktor. Initialisiert das Signal. + + Parameter: + [optional] pText (Zeichenkette): Text des Signals. + """ + Signal.__init__(self) + self.text = pText + + def nenneText(self): + """Anfrage. Gibt den Text des Signals zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Text des Signals. + """ + return self.text + + def setzeText(self, pText): + """Auftrag. Ändert den Text des Signals. + + Parameter: + pText (Zeichenkette): Text des Signals. + """ + self.text = pText + + def signalisiere(self): + """Auftrag. Übermittelt das Signal an den Benutzer. + + Parameter + --- keine --- + """ + androide.makeToast(self.text) diff --git a/source/Android/signale/VibrationsSignal.py b/source/Android/signale/VibrationsSignal.py new file mode 100644 index 0000000..b8b01f7 --- /dev/null +++ b/source/Android/signale/VibrationsSignal.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from velamentum.signale.Signal import Signal + +class VibrationsSignal(Signal): + """Die Klasse Signal dient der Übermittlung von Vibrationssignalen + an den Benutzer. + + Attribute + dauer (Zahl): Dauer der Vibration in Millisekunden.""" + + def __init__(self, pDauer=300): + """Konstruktor. Initialisiert das Vibrationssignal. + + Parameter: + [optional] pDauer (Zahl): Dauer der Vibration in Millisekunden. + [Standardwert: 300] + """ + Signal.__init__(self) + self.dauer = pDauer + + def nenneDauer(self): + """Anfrage. Gibt die Dauer der Vibration zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Dauer der Vibration in Millisekunden. + """ + return self.dauer + + def setzeDauer(self, pDauer): + """Auftrag. Ändert die Dauer der Vibration. + + Parameter: + pDauer: Dauer der Vibration in Millisekunden. + """ + self.dauer = pDauer + + def signalisiere(self): + """Auftrag. Übermittelt das Signal an den Benutzer. + + Parameter: + --- keine --- + """ + androide.vibrate(self.dauer) diff --git a/source/Android/signale/__init__.py b/source/Android/signale/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/sprache/Sprachausgabe.py b/source/Android/sprache/Sprachausgabe.py new file mode 100644 index 0000000..4f6e699 --- /dev/null +++ b/source/Android/sprache/Sprachausgabe.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from velamentum.android import * + +class Sprachausgabe(object): + """Die Klasse Sprachausgabe ermöglicht die Umwandlung von Text in Sprache. + Dieser wird dann als gesprochene Sprache über die Lautsprecher ausgegeben. + + Attribute: + text (Zeichenkette): Der umzuwandelnde Text.""" + + def __init__(self, pText="Text"): + """Auftrag. Initialisiert die Sprachausgabe. + + Parameter: + [optional] pText (Zeichenkette): Der umzuwandelnde Text. + """ + self.text = pText + + def setzeText(self, pText): + """Auftrag. Ändert den umzuwandelnden Text. + + Parameter: + pText (Zeichenkette): + """ + self.text = pText + + def nenneText(self): + """Anfrage. Gibt den umzuwandelnden Text zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der umzuwandelnde Text. + """ + return self.text + + def sprichtNoch(self): + """Anfrage. Überprüft, ob noch eine Sprachausgabe läuft. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): Liefert True, wenn die Sprachausgabe noch + läuft, sonst False. + """ + return androide.ttsIsSpeaking().result + + def sprechen(self): + """Auftrag. Wandelt den Text in Sprache um und gibt ihn über die + Lautsprecher aus. + + Parameter: + --- keine --- + """ + androide.ttsSpeak(self.text) diff --git a/source/Android/sprache/Spracheingabe.py b/source/Android/sprache/Spracheingabe.py new file mode 100644 index 0000000..d0507db --- /dev/null +++ b/source/Android/sprache/Spracheingabe.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from velamentum.android import * + +class Spracheingabe(object): + """Die Klasse Spracheingabe ermöglicht die Umwandlung von Sprache in Text. + Gesprochener Text wird aufgenommen und mittels einer Spracherkennung in + Text umgewandelt. + + Attribute: + text (Zeichenkette): Der erkannte Text.""" + + def __init__(self): + """Konstruktor: Initialisiert die Spracheingabe. + + Parameter: + --- keine --- + """ + self.text = "" + + def nenneText(self): + """Anfrage. Gibt den erkannten Text zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der erkannte Text. + """ + return self.text + + def erkenneSprache(self): + """Auftrag. Der gesprochene Text wird erkannt und im Attribut 'text' + gespeichert. + + Parameter: + --- keine --- + """ + self.text = androide.recognizeSpeech("Bitte sprechen!","de-DE", + "free_form").result + diff --git a/source/Android/sprache/__init__.py b/source/Android/sprache/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/ui/__init__.py b/source/Android/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/ui/dialoge/Dialog.py b/source/Android/ui/dialoge/Dialog.py new file mode 100644 index 0000000..b0606a1 --- /dev/null +++ b/source/Android/ui/dialoge/Dialog.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +from velamentum.android import * + +class Dialog(object): + """Die Klasse Dialog stellt einen einfachen Dialog zur Verfuegung, der eine + Nachricht anzeigen kann und nach Bestätigung durch den Benutzer wieder + verschwindet. + + Attribute: + titel (Zeichenkette): Der Titel des Dialogs. + nachricht (Zeichenkette): Die Nachricht des Dialogs. + """ + + def __init__(self, pTitel="Titel", pNachricht="Nachricht"): + """Auftrag. Initialisiert den Dialog. + + Parameter: + [optional] pTitel (Zeichenkette): Der Titel des Dialogs. + [optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs. + """ + self.titel = pTitel + self.nachricht = pNachricht + + def setzeNachricht(self, pNachricht): + """Auftrag. Ändert die Nachricht des Dialogs. + + Parameter: + pNachricht (Zeichenkette): Die Nachricht des Dialogs. + """ + self.nachricht = pNachricht + + def setzeTitel(self, pTitel): + """Auftrag. Ändert den Titel des Dialogs. + + Parameter: + pTitel (Zeichenkette): Der Titel des Dialogs. + """ + self.titel = pTitel + + def nenneNachricht(self): + """Anfrage. Gibt die Nachricht des Dialogs zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Die Nachricht des Dialogs. + """ + return self.titel + + def nenneTitel(self): + """Anfrage. Gibt den Titel des Dialogs zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der Titel des Dialogs. + """ + return self.titel + + def zeigeNachricht(self,pNachricht): + """Auftrag. Kurzform für das Anzeigen eines Dialogs. Setzt die neue + Nachricht und zeigt den Dialog sofort an. + + Parameter: + pNachricht (Zeichenkette): Die Nachricht des Dialogs. + """ + self.nachricht = pNachricht + self.zeige() + + def zeige(self): + """Auftrag. Zeigt den Dialog an. + + Parameter: + --- keine --- + """ + androide.dialogCreateAlert(self.titel, self.nachricht) + androide.dialogSetPositiveButtonText('Ok') + androide.dialogShow() + androide.dialogGetResponse() diff --git a/source/Android/ui/dialoge/EingabeDialog.py b/source/Android/ui/dialoge/EingabeDialog.py new file mode 100644 index 0000000..43ec7ea --- /dev/null +++ b/source/Android/ui/dialoge/EingabeDialog.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +from velamentum.ui.dialoge.Dialog import Dialog +from velamentum.android import * + +class EingabeDialog(Dialog): + """Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse + Dialog) stellt einen einfachen Dialog zur Eingabe von Zeichenketten zur + Verfügung. + + Attribute: + titel (Zeichenkette): Der Titel des Dialogs. + nachricht (Zeichenkette): Die Nachricht des Dialogs. + ergebnis (Zeichenkette): Der eingegebene Text. + nurZahlen (Wahrheitswert): Nur Zahlen als Eingabe erlauben. + wertAnzeigen (Wahrheitswert): Den aktuellen Wert im Eingabefeld + anzeigen. + """ + + def __init__(self, pTitel="EingabeDialog", pNachricht="Nachricht", pNurZahlen=False, + pWertAnzeigen=False): + """Konstruktor. Initialisiert den EingabeDialog. + + Parameter: + [optional] pTitel (Zeichenkette): Der Titel des Dialogs. + [optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs. + [optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe + erlauben (Standardwert: False). + [optional] pWertAnzeigen (Wahrheitswert): Den aktuellen Wert im + Eingabefeld anzeigen (Standardwert: False). + """ + Dialog.__init__(self, pTitel, pNachricht) + self.__ergebnis = '' + self.nurZahlen = pNurZahlen + self.wertAnzeigen = pWertAnzeigen + + def nenneErgebnis(self): + """Anfrage. Gibt die eingegebene Zeichenkette zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Die eingegebene Zeichenkette. + """ + if self.__ergebnis == '' and self.nurZahlen: + self.__ergebnis = 0 + return int(self.__ergebnis) if self.nurZahlen else self.__ergebnis + + def nenneNurZahlen(self): + """Anfrage. Gibt zurück, ob nur Zahlen als Eingabe zugelassen sind. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen sein? + """ + return self.nurZahlen + + def nenneWertAnzeigen(self): + """Anfrage. Gibt zurück, ob der aktuelle Wert im Eingabefeld angezeigt + werden soll. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): Soll der aktuelle Wert bei der Eingabe + angezeigt werden? + """ + return self.wertAnzeigen + + def setzeNurZahlen(self, pNurZahlen): + """Auftrag. Legt fest, ob nur Zahlen als Eingabe zugelassen sind. + + Parameter: + pNurZahlen (Wahrheitswert): Sollen nur Zahlen als Eingabe zugelassen + sein? + """ + self.nurZahlen = pNurZahlen + + def setzeWertAnzeigen(self, pWertAnzeigen): + """Auftrag. Legt fest, ob der aktuelle Wert bei der Eingabe angezeigt + werden soll. + + Parameter: + pWertAnzeigen (Wahrheitswert): Soll der aktuelle Wert bei der + Eingabe angezeigt werden? + """ + self.nurZahlen = pWertAnzeigen + + def zeige(self): + """Auftrag. Zeigt den EingabeDialog an und speichert die eingegebene + Zeichenkette im Attribut 'ergebnis'. + + Parameter: + --- keine --- + """ + androide.dialogCreateInput(self.titel, self.nachricht, + self.__ergebnis if self.wertAnzeigen else '', + 'number' if self.nurZahlen else 'text') + androide.dialogSetPositiveButtonText('Ok') + androide.dialogShow() + self.__ergebnis = androide.dialogGetResponse().result['value'] + + ergebnis = property(nenneErgebnis, doc="Die Eingabe des Benutzers.") diff --git a/source/Android/ui/dialoge/EntscheidungsDialog.py b/source/Android/ui/dialoge/EntscheidungsDialog.py new file mode 100644 index 0000000..ee8d35a --- /dev/null +++ b/source/Android/ui/dialoge/EntscheidungsDialog.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +from velamentum.ui.dialoge.Dialog import Dialog +from velamentum.android import * + +class EntscheidungsDialog(Dialog): + """Die Klasse Dialog stellt einen einfachen Dialog mit zwei oder drei + Tasten als Antwortmöglichkeiten zur Verfuegung. Der Text der Tasten ist + frei wählbar. + + Attribute: + titel (Zeichenkette): Der Titel des Dialogs. + nachricht (Zeichenkette): Die Nachricht des Dialogs. + ergebnis (Zahl): Die Nummer der ausgewählten Taste (1-3), 0 bei Abbruch + oder Fehler. + text1 (Zeichenkette): Der Text der ersten Taste. + text2 (Zeichenkette): Der Text der zweiten Taste. + text3 (Zeichenkette): Der Text der dritten Taste. + dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten. True für + drei Tasten, False für zwei Tasten. + """ + + def __init__(self, pTitel="Titel", pNachricht="Nachricht"): + """Konstruktor. Initialisiert den EntscheidungsDialog. + + Parameter: + [optional] pTitel (Zeichenkette): Der Titel des Dialogs. + [optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs. + """ + Dialog.__init__(self, pTitel, pNachricht) + self.ergebnis = 0 + self.text1 = "Ja" + self.text2 = "Nein" + self.text3 = "Vielleicht" + self.dreiTasten = False + + def setzeText1(self, pText): + """Auftrag. Ändert den Text der ersten Taste. + + Parameter: + pText (Zeichenkette): Text der Taste. + """ + self.text1 = pText + + def setzeText2(self, pText): + """Auftrag. Ändert den Text der zweiten Taste. + + Parameter: + pText (Zeichenkette): Text der Taste. + """ + self.text2 = pText + + def setzeText3(self, pText): + """Auftrag. Ändert den Text der dritten Taste. + + Parameter: + pText (Zeichenkette): Text der Taste. + """ + self.text3 = pText + + def setzeDreiTasten(self, pDreiTasten): + """Auftrag. Legt fest, ob zwei oder drei Tasten angezeigt werden sollen. + + Parameter: + dreiTasten (Wahrheitswert): Anzahl der anzuzeigenden Tasten. + True für drei Tasten, False für zwei Tasten. + """ + self.dreiTasten = pDreiTasten + + def nenneErgebnis(self): + """Anfrage. Gibt die Nummer der gewählten Taste (1-3) oder 0 bei einem + Abbruch oder Fehler aus. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Fehler oder Abbruch durch den Benutzer => 0, + Taste gedrückt => Nummer der Taste (1-3). + """ + return self.ergebnis + + def nenneText1(self): + """Anfrage. Gibt den Text der ersten Taste zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der Text der ersten Taste. + """ + return self.text1 + + def nenneText2(self): + """Anfrage. Gibt den Text der zweiten Taste zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der Text der zweiten Taste. + """ + return self.text2 + + def nenneText3(self): + """Anfrage. Gibt den Text der dritten Taste zurück. + + Parameter: + --- keine --- + + Rückgabe (Zeichenkette): Der Text der dritten Taste. + """ + return self.text3 + + def nenneDreiTasten(self): + """Anfrage. Gibt zurück ob zwei (False) oder drei (True) Tasten + angezeigt werden sollen. + + Parameter: + --- keine --- + + Rückgabe (Wahrheitswert): True, falls drei Tasten angezeigt werden + sollen, False sonst. + """ + return self.dreiTasten + + def zeige(self): + """Auftrag. Zeigt den EntscheidungsDialog an und speichert die Auswahl + im Attribut 'ergebnis'. + + Parameter: + --- keine --- + """ + + androide.dialogCreateAlert(self.titel, self.nachricht) + androide.dialogSetPositiveButtonText(self.text1) + if self.dreiTasten: + androide.dialogSetNegativeButtonText(self.text3) + androide.dialogSetNeutralButtonText(self.text2) + else: + androide.dialogSetNegativeButtonText(self.text2) + androide.dialogShow() + tmpErg = androide.dialogGetResponse().result + if tmpErg.has_key('which'): + if tmpErg['which'] == 'positive': + self.ergebnis=1 + elif tmpErg['which'] == 'negative': + if self.dreiTasten: + self.ergebnis=3 + else: + self.ergebnis=2 + elif tmpErg['which'] == 'neutral': + self.ergebnis=2 + else: + self.ergebnis = 0 + diff --git a/source/Android/ui/dialoge/PasswortDialog.py b/source/Android/ui/dialoge/PasswortDialog.py new file mode 100644 index 0000000..c398805 --- /dev/null +++ b/source/Android/ui/dialoge/PasswortDialog.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from velamentum.ui.dialoge.EingabeDialog import EingabeDialog +from velamentum.android import * + +class PasswortDialog(EingabeDialog): + """Die Klasse EingabeDialog (erbt Attribute und Methoden von der Klasse + EingabeDialog) stellt einen einfachen Dialog zur Eingabe von Passwörtern zur + Verfügung. Im Unterschied zum Eingabedialog wird die Zeichenkette während + der Eingabe nicht angezeigt. + + Attribute: + titel (Zeichenkette): Der Titel des Dialogs. + nachricht (Zeichenkette): Die Nachricht des Dialogs. + ergebnis (Zeichenkette): Der eingegebene Text. + """ + + def __init__(self, pTitel="Titel", pNachricht="Nachricht", pNurZahlen=False): + """Konstruktor. Initialisiert den PasswortDialog. + + Parameter: + [optional] pTitel (Zeichenkette): Der Titel des Dialogs. + [optional] pNachricht (Zeichenkette): Die Nachricht des Dialogs. + [optional] pNurZahlen (Wahrheitswert): Nur Zahlen als Eingabe + erlauben (Standardwert: False). + """ + EingabeDialog.__init__(self, pTitel, pNachricht, pNurZahlen=False) + + def zeige(self): + """Auftrag. Zeigt den PasswortDialog an und speichert die eingegebene + Zeichenkette im Attribut 'ergebnis'. + + Parameter: + --- keine --- + """ + androide.dialogCreateInput(self.titel, self.nachricht, None, + 'numberPassword' if self.nurZahlen else 'textPassword') + androide.dialogSetPositiveButtonText('Ok') + androide.dialogShow() + self.ergebnis = androide.dialogGetResponse().result['value'] diff --git a/source/Android/ui/dialoge/__init__.py b/source/Android/ui/dialoge/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/source/Android/werkzeuge/System.py b/source/Android/werkzeuge/System.py new file mode 100644 index 0000000..c0a632f --- /dev/null +++ b/source/Android/werkzeuge/System.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +import velamentum.dateien.Datei +from velamentum.android import * + +class System(object): + """Die Klasse System dient dem Zugriff auf bestimmte Funktionen des Systems. + + Attribute: + --- keine --- + """ + @staticmethod + def oeffneDatei(pDatei): + androide.view("file://" + pDatei.nennePfad()) + diff --git a/source/Android/werkzeuge/Zufallsgenerator.py b/source/Android/werkzeuge/Zufallsgenerator.py new file mode 100644 index 0000000..8f05d24 --- /dev/null +++ b/source/Android/werkzeuge/Zufallsgenerator.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +import random +import os + +class Zufallsgenerator(object): + """Die Klasse Zufallsgenerator bietet die Möglichkeit einfach Zuffallszahlen + zu generieren. + + Attribute: + min (Zahl): Untere Grenze für die generierten Zufallszahlen. + max (Zahl): Obere Grenze für die generierten Zufallszahlen. + ergebnis (Zahl): Die zuletzt generierte Zufallszahl. + """ + + def __init__(self, pMin=1, pMax=6): + """Konstruktor. Initialisiert den Zufallsgenerator, generiert eine erste + Zufallszahl und speichert sie im Attribut ergebnis. + + Parameter: + [optional] min (Zahl): Kleinste mögliche Zufallszahl. + [optional] max (Zahl): Größte mögliche Zufallszahl. + """ + random.seed(os.urandom(8)); + self.min = pMin + self.max = pMax + self.ergebnis = random.randrange(self.min, self.max+1) + + def setzeMinimum(self, pMin): + """Auftrag. Ändert das Minimum (kleinste mögliche Zufallszahl). + + Parameter: + pMin (Zahl): Kleinste mögliche Zufallszahl. + """ + self.min = pMin + + def setzeMaximum(self, pMax): + """Auftrag. Ändert das Maximum (größte mögliche Zufallszahl). + + Parameter: + pMax (Zahl): Größte mögliche Zufallszahl. + """ + self.max = pMax + + def nenneErgebnis(self): + """Anfrage. Gibt die zuletzt generierte Zufallszahl zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Die zuletzt generierte Zufallszahl. + """ + return self.ergebnis + + def nenneMinimum(self): + """Anfrage. Gibt das eingestellte Minimum (kleinste mögliche + Zufallszahl) zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Kleinste mögliche Zufallszahl. + """ + return self.min + + def nenneMaximum(self): + """Anfrage. Gibt das eingestellte Maximum (größte mögliche Zufallszahl) + zurück. + + Parameter: + --- keine --- + + Rückgabe (Zahl): Größte mögliche Zufallszahl. + """ + return self.max + + def generiere(self): + """Auftrag. Generiert eine neue Zufallszahl und speichert sie im + Attribut 'ergebnis'. + + Parameter: + --- keine --- + """ + self.ergebnis = random.randrange(self.min, self.max+1) + + diff --git a/source/Android/werkzeuge/Zwischenablage.py b/source/Android/werkzeuge/Zwischenablage.py new file mode 100644 index 0000000..30e9860 --- /dev/null +++ b/source/Android/werkzeuge/Zwischenablage.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from velamentum.android import * + +class Zwischenablage(object): + """Die Klasse dient dem Zugriff auf die Zwischenablage des Systems. + + Attribute: + text (Zeichenkette): Der Text in der Zwischenablage des Systems. + """ + + def __init__(self): + """Konstruktor. Initialisiert die Zwischenablage. + + Parameter: + --- keine --- + """ + pass + + @staticmethod + def nenneText(self): + """Anfrage. Gibt den Text aus der Zwischenablage zurück. + + Parameter + --- keine --- + + Rückgabe (Zeichenkette): Der Inhalt der Zwischenablage. + """ + return androide.getClipboard() + + @staticmethod + def setzeText(self, pText): + """Auftrag. Schreibt den Text in die Zwischenablage. + + Parameter + pText (Zeichenkette): Der Text, der in die Zwischenablage + geschrieben werden soll. + """ + androide.setClipboard(pText) + + # Attribute (verdeckte Getter und Setter) + text = property (nenneText, setzeText, doc="Der Text in der" \ + "Zwischenablage des Systems.") + diff --git a/source/Android/werkzeuge/__init__.py b/source/Android/werkzeuge/__init__.py new file mode 100644 index 0000000..e69de29