MareX WeBlog

Simple Volume v Taskeru aneb synchronizace hlasitosti oznámení s hlasitostí vyzvánění

REKLAMA

Občas mi přijde email od některého z uživatelů aplikace Simple Volume pro Android, že aplikace buď nefunguje, nebo by alespoň potřebovala aktualizaci, protože už strašně dlouhou dobu nebyla aktualizována a vypadá hrozně. To je samozřejmě pravda. Tedy s tou nefunkčností nevím, mě zatím vždy na každém telefonu fungovala bez problémů včetně současného SGS7e. Problém je, že já už žádnou aktualizaci vydat nemohu, protože nemám původní zdroje (to by nebyl až takový problém, mohl bych ji udělat úplně celou znovu), ale hlavně už nemám certifikát, kterým je aplikace podepsaná. A bez něj nemohu aktualizovat původní aplikaci. To znamená, že žádné další aktualizace už nikdy nebudou, bohužel.

Ale protože aplikace byla původně vytvořena v Taskeru, mohl bych alespoň ukázat, jak si něco podobného právě v Taskeru vytvořit. I když nevím, jestli to není zbytečné, protože princip je tak jednoduchý, že by to nejspíš zvládl každý sám. Tak spíš jen tak pro jistotu.

Pokud by někdo nevěděl, k čemu je to dobré, tak vězte, že například v telefonech Samsung je hlasitost jednotlivých streamů oddělená a nelze ji nijak spojit. Takže když například tlačítky na boku telefonu měníte hlasitost, mění se pouze hlasitost vyzvánění. Hlasitost oznámení (SMS, email, messenger atd.) se nemění. Mě to přijde dost nelogické.

Ale už k samotné tvorbě. Spusťte aplikaci Tasker a vytvořte nový projekt. To uděláte tak, že kliknete na ikonku domečku vlevo dole a vyberete první položku Add. Projekt si pojmenujte třeba Simple Volume jako já. Tvorba projektu není nutná, ale díky odděleným projektům budete mít v Taskeru pořádek a přehled.

Pokud vám nejde vytvořit nový projekt (nevidíte ikonku domečku), běžte do nastavení (nabídka vpravo nahoře a volba Preferences) a na první záložce UI zruště zaškrtnutí u položky Beginner Mode.

Nyní vytvoříme nový profil. Na záložce Profiles v hlavním okně Taskeru klikněte na ikonku + vpravo dole a vyberte Event. V zobrazené nabídce vyberte Variables a poté Variable Set. Do políčka Variable zadejte %VOLR buď ručně (pozor, musí být velkými písmeny!), nebo klikněte na ikonku štítků v řádku Variable a v zobrazeném seznamu vyberte Volume - Ringer.

Event - Variables - Variable Set

Na telefonu stiskněte tlačítko zpět, tím se změny uloží a vyskočí na vás okénko se seznamem již vytvořených tasků. Zvolte první možnost New Task a tentokrát se ukáže okénko pro zadání názvu. Název zadávat nemusíte, tento task už nebudeme nikde jinde potřebovat, takže nechte políčko prázdné a klikněte na fajfku vpravo vedle pole pro zadání názvu. Otevře se okno pro editaci tasku. Klikněte na ikonu + uprostřed dole. Ze zobrazené nabídky vyberte Audio a poté Notification Volume. V okně je hned první položka Level zobrazena jako posuvník, klikněte tedy na ikonku dvojité vlnité šipky vpravo a posuvník se změní na textové pole pro ruční zadání hodnoty. Klikněte tedy na ikonku štítků, která se objevila nalevo vedle ikony vlnitých šipek a ze seznamu proměnných vyberte Volume - Ringer (to je opět ta proměnná %VOLR). Zbytek nechte, jak je a tlačítkem zpět opět uložte změny. Pokud chcete, aby se vám na stejnou hlasitost nastavovala i hlasitost systémových zvuků, proveďte stejný postup ještě jednou, ovšem po kliknutí na + vyberte Audio a pak System Volume, zbytek je stejný.

Action - Audio - Notification Volume Action - Audio - System Volume

A tohle je vlastně všechno. Teď, když změníte hlasitost vyzvánění například tlačítky na boku telefonu, automaticky se nastaví stejná hlasitost i na zvuky oznámení a systémové zvuky. Jenže já to nemohu mít tak jednoduché, to by mě ani nebavilo. Navíc chci mít informaci o tom, že to opravdu funguje, že když změním hlasitost vyzvánění, že se někde něco neseklo a že to opravdu funguje.

