Beispiel Progress Bar Test |
Das Beispiel simuliert einen länger dauernden Datei-Download. Es erstellt diese drei Benachrichtigungen
Benachrichtigung mit Fortschrittsbalken | ... mit 'indeterminate' Fortschrittsanzeige | Fertigmeldung |
Vor Start des 'Download' | Während des 'Downloads' |
Die meisten der GUI-Elemente des Screen1 sind selbsterklärend. Über die drei CheckBoxen kann ausgewählt werden, welche Aktion nach dem Start des Downloads ausgeführt werden soll:
Der Screen Pause zeigt eine kleine Animation, die ich bei Azaotl gefunden habe. Sie ist Teil seines Tutorials zur Spiele-Entwicklung im AI2.
Im unteren Teil wird die noch verbleibende Restzeit für den Download angezeigt. Screen1 meldet diesen Wert über die UrsAI2CommonEvents-Extension an andere Screens weiter.
Wenn in der Benachrichtigung die Aktionsschaltfläche Cancel angetippt wird, wird der Screen ScreenCancelRequest geladen.
Auch hier wird die Restzeit über die UrsAI2CommonEvents-Extension übermittelt. Screen1 erhält die Abbruch-Anforderung (Schaltfäche Cancel Download) ebenfalls über diese Extension.
In dem Projekt sind folgende Instanzen der Komponenten angelegt.
Typ | Name | Funktion | |
---|---|---|---|
UrsAI2NotificationChannel | Channel | Benachrichtigungskanal. | |
UrsNotification | ProgressNotification | Benachrichtigung mit Fortschrittsanzeige. | |
UrsNotification | ResultNotification | Benachrichtigung über den fertiggestellten Download. | |
UrsIntent | IntentNone | Keine Aktion. | |
UrsIntent | NotificationCancelIntent | Öffnet ScreenScreenCancelRequest. | |
Clock | ProcessTimer | Timer zur Simulation des Downloads. | |
UrsCommonEvents | CommonEvents | Zum Datenaustausch zwischen den Screens. | |
UrsAI2ComponentGroup | ComponentGroup | Erlaubt das (De-) Aktivieren aller untergeordneten Elemente eines Arrangements. |
Der Code ist relativ umfangreich. Deshalb werden hier nur die wesentlichen Teile beschrieben. Ausgelassene Elemente sind durch die Prozedur OmittedParts…… ersetzt.
Die Aktionsschaltfläche wird der Benachrichtigung hinzugefügt. Dies ist nur über die Funktion AddActionButton möglich.
Cancel löscht eine evtl. noch angezeigte Ergebnisbenachrichtigung eines vorhergehenden Versuchs.
Die Text-Angabe des aktuellen Fortschritts in Prozent (s.u.) wird nicht angezeigt, wenn das 'BigPicture' angezeigt wird (Test mit Android Oreo 8.1). Bei der Anzeige eines Fortschrittsbalken wird deshalb der Parameter BigPicture gelöscht. Bei einem unbestimmten Fortschrittsbalken spielt dies keine Rolle.
Die aufbereite Benachrichtigung wird angezeigt.
Die verbleibende Restzeit wird herunter gezählt. Der Einfachheit halber wird hier der Inhalt des Label lblRamaining genutzt. Wenn der Wert bei 0 angekommen ist, ist der Download beendet. Der Timer wird gestoppt, die Fortschrittsbenachrichtigung gelöscht und die Abschlussbenachrichtigung angezeigt.
Ansonsten wird, wenn es nicht nicht um eine unbestimmte (indeterminate) Fortschrittsanzeige handelt, der aktuelle Fertigstellungsgrad in Prozent berechnet und die Benachrichtigung aktualisiert.
CommenmEvents.PostEvent1 gibt an aktuellen Fertigstellungsgrad an andere Screens weiter.
Der Download kann über mehrere Wege abgebrochen werden. Deshalb ist er als Prozedur hinterlegt.
Der Timer wird gestoppt und die Fortschrittsbenachrichtigung gelöscht. Die Fertigstellungsbenachrichtigung erhält den Text "Download canceled" und wird angezeigt.
CommenmEvents.PostEvent1 gibt die Abbruchmeldung an andere Screens weiter.
Über die UrsAI2CommonEvents-Extension können andere Screens Anforderungen an den Download (Screen1) stellen. Event2 wird ausgelöst, wenn der Download abgebrochen werden soll. Im Screen ScreenCancelRequest wird diese Funktionalität genutzt:
Screen ScreenCancelRequest wird durch Antippen der Aktionsschaltfläche Cancel in der Benachrichtigung geöffnet. Dies erfolgt asynchron zum Timer in Screen1. Damit ScreenCancelRequest sofort den richtigen Fertigstellungsgrad anzeigen kann, ruft er über Event3 den aktuellen Zustand ab:
Screen ScreenCancelRequest führt außerdem einen Timer (CloseTimer) mit, der den Screen automatisch nach 1,5 Sekunden schließt, nachdem der Download fertiggestellt ist.