27 listopada 2014

Właściwości profili i tasków

Gdy zaczynałem pisać ten wpis dotyczący właściwości profili i tasków wydawało mi się, że będzie on krótki, zajmie mi mało czasu i napiszę go bez zaglądania do pomocy Taskera. W trakcie pisania okazało się, że temat się rozrósł, a ja muszę przeczytać parę paragrafów pomocy i dowiedzieć się czegoś nowego. Zapraszam do lektury i komentowania.

Właściwości profili

Aby dostać się do właściwości profilu należy dłużej przytrzymać jego nazwę i w górnym pasku pojawią się dodatkowe klawisze, z których drugi od prawej strony prowadzi do właściwości danego profilu. Ekran właściwości prezentuje się następująco:

Priorytety tasków

Zanim przejdę do omawiania poszczególnych pozycji właściwości profilu muszę nieco przybliżyć sposób w jaki Takser traktuje taski oraz ich priorytety.
Gdy Tasker ma do wykonania jeden task to kolejno wykonuje jego wszystkie akcje. Jeśli jednak w kolejce do wykonania jest więcej tasków Tasker wykonuje je według następujących zasad:

  • nie może być wykonana więcej niż jedna akcja z danej grupy w tym samym czasie
  • task z wyższym priorytetem jest wykonywany przed taskiem z niższym priorytetem
  • taski o tych samych priorytetach wykonywane są kolejno (ich akcje mogą być wykonywane na przemian) zaczynając od tego, który został dodany do kolejki najwcześniej
  • wyjątek stanowi task będący potomkiem innego tasku, który zostanie wykonany przed pozostałymi taskami czekającymi w kolejce
Uważny czytelnik zapyta w tym miejscu o wspomniane w pierwszym punkcie grupy akcji. Akcje pod względem prędkości wykonywania i wpływu między sobą zostały podzielone na następujące grupy:
  • Speach: np. akcja Say
  • Javascript
  • Fix: wszelkie akcje związane z lokalizacją
  • Voice: akcja Get Voice
  • Proxy: akcje Display Brightness, Query Action, Photo, Photo Series, Photo Series Time
  • Proxy Scene: akcje Enter Key, Menu, Popup, Popup Task Buttons, Variable Query
  • Other Scenes: inne akcje wywołane przez scenę
  • Normal: wszystkie inne akcje
  • akcje Wait oraz Wait Until
Każdy uruchamiany task otrzymuje swój priorytet, który mówi o tym jak szybko będzie wykonany jeśli w kolejce czekają inne taski do wykonania. Im większa wartość priorytetu tym task będzie szybciej wykonany.
  • taski wejściowe profili ustawia się we właściwościach profilu w zakresie 1-10, domyślnie 5
  • taski wyjściowe profili mają priorytet ustawiony na wartość z właściwości profilu plus 11, domyślnie 16
  • taski skrótów i widżetów mają domyślnie ustawiony priorytet na 7, można go zmienić w ustawieniach Taskera
  • task uruchomiony przez klawisz Test na ekranie edycji tasku ma priorytet o wartości 10
  • task uruchomiony przez element sceny ma priorytet o jeden większy od priorytetu tasku, który wyświetlił scenę
Jeśli w kolejce czeka kilka tasków pochodzących od tego samego profilu (przykładowo task wejściowy i wyjściowy) to z domyślnymi ustawieniami mamy gwarancję, że task wyjściowy zacznie być wykonywany dopiero po całkowitym zakończeniu tasku wejściowego. Mimo, że task wyjściowy ma większy priorytet. Zachowanie to można zmienić o czym za chwilę.

Launched Task Priority

Ustawia wartość priorytetu tasku wejściowego profilu w zakresie 1-10. Domyślna wartość to 5. Od tej wartości zależy też wartość priorytetu tasku wyjściowego, który ustalany jest jako suma wartości ustawionej i 11. Domyślna wartość to 16.

Cooldown Time