Vytvoříme si takové informační okénko, které se na 3 vteřiny zobrazí pokaždé, když dojde ke změně hlasitosti a ukáže nám hlasitosti všech tří streamů. V Taskeru v našem projektu na záložce Profiles máme teď ten předtím vytvořený profil. Když kliknete na název profilu, sbalí se a když kliknete znovu, rozbalí se. Pokud je profil rozbalený, je nalevo vždy samotná událost, na kterou má Tasker reagovat a napravo jsou tasky, které se mají spustit. My tam máme jen jeden task se zelenou šipkou. Klikněte na něj a otevře se vám pro úpravy. Už tam máme ty naše dvě akce a teď ještě přidáme další dvě. Klikněte na tlačítko + uprostřed dole a vyberte Variables a pak Variable Set. Do prvního pole Name ručně zadejte %VOLUME_NOTIFICATION. Nyní totiž vytváříme uživatelskou proměnnou a tuto nemůžete vybrat po kliknutí na ikonku štítků, protože v tuto chvíli ještě neexistuje. V seznamu proměnných se objeví teprve, až ji vytvoříme. 

POZOR: Důležitá je velikost písmen. V Taskeru lze totiž vytvořit dva typy uživatelských proměnných. Lokální a globální. Lokální proměnná je dostupná pouze v aktuálním tasku a po dokončení tasku přestane existovat, kdežto globální je k dispozici kdekoli v Taskeru a nesmaže se po vykonání tasku, kde byla použita.

Pamatujte si: Uživatelská proměnná, jejíž název obsahuje alespoň jedno velké písmeno je automaticky globální. Proměnná, která má celý název malými písmeny, je vždy lokální.

Takže my naši proměnnou napíšeme celou velkými písmeny, ať to máme jednoduché. Tuhle proměnnou totiž budeme používat i jinde, musí být tedy globální. Dále do pole To dáme proměnnou %VOLN, kterou můžete vybrat ze seznamu proměnných pojmenovanou jako Volume - Notification.

Ještě přidáme poslední (čtvrtou) akci. Udělejte úplně to samé, co jsme dělali teď s tím rozdílem, že v Name bude %VOLUME_SYSTEM a v To bude %VOLS (tedy Volume - System ze seznamu proměnných), viz druhý obrázek.

Action - Variables - Variable Set Action - Variables - Variable Set

A takhle by měl vypadat náš task:

Tak - Edit - Anonymous

Teď si vytvoříme scénu, která se zobrazí na tři vteřiny po změně hlasitosti. V hlavním okně Taskeru se přepněte na záložku Scenes, klikněte na + vpravo dole, název scény zadejte Hlasitost a fajfkou napravo potvrďte. Nyní se otevřel editor scény. Vpravo dole je ikonka lupy, na které by mělo být malé + (ono to vypadá jako x, protože je lupa nakřivo, ale věřte mi, je to +). Když na tuto ikonku budete klikat, bude se plus měnit na mínus a naopak. Pokud je na ikonce plus, editujete samotnou scénu, pokud mínus, editujete elementy ve scéně. Nechte na ikonce plus a tažením změňte velikost scény. Zvolte si velikost jakou chcete. Potom přepněte na mínus a v pravém horním rohu klikněte na tlačítko nabídky (tři tečky). Vyberte Properties. V první volbě Property Type zvolte Overlay. V druhé volbě Geometry lze detailněji nastavovat velikost scény zvlášť pro režim na výšku a na šířku. Ve další volbě Orientation nechte vybráno System. Poslední volba Background Colour slouží k nastavení barvy pozadí scény. My ji uděláme zcela průhlednou, protože si pozadí nastavíme v samotném elementu. Stačí, když kliknete na ikonku lupy a posuvník posunete úplně doleva. 

Scene - Properties

Vraťte se do editoru scény a když máte na ikonce mínus, klikněte na ikonu + uprostřed dole. Ze zobrazené nabídky vyberte Text. Element nastavte podle následujících obrázků. Důležitá je hlavně položka Text, kam zadejte %VOLR | %VOLUME_NOTIFICATION | %VOLUME_SYSTEM. To jsou ty naše proměnné, díky kterým se nám budou zobrazovat hodnoty jednotlivých hlasitostí. Například 10 | 10 | 10 (vyzvánění|upozornění|systém). Co se týká ostatních nastavení elementu, já jsem zvolil černé pozadí s 50% průhledností a bílý text.

Scene - Element - Text - UI Scene - Element - Text - Background

Takhle by nějak měla naše scéna vypadat v editoru. S elementem můžete hýbat a měnit jeho velikost, pokud je na ikonce lupy zobrazeno mínus. Vy tam ještě místo čísel hlasitostí budete mít jen názvy proměnných, protože jste ještě váš projekt nespustili. Já jsem screenshot dělal, když už proměnné obsahovaly nějakou hodnotu.

