Ogólne#
Notifications#
W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w dziale Notifications.
Pojęcia#
list-of-pending-notifications
list-of-active-notifications
Aplikacja kliencka musi utrzymywać listę oczekujących powiadomień # (list of pending notifications) oraz listę aktywnych powiadomień # (list of active notifications).
Zawsze, gdy lista oczekujących powiadomień nie jest pusta, to aplikacja kliencka musi czekać i monitorować zmiany w dostępnej przestrzeni dla powiadomień na urządzeniu.
Kiedy dostępna przestrzeń wyświetlania zmienia się na urządzeniu w taki sposób, że nowe powiadomienie może być wyświetlone, na przykład z powodu odwołania wcześniejszego powiadomienia, to aplikacja kliencka powinna uruchomić kroki wyświetlenia dla pierwszego powiadomienia na liście oczekujących powiadomień a następnie usunąć je z listy oczekujących powiadomień.
garbage collection
Specyfikacja precyzuje, że obiekt Notification nie może podlegać mechanizmowi GC w chwili, gdy jego odpowiadające powiadomienie znajduje się na liście oczekujących powiadomień lub liście aktywnych powiadomień i obiekt Notification o którym mowa ma zarejestrowany nasłuch zdarzenia z typem click, show, error lub close.
Algorytmy#
show steps
Krokami pokazania # (show steps) dla powiadomienia notification są:
- Jeśli zezwolenie dla pochodzenia w notification nie jest łańcuchem znakowym
"granted"to przerwij każde trwające pobieranie dla URL ikony w notification, a następnie dla każdego (for each) obiektuNotificationreprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaerrorna obiekcieNotificationi pomiń kolejne kroki. - Jeśli istnieje powiadomienie na liście oczekujących powiadomień lub liście aktywnych powiadomień, którego etykieta nie jest pustym łańcuchem znakowym i jest równa etykiecie w notification, i którego pochodzenie jest równe pochodzeniu w notification to uruchom kroki zastąpienia dla tego powiadomienia przez notification i pomiń kolejne kroki.
- Jeśli urządzenie pozwala powiadomieniom na natychmiastowe wyświetlanie bez ograniczeń co do liczby równoczesnych powiadomień to uruchom kroki wyświetlenia dla notification i pomiń kolejne kroki.
- Jeśli urządzenie posiada ograniczenia co do liczby równoczesnych powiadomień to albo natychmiast wywołaj platformę powiadomień, która natywnie wspiera kolejkowanie, albo dodaj notification do listy oczekujących powiadomień.
activate steps
Kiedy powiadomienie zostało aktywowane przez użytkownika, przy założeniu że podstawowa platforma powiadomień obsługuje aktywację, to krokami aktywacji # (activate steps) dla powiadomienia notification są:
Dla każdego (for each) obiektu
Notificationreprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclickna obiekcieNotification.W całej platformie webowej "aktywacja" jest świadomie (chociaż mylnie) nazywana "kliknięciem".
Aplikacje klienckie są usilnie zachęcane do automatycznego wywoływania metody
windows.focus()z poziomu nasłuchu zdarzenia dla zdarzenia typuclickw celu ustawienia zogniskowania na spokrewnionym z powiadomieniem kontekście przeglądania.
close steps
Kiedy powiadomienie zostało zamknięte, albo przez podstawową platformę powiadomień albo przez użytkownika, to krokami zamknięcia # (close steps) dla powiadomienia notification są:
- Jeśli notification nie znajduje się ani na liście oczekujących powiadomień ani na liście aktywnych powiadomień to pomiń kolejne kroki.
- Usuń notification zarówno z listy oczekujących powiadomień jak i listy aktywnych powiadomień, i dla każdego (for each) obiektu
Notificationreprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclosena obiekcieNotification.
display steps
Krokami wyświetlenia # (display steps) dla powiadomienia notification są:
Jeśli platforma powiadomień obsługuje ikony, URL ikony w notification jest ustawiony i wskazywana ikona nie została jeszcze pobrana, to pobierz ją i poczekaj na odpowiedź.
Jeśli typem w odpowiedzi wewnętrznej dla odpowiedzi jest
defaultto spróbuj zdekodować zasób jako obraz.Kiedy pobieranie zostanie zakończone i format obrazu jest obsługiwany, ustaw obraz ikony dla notification na zdekodowany zasób. W przeciwnym razie notification nie posiada obrazu ikony.
- Wyświetl notification na urządzeniu (np. poprzez wywołanie odpowiedniej platformy powiadomień).
- Jeśli wyświetlanie zawiedzie (np. platforma powiadomień zgłasza błąd), to dla każdego (for each) obiektu
Notificationreprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaerrorna obiekcieNotificationi pomiń kolejne kroki. - Dodaj notification do listy aktywnych powiadomień.
- Dla każdego (for each) obiektu
Notificationreprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniashowna obiekcieNotification.
replace steps
Krokami zastąpienia # (replace steps) dla starego powiadomienia old przez nowe powiadomienie new są:
Jeśli platforma powiadomień obsługuje ikony, URL ikony w new jest ustawiony i wskazywana ikona nie została jeszcze pobrana, to pobierz ją i poczekaj na odpowiedź.
Jeśli typem w odpowiedzi wewnętrznej dla odpowiedzi jest
defaultto spróbuj zdekodować zasób jako obraz.Kiedy pobieranie zostanie zakończone i format obrazu jest obsługiwany, ustaw obraz ikony dla new na zdekodowany zasób. W przeciwnym razie new nie posiada obrazu ikony.
- Jeśli old znajduje się na liście oczekujących powiadomień to zastąp old przez new na tej samej pozycji w liście oczekujących powiadomień, i dla każdego (for each) obiektu
Notificationreprezentującego old kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclosena obiekcieNotificationi pomiń kolejne kroki. W przeciwnym razie zastąp old przez new na tej samej pozycji w liście aktywnych powiadomień, następnie dla każdego (for each) obiektu
Notificationreprezentującego old kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclosena obiekcieNotification, a następnie dla każdego (for each) obiektuNotificationreprezentującego new kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniashowna obiekcieNotification.Jeśli platforma powiadomień nie obsługuje zastępowania to wymóg ten można zapewnić poprzez uruchomienie kroków zamknięcia dla old a następnie uruchomienie kroków wyświetlenia dla new.
Platformy powiadomień usilnie zachęca się do wspierania natywnego zastępowania. To jest o wiele subtelniejsze.