Pokazywanie postów oznaczonych etykietą Variable Add. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Variable Add. Pokaż wszystkie posty

18 października 2014

Tasker przypomni Ci o urodzinach, imieninach i rocznicach

Odkąd pamiętam mam problem z zapamiętywaniem dat. Z tego powodu zdarza mi się zapomnieć o urodzinach lub imieninach bliskich mi osób. Wpisanie dat do kalendarza częściowo rozwiązuje problem ale zawsze brakowało mi w telefonie przypominajki, którą trudno zignorować. W ten sposób powstał pomysł na projekt Taskera przypominający o urodzinach, imieninach i rocznicach osób z książki adresowej. Projekt codziennie rano i wieczorem wyszukuje w książce adresowej daty urodzin, imienin, rocznic ślubu i rocznic śmierci i jeśli takie występują dla danego dnia wyświetla powiadomienie umożliwiające wysłać wiadomość SMS, zadzwonić lub napisać wiadomość Hangouts do kontaktu. Prezentuje się to następująco.

Jest to trzecia wersja tego projektu. Poprzednie miały braki w funkcjonalności i nie umiały obejść niedoskonałości wtyczki AutoContacts. Ta wersja zdaje się być kompletna i nie zawierać błędów.
Jeśli coś z opisu lub samego projektu wyda Ci się niezrozumiałe to zachęcam do zadawania pytań. Postaram się na wszystkie odpowiedzieć.

Wymagania

Wtyczka AutoNotification

Wtyczka AutoNotification służy do generowania powiadomień. Oczywiście sam Tasker to potrafi za pomocą akcji Notify jednak wtyczka ma dużo większe możliwości konfiguracji tworzonego powiadomienia dlatego ja zdecydowanie wolę z niej korzystać. Poza generowaniem powiadomień wtyczka potrafi przechwytywać notyfikacje innych aplikacji co umożliwia np. zamykanie niechcianych powiadomień, przechwytywanie treści z powiadomień, uruchamianie profili w momencie pojawienia się notyfikacji z danego programu itp.

Instalacja i konfiguracja

Wtyczkę AutoNotification można pobrać ze sklepu Google Play. Po instalacji i wykupienia wersji Pro wtyczka jest gotowa do działania.

Konfiguracja

W dwóch pierwszych akcjach tasku AC Daty z kontaktów należy podać ścieżkę dostepu do plików graficznych oraz wybrany dxięk powiadomienia, który ma być odgrywany w momencie pojawienia się przypomnienia.

Opis wykonania

Projekt składa się z 6 profili. Dwa główne AN Przypomnienie o urodzinach [ranek] i AN Przypomnienie o urodzinach [wieczór] uruchamiają ten sam task AC Daty z kontaktów. Profil ranny uruchamiany jest o godzinie 10tej, wieczorny o 19tej pod warunkiem, że zmienna %BIRTHDAYR ma wartość 1. Zmienna ta ma wartość 1 jeśli użytkownik naciśnie poranne powiadomienie (nie odrzuci).

Task AC Daty z kontaktów zaczyna się od konfiguracji ścieżki dostępu do grafik oraz dźwięku powiadomienia, która użytkownik po imporcie projektu musi samemu dostosować do własnego systemu.
Następnie task sprawdza czy danego dnia są jakieś zdarzenia do obsłużenia (zmienna %daystoeventc) i jeśli tak odczytuje za pomocą akcji Run Shell i komend powłoki datę. Później w pętli pętla dane kontaktówporównując datę do listy dat jakie w zmiennej %acallevents otrzymuje od wtyczki AutoContacts task ustala ile dat należy obsłużyć danego dnia i dla tych dat odczytuje nazwiska, daty i typy dat i zapisuje je oddzielając przecinkami do zmiennych odpowiednio %nazwy_kontaktów, %daty_kontaktów i %typy_dat. Po tych operacjach wiadomo jest ile dat trzeba obsłużyć i otrzymuję zmienne macierzowe z wszystkimi niezbędnymi danymi.

Pętla powiadomienia odpowiedzialna jest za kolejno dla każdej daty ze zmiennej %daty_kontaktów wyciągnięcie z AutoContacts zdjęcia kontaktu i numerów telefonów i danych czatu Hangouts, przygotowanie tekstów dla powiadomienia i w końcu wyświetlenie powiadomienia. Przygotowanie tekstów i wyświetlanie powiadomień rozdzielone jest na cztery grupy, które kolejno obsługuję urodziny, imieniny, rocznice ślubów i rocznice śmierci. Oczywiście można stworzyć dodatkowe kategorie i obsłużyć je odpowiednimi powiadomieniami.