Scene Editor

Teď se opět vraťte do hlavního okna Taskeru a vyberte záložku Tasks. Tlačítkem + vpravo dole vytvoříme nový task a pojmenujeme jej stejně jako scénu Hlasitost. Nejprve přidáme akci Scene -> Test Scene. V první položce Name pomocí ikonky lupy vybereme scénu Hlasitost. V položce Test vybereme Status a v poslední položce Store Result In zadáme ručně %scene. To znamená, že se nám aktuální stav scény uloží do lokální proměnné %scene. Nepotřebujeme vytvářet globální proměnnou, protože tuto budeme potřebovat pouze v tomto tasku. Ještě zaškrtneme Continue Task After Error.

Action - Scene - Test Scene

Přidáme další akci Scene -> Show Scene. Do položky Name vložíme pomocí lupy naši scénu Hlasitost. V Display As zvolíme Overlay. Horizontal PositionVertical Position si nastavte, jak chcete. Je to pozice scény, jak se má zobrazit na displeji. Zrušte zaškrtnutí u Show Exit Button. Scéna typu Overlay je proklikávací, je to vlastně jen takový překryv na obrazovce, takže na tlačítko pro ukončení scény by stejně nešlo kliknout. Ještě musíme vytvořit podmínku, aby se scéna spustila jen v případě, že ještě spuštěná není, jinak by nám task skončil s chybou. Takže u předposlední položky If klikněte na + a do pole vlevo zadejte %scene (tuto proměnnou můžete vybrat kliknutím na ikonku štítků u položky If, protože už jsme ji vytvořily - lokální proměnné jsou vždy na začátku seznamu). Do pole vpravo napište visible (malými písmeny, pozor na případné mezery, které by vám třeba za slovo mohla vložit klávesnice - musí tam být opravdu jen visible). Ještě klikněte na tlačítko, které je mezi textovými políčky a ze zobrazené nabídky vyberte Doesn't Match. Na tlačítku by se mělo objevit !∼.

Action - Scene - Show Scene

Třetí akce bude Task -> Wait. To je ta doba zobrazení scény. Já jsem ji nastavil na tři vteřiny. Tuhle dobu bude Tasker čekat, než provede další akci v seznamu.

Action - Task - Wait

A poslední akce bude Scene -> Destroy Scene, kde pomocí lupy vybereme scénu Hlasitost a zaškrtneme Continue Task After Error.

Action - Scene - Destroy Scene

Teď ještě jedna důležitá věc. V okně tasku klikneme na tlačítko nastavení (druhé od pravého kraje dole - viz obrázek) a v položce Collision Handling vybereme Abort Existing Task. To je důležité proto, že když budete měnit hlasitost tlačítky na boku a stisknete je vícekrát za sebou (málokdy měníme hlasitost jen o jeden stupeň) bude se task spouštět znovu a znovu. Tímhle zajistíme, že doba tří vteřin na zavření scény se bude počítat od poslední změny hlasitosti.

Task - Edit Task Properties

Tím je tento task kompletní. Nyní ještě potřebujeme vytvořit profil, který bude reagovat na změnu hlasitosti oznámení a zobrazí naši scénu. K tomu využijeme námi vytvořenou globální proměnnou %VOLUME_NOTIFICATION. Proč nepoužijeme systémovou proměnnou %VOLN a máme kvůli tomu vlastní proměnnou, vysvětlím jindy. Teď mi jen věřte, že by to nefungovalo.

Takže v hlavním okně Taskeru na záložce Profiles vytvoříme nový kliknutím na + a výběrem Event. Následně zvolíme Variables -> Variable Set. V položce Variable můžeme pomocí ikonky štítků vybrat proměnnou %VOLUME_NOTIFICATION, protože už jsme ji vytvořili. Tlačítkem zpět uložíme změny, vybereme New Task, název opět zadávat nemusíme a kliknutím na fajfku task vytvoříme. Tento task bude obsahovat jedinou akci a ta nám spustí dříve vytvořený task Hlasitost. Takže přidáme Task -> Perform Task. V první položce Name pomocí lupy vybereme task Hlasitost a z druhé položky Priority vymažeme text, který tam je, a zadáme 1. Nic jiného měnit nebudeme.

Event - Variables - Variable Set Action - Task - Perform Task

Takhle vypadá obrazovka s profily:

19-profiles-1 20-profiles-2

A to je celé. Nyní když opustíte Tasker, můžete vyzkoušet, zda to funguje. Krátké video ode mě, že to opravdu funguje:

REKLAMA

Simple Volume v Taskeru aneb synchronizace hlasitosti oznámení s hlasitostí vyzvánění