Czas, po którym profil może stać się aktywny mierzony od momentu utraty aktywności przez ten profil. Restart systemu zeruje licznik czasu.
Ja używam tej funkcjonalności dla profilu, który uruchamia mi synchronizację danych z Dropboksem za pomocą aplikacji DropSync gdy telefon podłączony jest do ładowarki. Cooldown Time ustawiłem na 12 godzin i dzięki temu synchronizacja nie jest uruchamiana częściej niż 2 razy na dobę.

Limit Repeats

Ta opcja włącza limit powtórzeń aktywności profilu.

Remaining Repeats

W tym miejscu ustawia się limit ilości powtórzeń aktywności profilu.
Przykładowo jeśli ustawisz limit na 10, to za każdym razem gdy dany profil stanie się aktywny licznik ten zmniejszy się o 1, a gdy osiągnie 0, profil mimo spełnionych warunków kontekstów nie stanie się aktywny.

Delete On Zero Repeats

Zaznaczenie tej opcji spowoduje, że gdy limit ilości powtórzeń aktywności dojdzie do zera, Tasker usunie profil, którego tyczy się to ustawienie.

Restore Settings

Opcja ta decyduje czy przy dezaktywacji profilu będą przywracane wartości ustawień zmienionych za pomocą akcji typu ustawienie wykonanych w tasku wejściowym.

Enforce Task Order

Zaznaczenie tej opcji zapewnia zakończenie tasku wejściowego danego profilu przed rozpoczęciem tasku wyjściowego.
Przykładowo profil Test ma task wejściowy enter1, a w nim za pomocą akcji Perform Task uruchamiany jest task enter2, natomiast taskiem wyjściowym profilu jest exit1, w którym uruchamiany jest task exit2. Jeśli opcja Enforce Task Order jest zaznaczona to taski wyjściowe zaczną być wykonywane dopiero po zakończeniu tasków enter1 i enter2. Taski enter1 i enter2 będą wykonywane w zależności od nadanych im priorytetów.
Z wyłączoną opcją Enforce Task Order taski będą wykonywane w kolejności wynikającej z ich priorytetów, a skoro taski wyjściowe mają priorytety większe zostaną wykonane przed zakończeniem tasków wejściowych.

Show In Notification Pulldown

Opcja ta odpowiada za wyświetlanie nazwy profilu gdy jest on aktywny na powiadomieniu Taskera.

Właściwości tasków

Ekan właściwości tasku dostępny jest pod drugim klawiszem od prawej strony na dole ekranu edycji tasku i prezentuje się on tak:

Collision Handling

Czasami zdarzyć się może, że podczas wykonywania tasku jest on uruchamiany ponownie. Opcja ta decyduje jak Tasker ma postępować w takich sytuacjach. Możliwe są trzy warianty:

  • Abort New Task - Tasker zignoruje nową kopię tasku (to działanie jest domyślne)
  • Abort Existing Task - Tasker zatrzyma obecnie wykonywaną kopię tasku i zacznie wykonywanie nowej kopii
  • Run Both Together - Tasker będzie wykonywał obie kopie tasku równocześnie

Keep Device Awake

Domyślnie dla każdego tasku gwarantowany jest czas równy jednej minucie kiedy Tasker blokuje procesor urządzenia przed przejściem w stan uśpienia. W przypadku tasków, które mogą trwać dłużej zaznaczenie tej opcji zapewni utrzymanie aktywności procesora aż do pełnego wykonania tasku. Należy pamiętać, że w przypadku błędu w tasku, np. zapętlenia, może dojść do szybkiego rozładowania baterii jeśli ta opcja będzie zaznaczona.

Przełączanie Taskerem trybów transferu danych 2G/3G pod Androidem 5.0