Do poprawnego działania projektu potrzebne są jeszcze profile odpowiedzialne za naciśnięcie powiadomienie przez użytkownika oraz obsługujące naciśnięcie klawiszy powiadomień.
Profil AN Przypomnij o urodzinach ma zadziałać w momencie naciśnięcie przez użytkownika powiadomienia. Dzięki kontekstowi AutoNotification oczekuje on na komendę o składni remind birthday=:=. Komendy takie są specyficzne dla wtyczek AutoNoticifation, AutoVoice, AutoRemote i innych tego samego autora. Zestaw znaków =:= rozdziela na części parametry komendy (może być ich więcej niż 2). W tym przypadku naciśniecie na notyfikacje wysyła komendę remind birthday=:=1, a parametr 1 komendy zostaje przekazany do zmiennej %ancomm dostępnej w tasku, dzięki temu możemy go przekazać do naszej zmiennej %BIRTHDAYR co zaowocuje ponownym przypomnieniem wieczorem (jeśli taka akcja miała miejsce rano).

Profil AN Wyślij wiadomość ma za zadanie przygotować wiadomość SMS do wysłania po naciśnięciu przycisku Wyślij wiadomość na powiadomieniu. W tym przypadku naciśnięcie przycisku przekazuje komendę composesms=:=%komórka gdzie %komórka zawiera numer telefonu komórkowego kontaktu.

Profil AN Zadzwoń ma za zadanie zadzwonić na numer kontaktu po naciśnięciu przycisku Zadzwoń na powiadomieniu. W tym przypadku naciśnięcie przycisku przekazuje komendę call=:=%komórka lub call=:=%dom (w zależności od dostępności numeru kontaktu).

Profil AN Hangouts ma za zadanie rozpocząć czat Hangouts z kontaktem po naciśnięciu przycisku Hangouts na powiadomieniu. W tym przypadku naciśnięcie przycisku przekazuje komendę browse=:=%achangouturi.

Rozpisany profil

