Englisch version   English version


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

Benutzeroberfläche

 
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.

Komponenten

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.

Code

Der Code ist relativ umfangreich. Deshalb werden hier nur die wesentlichen Teile beschrieben. Ausgelassene Elemente sind durch die Prozedur OmittedParts…… ersetzt.

Initialisierung (Screen1.Initialize)

Die Aktionsschaltfläche wird der Benachrichtigung hinzugefügt. Dies ist nur über die Funktion AddActionButton möglich.

Start des Downloads (cmdStart.OnClick)

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.

Download-Prozess (ProcessTimer.Timer)

 

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.

Download abbrechen (Procedure CancelDownload)

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.

Anforderungen (Requests, Screen ScreenCancelRequest)

Ü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.