Jako, że ostatnio przesiadłem się na Androida 5.0 musiałem stawić czoła dostosowaniu profilów Taskera do nowego systemu. Wcześniej używałem systemu bazującego na CM i AOSP więc możliwości współpracy z Taskerem były dużo większe.
Jedyną funkcją, której przez ostatnie dni nie udało mi się uzyskać było przełączanie trybów transferu danych 2G/3G. Jako, że dla Androida 5.0 nie ma jeszcze aplikacji Xposed i modów dla niej sprawa wydawała się przegrana.
Jednak przedwczoraj, niespodziewanie, trafiłem na aplikację Toggle Network Type 5.0. Okazało się, że świetnie ona sobie radzi z przełączeniem 2G/3G pod Lizakiem, ma ładny widżet, a w dodatku jest pluginem do Taskera. Po dwóch dniach testów stwierdzam, że działa bezbłędnie. Polecam.

Pobieranie

Aplikację można pobrać ze sklepu Google Play gdzie obecnie jest na nią promocja i kosztuje 4,15 zł lub z xda-developers gdzie rozdawana jest za darmo.

6 listopada 2014

Zaproszenia do Google Inbox

Jeśli ktoś szuka zaproszeń do Google Inbox to ja dysponuje trzema i chętnie się podzielę. Wystarczy poprzez Hangouts lub maila podesłać swój adres Gmail (proszę nie zostawiać adresów w komentarzach).

Aktualizacja

Obecnie mam 5 zaproszeń do rozdania. Ktoś chętny?

5 listopada 2014

Profil: Głosowe wysyłanie wiadomości SMS

Dziś przedstawię kolejny profil, w którym główne skrzypce odgrywa komunikacja głosowa z urządzeniem. Dokładnie chodzi o podyktowanie i wysłanie wiadomości SMS tylko za pomocą głosu.
Profil uruchamia się następującymi komendami głosowymi:

  • wyślij wiadomość do Jan Kowalski
  • wyślij sms do Jan Kowalski
  • wyślij smsa do Jan Kowalski
  • wiadomość do Jan Kowalski
  • sms do Jan Kowalski
przy założeniu, że wysłać ma wiadomość do kontaktu Jan Kowalski.
Po uruchomieniu profil sprawdza czy w kontaktach znajduje się kontakt o podanej nazwie oraz czy kontakt ten ma wpisany numer telefonu komórkowego następnie prosi użytkownika o podyktowanie treści wiadomości i jeśli użytkownik zatwierdzi jej poprawność wysyła ją do odbiorcy. W przypadku braku zatwierdzenia poprawności treści wiadomości profil proponuje ponowne jej podyktowanie.

Wymagania

  • wtyczka AutoVoice w wersji płatnej
  • wtyczka AutoContacts w wersji płatnej
  • generator głosu Text-To-Speech, przykładowo IVONA lub Google TTS
  • do poprawnego działania profilu niezbędny jest porządek w książce adresowej tzn. numery telefonów komórkowych muszą być opisane jako komórka

Opis wykonania

Profil uruchamiany jest za pomocą kontekstu AutoVoice Recognized z zaznaczoną opcją Event Behavior, Use Regex i filtrem komendy ustawionym na (?:wyślij )?(?:wiadomość|sms[a]?) do (?<contact>.*).

W tym miejscu spróbuję rozszyfrować ten zapis. Jest to wyrażenie regularne, które pozwala wywołać uruchomienie profilu kilkoma komendami głosowymi według powyższego schematu.
Wyrażenie (?:wyślij )? oznacza, że w komendzie może ale nie musi pojawić się słowo wyślij ze spacją po nim. Ostatni znak zapytania gwarantuje to, że słowo wyślij nie jest obligatoryjne. Dzięki temu profil można uruchomić komendą wyślij wiadomość do Jan Kowalski ale również wiadomość do Jan Kowalski.
Zestaw znaków (?: ) tworzy grupę, która w tym przypadku ma tylko jeden element czyli wyślij .
Następna część wyrażenia regularnego (?:wiadomość|sms[a]?) tworzy kolejną grupę, która ma dwa elementy oddzielone znakiem |. Zapis sms[a]? oznacza słowo sms oraz jeden znak a, który może ale nie musi wystąpić. Dzięki temu profil zostanie uruchomiony komendą wyślij sms do Jan Kowalski ale także wyślij smsa do Jan Kowalski.
W końcu wyrażenie (?<contact>.*) tworzy parametr, który zostanie przekazany do Taskera w postaci zmiennej %contact czyli w tym przypadku w tej zmiennej znajdzie się wartość Jan Kowalski.
Task zadania zaczyna się od akcji AutoContacts ze zmienną %contact wpisaną w pole Contact Name or Nickname. Dzięki temu wtyczka wyszukuje w kontaktach przykładowego Jana Kowalskiego i wypełnia zmienne danymi jego kontaktu.
Następnie sprawdzana jest zmienna %acnumber, która powinna otrzymać wartość pierwszego numeru telefonu kontaktu. Jeśli nie ma nadanej wartości oznacza task powiadamia głosowo użytkownika o nieznalezieniu kontaktu i zatrzymuje dalsze akcje.
Kolejnym krokiem jest ustalenie, który numer telefonu jest numerem komórkowym. Jeśli numer komórkowy nie zostanie odnaleziony generowana jest głosowa informacja o błędzie, a task zostaje zatrzymany.