Profile: AN Przypomnienie o urodzinach [wieczór] (45)
Time: 19:00
State: Variable Value [ %BIRTHDAYR = 1 ]
Enter: AC Daty z kontaktów (220)
<ścieżka do grafik>
A1: Variable Set [ Name:%scieżka_do_grafik To:/storage/emulated/0/Tasker/pictures Do Maths:Off Append:Off ]
<ścieżka do dźwięku>
A2: Variable Set [ Name:%scieżka_do_dźwięku To:content://media/internal/audio/media/246 Do Maths:Off Append:Off ]
A3: Variable Clear [ Name:%BIRTHDAYR Pattern Matching:Off ]
A4: AutoContacts [ Configuration:Order By: Next Event Date Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 ]
A5: Stop [ With Error:Off Task: ] If [ %acdaystoeventc != 0 ]
A6: Variable Set [ Name:%indeks To:1 Do Maths:Off Append:Off ]
A7: Run Shell [ Command:DATUM=$(date "+%m-%d")
echo $DATUM Timeout (Seconds):1 Use Root:Off Store Output In:%dzisiaj_md Store Errors In: Store Result In: ]
A8: Run Shell [ Command:DATUM=$(date "+%Y")
echo $DATUM Timeout (Seconds):1 Use Root:Off Store Output In:%dzisiaj_r Store Errors In: Store Result In: ]
<pętla dane kontaktów>
A9: If [ %acallevents(%indeks) ~ *%dzisiaj_md* ]
A10: If [ %acallevents(%indeks) ~ *,* ]
A11: Variable Set [ Name:%daty To:%acallevents(%indeks) Do Maths:Off Append:Off ]
A12: Variable Split [ Name:%daty Splitter:, Delete Base:Off ]
A13: Variable Set [ Name:%licznik To:%daty(#) Do Maths:Off Append:Off ]
<podwójna data>
A14: If [ %daty(%licznik) ~ *%dzisiaj_md* ]
A15: Variable Set [ Name:%nazwy_kontaktów To:%acnames(%indeks), Do Maths:Off Append:On ]
A16: Variable Set [ Name:%daty_kontaktów To:%daty(%licznik), Do Maths:Off Append:On ]
A17: Variable Set [ Name:%typy_dat_temp To:%acalleventtypes(%indeks) Do Maths:Off Append:Off ]
A18: Variable Split [ Name:%typy_dat_temp Splitter:, Delete Base:Off ]
A19: Variable Set [ Name:%typy_dat To:%typy_dat_temp(%licznik), Do Maths:Off Append:On ]
A20: Variable Add [ Name:%ile_dat Value:1 Wrap Around:0 ]
A21: Variable Subtract [ Name:%licznik Value:1 Wrap Around:0 ]
A22: Goto [ Type:Action Label Number:1 Label:podwójna data ] If [ %licznik > 0 ]
A23: Else
A24: Variable Subtract [ Name:%licznik Value:1 Wrap Around:0 ]
A25: Goto [ Type:Action Label Number:1 Label:podwójna data ] If [ %licznik > 0 ]
A26: End If
A27: Else
A28: Variable Set [ Name:%nazwy_kontaktów To:%acnames(%indeks), Do Maths:Off Append:On ]
A29: Variable Set [ Name:%daty_kontaktów To:%acallevents(%indeks), Do Maths:Off Append:On ]
A30: Variable Set [ Name:%typy_dat To:%acalleventtypes(%indeks), Do Maths:Off Append:On ]
A31: Variable Add [ Name:%ile_dat Value:1 Wrap Around:0 ]
A32: End If
A33: Variable Add [ Name:%indeks Value:1 Wrap Around:0 ]
A34: Goto [ Type:Action Label Number:1 Label:pętla dane kontaktów ]
A35: End If
A36: Variable Split [ Name:%daty_kontaktów Splitter:, Delete Base:Off ]
A37: Variable Split [ Name:%typy_dat Splitter:, Delete Base:Off ]
A38: Variable Split [ Name:%nazwy_kontaktów Splitter:, Delete Base:Off ]
<pętla powiadomienia>
A39: If [ %typy_dat(%ile_dat) ~ imieniny/urodziny/birthday/ślub/zgon ]
A40: Variable Clear [ Name:%dom Pattern Matching:Off ]
A41: Variable Clear [ Name:%komórka Pattern Matching:Off ]
A42: Variable Clear [ Name:%acpicturefile Pattern Matching:Off ]
A43: Variable Clear [ Name:%achangouturi Pattern Matching:Off ]
A44: AutoContacts [ Configuration:Contact Name or Nickname: %nazwy_kontaktów(%ile_dat) Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 ]
A45: AutoContacts Details [ Configuration:Contact Id: %acid
Get Picture: true
Full size: true Package:com.joaomgcd.autocontacts Name:AutoContacts Details Timeout (Seconds):1000 ]
A46: Variable Set [ Name:%telefony To:%acallnumbers(1) Do Maths:Off Append:Off ]
A47: Variable Set [ Name:%typy_telefonów To:%acallnumbertypes(1) Do Maths:Off Append:Off ]
A48: Variable Split [ Name:%telefony Splitter:, Delete Base:Off ]
A49: Variable Split [ Name:%typy_telefonów Splitter:, Delete Base:Off ]
<komórka>
A50: Variable Set [ Name:%licznik To:%typy_telefonów(#?Komórka) Do Maths:Off Append:Off ]
A51: Variable Split [ Name:%licznik Splitter:, Delete Base:Off ] If [ %licznik !~ 0 ]
A52: Variable Set [ Name:%komórka To:%telefony(%licznik1) Do Maths:Off Append:Off ] If [ %licznik !~ 0 ]
<dom>
A53: Variable Set [ Name:%licznik To:%typy_telefonów(#?Domowy) Do Maths:Off Append:Off ]
A54: Variable Split [ Name:%licznik Splitter:, Delete Base:Off ] If [ %licznik !~ 0 ]
A55: Variable Set [ Name:%dom To:%telefony(%licznik1) Do Maths:Off Append:Off ] If [ %licznik !~ 0 ]
<urodziny>
A56: If [ %typy_dat(%ile_dat) ~ urodziny/birthday ]
A57: Variable Set [ Name:%data To:%daty_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A58: Variable Split [ Name:%data Splitter:- Delete Base:Off ]
A59: Variable Set [ Name:%urodziny To:%dzisiaj_r-%data(1) Do Maths:On Append:Off ]
A60: Variable Set [ Name:%nottitle To:Urodziny %nazwy_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A61: Variable Set [ Name:%nottext To:%nazwy_kontaktów(%ile_dat) świętuje dziś %urodziny urodziny. Do Maths:Off Append:Off ]
A62: If [ %komórka Set & %achangouturi Set ]
A63: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Button 3: browse=:=%achangouturi
Label 3: Hangouts
Icon 3: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A64: Else If [ %dom Set & %achangouturi Set ]
A65: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: browse=:=%achangouturi
Label 2: Hangouts
Icon 2: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A66: Else If [ %komórka Set ]
A67: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Icon 3: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A68: Else If [ %dom Set ]
A69: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A70: Else If [ %achangouturi Set ]
A71: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext
Button 1: browse=:=%achangouturi
Label 1: Hangouts
Icon 1: ic_action_dialog
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A72: Else
A73: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/birthday.jpg
Text Expanded: %nottext Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A74: End If
A75: End If
<imieniny>
A76: If [ %typy_dat(%ile_dat) ~ imieniny ]
A77: Variable Set [ Name:%nottitle To:Imieniny %nazwy_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A78: Variable Set [ Name:%nottext To:Nie zapomnij złożyć życzeń. Do Maths:Off Append:Off ]
A79: If [ %komórka Set & %achangouturi Set ]
A80: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Button 3: browse=:=%achangouturi
Label 3: Hangouts
Icon 3: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A81: Else If [ %dom Set & %achangouturi Set ]
A82: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: browse=:=%achangouturi
Label 2: Hangouts
Icon 2: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A83: Else If [ %komórka Set ]
A84: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Icon 3: ic_launcher Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A85: Else If [ %dom Set ]
A86: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A87: Else If [ %achangouturi Set ]
A88: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext
Button 1: browse=:=%achangouturi
Label 1: Hangouts
Icon 1: ic_action_dialog
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A89: Else
A90: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: imieniny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/imieniny.jpg
Text Expanded: %nottext Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A91: End If
A92: End If
<ślub>
A93: If [ %typy_dat(%ile_dat) ~ ślub ]
A94: Variable Set [ Name:%data To:%daty_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A95: Variable Split [ Name:%data Splitter:- Delete Base:Off ]
A96: Variable Set [ Name:%ślub To:%dzisiaj_r-%data(1) Do Maths:On Append:Off ]
A97: Variable Set [ Name:%nottitle To:Rocznica ślubu %nazwy_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A98: Variable Set [ Name:%nottext To:%nazwy_kontaktów(%ile_dat) świętuje dziś %ślub rocznicę ślubu. Do Maths:Off Append:Off ]
A99: If [ %komórka Set & %achangouturi Set ]
A100: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Button 3: browse=:=%achangouturi
Label 3: Hangouts
Icon 3: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A101: Else If [ %dom Set & %achangouturi Set ]
A102: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: browse=:=%achangouturi
Label 2: Hangouts
Icon 2: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A103: Else If [ %komórka Set ]
A104: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext
Button 1: call=:=%komórka
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Button 2: composesms=:=%komórka
Label 2: Wyślij wiadomość
Icon 2: ic_action_sms
Icon 3: ic_action_dialog Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A105: Else If [ %dom Set ]
A106: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext
Button 1: call=:=%dom
Label 1: Zadzwoń
Icon 1: ic_action_phone_start
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A107: Else If [ %achangouturi Set ]
A108: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext
Button 1: browse=:=%achangouturi
Label 1: Hangouts
Icon 1: ic_action_dialog
Icon 2: ic_action_phone_start Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A109: Else
A110: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_balloon
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik/wedding.jpg
Text Expanded: %nottext Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A111: End If
A112: End If
<zgon>
A113: If [ %typy_dat(%ile_dat) ~ zgon ]
A114: Variable Set [ Name:%data To:%daty_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A115: Variable Split [ Name:%data Splitter:- Delete Base:Off ]
A116: Variable Set [ Name:%zgon To:%dzisiaj_r-%data(1) Do Maths:On Append:Off ]
A117: Variable Set [ Name:%nottitle To:Rocznica śmierci %nazwy_kontaktów(%ile_dat) Do Maths:Off Append:Off ]
A118: Variable Set [ Name:%nottext To:Dziś jest %zgon rocznica śmierci %nazwy_kontaktów(%ile_dat). Do Maths:Off Append:Off ]
A119: AutoNotification [ Configuration:Title: %nottitle
Text: %nottext
Ticker: %nottitle
Action on Touch: cancel=:=birthday
Action on Dismiss: remind birthday=:=1
Icon: %acpicturefile
Status Bar Icon: ic_action_basket
Id: urodziny_%acid
Dismiss on Touch: true
Priority: 1
Sound: %scieżka_do_dźwięku
Picture: %scieżka_do_grafik

/rip.jpg
Text Expanded: %nottext Package:com.joaomgcd.autonotification Name:AutoNotification Timeout (Seconds):0 ]
A120: End If
A121: Variable Subtract [ Name:%ile_dat Value:1 Wrap Around:0 ]
A122: Goto [ Type:Action Label Number:1 Label:pętla powiadomienia ] If [ %ile_dat > 0 ]
A123: End If

Profile: AN Przypomnij o urodzinach (42)
State: AutoNotification [ Configuration:Event Behaviour
Filter: remind birthday=:= ]
Enter: Anon (43)
A1: AutoNotification Cancel [ Configuration:Id: %anpar2 Package:com.joaomgcd.autonotification Name:AutoNotification Cancel Timeout (Seconds):0 ]
A2: Variable Set [ Name:%BIRTHDAYR To:%ancomm Do Maths:Off Append:Off ]

Profile: AN Wyślij wiadomość (27)
State: AutoNotification [ Configuration:Event Behaviour
Filter: composesms=:= ]
Enter: Anon (39)
A1: Status Bar [ Set:Collapsed ]
A2: Compose SMS [ Recipient(s):%ancomm Message: ]
A3: AutoNotification Cancel [ Configuration:Id: %anpar2 Package:com.joaomgcd.autonotification Name:AutoNotification Cancel Timeout (Seconds):0 ]

Profile: AN Zadzwoń (40)
State: AutoNotification [ Configuration:Event Behaviour
Filter: call=:= ]
Enter: Anon (41)
A1: Status Bar [ Set:Collapsed ]
A2: Call [ Number:%ancomm Auto Dial:On ]
A3: AutoNotification Cancel [ Configuration:Id: %anpar2 Package:com.joaomgcd.autonotification Name:AutoNotification Cancel Timeout (Seconds):0 ]

Profile: AN Hangouts (192)
State: AutoNotification [ Configuration:Event Behaviour
Filter: browse=:= ]
Enter: Anon (201)
A1: Status Bar [ Set:Collapsed ]
A2: Browse URL [ URL:%ancomm ]
A3: AutoNotification Cancel [ Configuration:Id: %anpar2 Package:com.joaomgcd.autonotification Name:AutoNotification Cancel Timeout (Seconds):0 ]

Pobieranie profilu

Projekt Urodziny [Tasker 4.5u1]
Pliki JPG należy umieścić w folderze /sdcard/Tasker/pictures/.

30 sierpnia 2014

Zapętlony Tasker

Prędzej czy później (raczej prędzej) tworząc profile w Taskerze potrzebne nam będzie skorzystanie z instrukcji warunkowych i pętli. Dla niewtajemniczonych pewnie brzmi to dość strasznie ale postaram się wszystko łopatologicznie wytłumaczyć. Przed pętlami omówię akcje Goto, Stop oraz etykiety akcji, które będą nam za chwilę potrzebne.
Oczywiście zachęcam do komentowania i zadawania pytań jeśli coś będzie niejasne.

Akcje Goto, Stop oraz etykiety

Zazwyczaj akcje tasku wykonywane są kolejno jeden po drugim. Dzięki akcji Goto możemy wykonać skok do innych części tasku. Skok taki można wykonać do:

  • akcji o wybranym numerze
  • akcji o wprowadzonej etykiecie (label)
  • początku pętli
  • końca pętli
  • końca instrukcji warunkowej If
Etykieta akcji to nazwa nadana przez użytkownika. Tworzy się ją w konfiguracji danej akcji zaznaczając checkbox Label i wpisując nazwę etykiety.
Akcja Stop powoduje natychmiastowe zakończenie przetwarzania tasku.

Instrukcja warunkowa If...Else...End If

Instrukcja warunkowa If jest elementem, który pozwala wykonać pewne akcje w zależności od tego czy zdefiniowane wyrażenie logiczne jest spełnione lub nie.
Instrukcję tą tworzymy za pomocą akcji If, Else oraz End If. W konfiguracji akcji If dokonujemy porównania wartości. Jeśli jest ono spełnione wykonują się akcje po akcji If, jeśli nie, wykonują się akcje po akcji Else (jeśli takowa jest dodana). Jeżeli po instrukcji warunkowej mają być umieszczone inne akcje, nie związane z instrukcją warunkową, trzeba zakończyć ją akcją End If.

Warunek If można też stosować w konfiguracji każdej akcji. Pozwala to uprościć warunki. W powyższym przykładzie warunek If dodany jest w konfiguracji akcji Else dzięki czemu otrzymujemy podwójną instrukcję warunkową. Dla zmiennej %BATT (globalna zmienna Taskera przechowująca poziom naładowania baterii) większej od 90 zostanie wyświetlony tost z tekstem Bateria naładowana. Jeśli wartość zmiennej %BATT będzie mniejsza niż 90 ale większa niż 20 (dodatkowy warunek If w konfiguracji akcji Else) wyświetlony zostanie tost Bateria: powyżej 20%. Jeśli żaden z powyższych warunków nie będzie spełniony zostanie wyświetlony tost Bateria bliska rozładowaniu.

Pętla warunkowa For each...Loop

Pętla warunkowa For each umożliwia wykonanie zestawu akcji dla wybranych wartości nadawanych zmiennej. Akcja For each może przyjmować następujące zestawy wartości:

  • wartości tekstowe oddzielone przecinkami np. dom,drzewo,koń,samochód
  • wartości liczbowe oddzielone przecinkami np. 3,5,8,9
  • zakres wartości liczbowych np. 2:8 co jest równoznaczne z 2,3,4,5,6,7,8
  • zakres wartości liczbowych ze zdefiniowanym skokiem np. 0:10:2 co jest równoznaczne z 0,2,4,6,8,10
  • część zmiennej typu macierz np. %macierz(1:2) co jest równoznaczne z %macierz1,%macierz2
Jeśli jako zestaw wydajności podana zostanie zmienna typu macierz w takim zapisie %macierz() to pętla zostanie wykonana dla jej wszystkich elementów.
Na powyższym przykładzie zdefiniowano zakres wartości od 0 do 8 ze skokiem 2. Pierwsza akcja Goto powoduje przeskok do następnego elementu serii bez wykonania pozostałych akcji pętli jeśli zmienna %licznik ma wartość 4. Druga akcja Goto spowoduje przeskok do końca pętli jeśli zmienna %licznik ma wartość większą od 6. Jako wynik tego tasku otrzymamy tosty z wartościami kolejno 0, 2, 6, 8.

Pętla warunkowa Until...Loop

Pętla warunkowa Until pozwala na wykonanie pewnych akcji dopóki dana zmienna nie spełni założonego warunku. Tasker nie ma specjalnej akcji Until ale można ją zrealizować poprzez akcję Goto.

Dopóki zmienna %licznik będzie mniejsza od 12 akcja Goto będzie wykonywała przeskoki do akcji numer 2 czyli akcje pętli warunkowej będą powtarzane. Akcja Variable Add za każdym razem zwiększa zmienną %licznik o 3 (możliwe jest zdefiniowanie innej wartości w konfiguracji akcji). Gdy po czterech powtórzeniach pętli wartość zmiennej %licznik będzie wynosił 12, pętla zostanie zakończona.

Pętla warunkowa While...Loop

Pętla warunkowa While pozwala na wykonanie pewnych akcji w czasie gdy dana zmienna spełnia założony warunek. Tasker nie ma specjalnej akcji While ale można ją zrealizować poprzez akcje Goto i Stop.

W czasie gdy zmienna %licznik nie będzie równa 12 akcja Goto będzie dokonywała skoków do akcji Stop z etykietą pętla, która sprawdza warunek co spowoduje powtarzanie akcji pętli (Flash oraz Variable Add zwiększające wartość zmiennej o 3). Gdy zmienna %licznik osiągnie wartość 12, warunek zostanie spełniony i akcja Stop zatrzyma pętle warunkową oraz cały task.