Następnie task głosowo prosi o podyktowanie treści wiadomości i za pomocą akcji AutoVoice Recognize rejestruje co powiedział użytkownik. Kolejnym krokiem jest głosowe odczytanie podyktowanej treści i pytanie czy treść jest poprawna. Jeśli użytkownik potwierdzi poprawność, wiadomość jest wysyłana za pomocą akcji Send SMS, w której w polu Number należy podać zmienną %komórka, a w polu Message %sms. Jeśli użytkownik nie potwierdzi poprawności smsa, task proponuje ponowne podyktowanie wiadomości i wraca do prośby o podyktowanie jej treści.

Rozpisany profil

Profile: Wyślij SMS (193)

State: AutoVoice Recognized [ Configuration:Event Behaviour: true
Command: "(?:wyślij )?(?:wiadomość|sms[a]?) do (?<contact>.+) (regex)" ]
Enter: Anon (200)
A1: AutoContacts [ Configuration:Contact Name or Nickname: %contact Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 Continue Task After Error:On ]
A2: If [ %acnumber !Set ]
A3: Say [ Text:Nie znaleziono kontaktu %contact Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A4: Stop [ With Error:Off Task: ]
A5: End If
A6: Variable Split [ Name:%acallnumbers1 Splitter:, Delete Base:Off ]
A7: Variable Split [ Name:%acallnumbertypes1 Splitter:, Delete Base:Off ]
A8: Variable Set [ Name:%index To:%acallnumbertypes1(#?Komórka) Do Maths:Off Append:Off ]
A9: Variable Split [ Name:%index Splitter:, Delete Base:Off ] If [ %index !~ 0 ]
A10: Variable Set [ Name:%komórka To:%acallnumbers1(%index1) Do Maths:Off Append:Off ] If [ %index !~ 0 ]
A11: If [ %komórka !Set ]
A12: Say [ Text:Nie znaleziono numeru komórkowego kontaktu %acname Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A13: Stop [ With Error:Off Task: ]
A14: End If
<podyktuj>
A15: Say [ Text:Podyktuj wiadomość po sygnale. Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A16: Variable Clear [ Name:%avcomm Pattern Matching:Off ]
A17: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A18: Goto [ Type:Action Label Number:1 Label:podyktuj ] If [ %avcomm !Set ]
A19: Variable Set [ Name:%sms To:%avcomm Do Maths:Off Append:Off ]
A20: Say [ Text:Czy chcesz wysłać wiadomość do %acname o treści: %sms? Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A21: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A22: If [ %avcomm ~ tak ]
A23: Send SMS [ Number:%komórka Message:%sms Store In Messaging App:On ]
A24: Say [ Text:Wiadomość wysłana. Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A25: Else
A26: Say [ Text:Czy chcesz poprawić wiadomość? Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A27: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A28: Goto [ Type:Action Label Number:9 Label:podyktuj ] If [ %avcomm ~ tak ]
A29: End If

Pobieranie profilu

Profil Głosowe wysyłanie wiadomości sms [Tasker 4.5u1]