2013. november 30., szombat

Bluetooth kikapcsolás Tasker-rel

Elég egyszerü.
Net -> bluetooth state [off]
Feltétel:
Bluetooth connected [ not any]

Eddig :) kicsit hatékonyabban:
Két profillal csinálom. Az egyik a bluetooth bekapcsolt állapotát figyeli és bekapcsoláskor aktivizálja a másik profilt, saját magát pedig kikapcsolja. A másik profil 2 perces idõközzel ellenõrzi, hogy kapcsolódva vagyunk-e eszközhöz, majd kikapcsolja magát és aktiválja az elsõ profilt.

https://dl-web.dropbox.com/get/Public/Tasker/profiles/CheckBluetoothTurnedOn.prf.xml?w=AADlxuK0w1CUPM5qQWzoV-92_A0o5CTHdo8sxUGhxl9xBA

https://dl-web.dropbox.com/get/Public/Tasker/profiles/BluetoothDeactivate.prf.xml?w=AAB-qFKMe4UKjg10kQ2ZJZfrQ64hlzV7Sjz8ylxMmyZymg

2013. október 23., szerda

Multiuser - nem csak tableten

Mit is szeretnék?
Hát nem lenne nagy baj, ha nem csak tablet-en, hanem telefonon is ki tudnám használni a multiuser adta előnyöket. A gyerek nem nyomkodja el a rendszert, nem tud fizetni a play-en, saját felülete van, jól karbantartható, ha ottfelejtem valahol, mondjuk a munkahelyen, akkor akár távolról is átállíthatom a vendég-felhasználóra, ha valakinek kölcsönadom egy telefonálás erejéig, akkor szintén átállítható és lehetne még sorolni. Nem is értem, hogy miért nincs alapból engedélyezve ez a funkció.
Android 4.3 felett már külön háttér állítható, a tulajdonos által telepített alkalmazások nem hozzáférhetőek a többi felhasználónak, és úgy általában megfelel az átlagos többfelhasználós igényeknek.

Hogyan szeretném ezt?
Módosítások:

1)
Build.prop:
Első lépésként a build.prop-ba kell belepiszkálni:

fw.max_users=2

Ez a sor valószínűleg nincs benne, úgyhogy pötyögjük be.
Ezzel a maximális felhasználók számának kettőt határoztunk meg. Ez lehet több is, de nem nagyon van értelme túl sokat megadni. És nem is lesz jó a felület ha túl sok.

2)
Multiuser-választó felület megjelenítése a zárképernyőn:
/res/layout-port/keyguard_host_view.xml
Az utolsó <FrameLayout> szekcióba helyezzünk el egy kis kiegészítést:

androidprv:paddingTop="54.0dip"
ezzel lejjebb mozgatjuk a widget felületet.
Ugyanezen szekció után illesszük be ezt a kódot:

<FrameLayout androidprv:paddingTop="7.0dip" androidprv:layout_width="fill_parent" androidprv:layout_height="wrap_content">
            <include androidprv:layout_gravity="top|center" androidprv:layout_width="fill_parent" androidprv:layout_height="fill_parent" layout="@layout/keyguard_multi_user_selector" />
        </FrameLayout>
Ezzel pedig ügyesen megjelenik a multiuser-választó a zárképernyőn.

Nagyjából készen is van a művelet. A framework-ot felépítjük, ízlés szerint szignózzuk és telepítjük.
A módosított fájl használatba vételére többféle lehetőség van, egyelőre én a CWM/TWRP install zip metódust használom és ajánlom. Mindig legyen az sd-kártyán egy használható stabil backup arra az esetre, ha nem jön össze valami. :) Lesz ilyen. Készüljünk mindig a legrosszabbra, akkor nem ér meglepetés.

Egy-két kiegészítés:
Én a zárképernyőn használom a tulajdonos nevének megjelenítését (bár most épp még nem kapcsoltam be) és a cLock widget-et. A javításunk következtében ezek egy kicsit összecsúsztak, úgyhogy meg kellett babrálnom a számokat :)
A most már utolsó előtti FrameLayout részbe beillesztett paddingTop értéket vegyük kisebbre. Ez nekem 18.0dip lett.
A multiuser FrameLayout paddingTop értéket is állítsuk kisebbre. Ez nálam 5.0dip.
Már csak egy fájl maradt: /res/values/dimens.xml.
Valahol a vége felé vannak a szükséges sorok. Íme az általam használt értékek:
    <dimen name="keyguard_avatar_frame_stroke_width">1.0dip</dimen>
    <dimen name="keyguard_avatar_frame_shadow_radius">1.0dip</dimen>
    <dimen name="keyguard_avatar_size">32.0dip</dimen>
    <dimen name="keyguard_avatar_name_size">00.0sp</dimen>

Az első a kisképet keretező vonal vastagsága (ez 2 volt). A második ennek az árnyékolása, a harmadik az avatár-kép mérete (66 volt), a negyedik a név betűmérete a kép alatt (ezt nem kérem, úgyhogy 0).

A keret színét holo-kékre állítottam, mert nekem így tetszik.
Szorgalmi feladat megkeresni az ehhez tartozó fájlt/beállítást.



További szép napot!

2013. október 8., kedd

aLogCat, egy naplómegjelenítő, ami nem jeleníti meg a naplót

Érdekes problémába futottam bele pár hónapja, de akkor nem volt időm rá, hogy megoldást keressek, úgyhogy megkerültem. Kerestem egy másik alkalmazást, ami a céljaimnak megfelel.

Még anno a  CM7 idejében használtam ezt a logviewer-t és jó volt. Most ismét szükségem lett volna rá de nem működött. Indítás után kiírta, hogy logok olvasása, várjak, de nem történt semmi. A play-en azt írta, hogy kompatibilis az android 4.0+ verziókkal.
Amúgy baromi egyszerű a megoldás: root jogot kéne kérnie, de nem teszi. Hát adjunk neki (meg a fejlesztőnek is, mert megérdemli :)

Ennek metódusa a következő:
su (ez kell, hogy root parancsokat hajthassunk végre)
pm grant <pkg> android.permission.READ_LOGS (grant -> garantáljuk)
pm revoke <pkg> android.permission.READ_LOGS (revoke -> megvonjuk)
Terminált kellene nyitni hozzá

Így a parancsok:
su
pm grant org.jtb.alogcat android.permission.READ_LOGS
vagy
pm grant org.jtb.alogcat.donate android.permission.READ_LOGS (támogatói változat esetén)

Ezután már minden gond nélkül be tudja olvasni a naplókat. Részletesebben nem néztem utána, hol vannak tárolva a log-fájlok, de valószínűleg a /data alatt. Majd egyszer. Talán.

org.jtb.alogcat a csomagnév, ami az aLogcat-hez tartozik.

Amúgy a program mára idejétmúlttá vált és már sokkal okosabbak vannak a célra, de a 'pm grant' más esetekben is hasznos lehet (vagy méginkább a revoke :)

aLogcat (erről volt szó)
CatLog (ezzel helyettesítettem és marad is :)


2013. július 8., hétfő

Alkalmazásajánló - Es File Explorer

Az egyik leggyakrabban használt alkalmazás valószínűleg a fájlkezelő. Főleg akkor, ha tud pár extrát is, mint az ES.
Jelenleg a harmadik főverziónál tart, ügyesen eltalált holo-felülettel, rengeteg hasznos beállítással, és nagyon sok funkcióval, aktív fejlesztői háttérrel.
Kis ízelítő a teljesség igénye nélkül:
Felhő kezelése (a leggyakoribbak)
Galéria, médiafájlok
Képnézegető, szövegszerkesztő
FTP-szerver
FTP-kliens
Hálózatok kezelése
Root funkciók: rendszeralkalmazások eltávolítása, írás a gyökéren, alkalmazások mentése
Tömörített fájlok kezelése
Füleket használ, lapozható, beállítható
Rengeteg mindent tud még ezeken kívül is. Legalább 3-4 alkalmazást töröltem, mert nem volt már szükség rájuk.


Letöltés és részletek: ES File Explorer

Azonosítást igénylő nyílt Wi-Fi-bejelentkezés, Taskerrel automatikusan

Egy egyszerű HTTP POST lesz a megoldás. Sok minden más nem fog kelleni hozzá. A cél, hogy kérjük meg a Wi-Fi hálózatot, hogy beengedjen.

A működés elég egyszerű. Csatlakozol az X hotspot-ra és lekéred mondjuk a google.hu-t. X hotspot a google.hu helyett betölti a saját autentikációs oldalát (legyen local.hu), ha még nem vagy azonosítva. Valószínűleg van benne egy csomó szöveg, egy form rejtett elemekkel és egy submit gomb. A rejtett elemek valamelyike tartalmaz egy egyedi azonosítót. Na ezt kell kikeresni.
Első körben töltsük le, vagy nézzük meg local.hu forráskódját.
Valami ilyesmit keresünk benne:
<form action="/" method="post">
<input type="hidden" name="4Tredir" value="/">
<input type="hidden" name="magic" value="213546487974989834156">
<input type="hidden" name="answer" value="0">
<input type="submit" value="OK" onclick="sb(1)">
</form>
Ez a Tesco authentikációs form-ja. A neheze már meg is van.
Annyit észrevenni rajta, hogy nem közvetlen a submit küld, hanem meghív egy script-et, ami átírja az answer értéket és utána küld (nagy biztonsági elem, mondhatom:)
Tehát a Task:

http get: akármi.com -> output file: file.txt, type: text/*
read file: file.txt -> %file
variable split: %file, name="magic" value="
variable split: %file2, ">
http post: akarmi.com -> data: 4Tredir=/ magic=%file21 answer=1
Ez az egyszerű felépítés. Ki lehet egészíteni azonosítással, felugró üzenetekkel, hello kitty-s notification-nel, egyebekkel.

példa

Üdv

2013. július 2., kedd

Tasker+Időkép

Aki ismeri az Időkép-et, annak nem nagyon kell bemutatni. Talán ez a legjobb hazai időjárási oldal. Jó a felület, percre kész, lokalizált és legfőként pontos. Elérhető android-ra app formájában.
Na igen. Mindenre van egy app. Akinek csak előrejelzés kell és soha nincs szüksége percről-percre adatokra, vagy vízhő, hójelentés, stb-re annak való ez a task.
Könnyebb lenne rss-feedből, de sajnos az Időkép megszűntette eme igen hasznos funkcióját a sorozatos visszaélések miatt.

És akkor jöjjön, ami eddig még nem volt:
Időkép notification weather task

Két dolog kell hozzá:
valamiféle adatok, amit feldolgozhatunk
valamiféle net-kapcsolat szükséges lesz hozzá

Hozzunk létre egy új task-ot (az egyszerűség kedvéért "Idokep" néven).
+ Net -> HTTP Get (ezzel egy html oldalt töltünk le txt formátumba)
     Server:Port: m.idokep.hu
     Path: ?varos=Pecs (ha nem csalingálsz sokat. Ha igen, akkor lentebb lesz pár alternatíva) A város nevének formátuma: ékezetek nélküli, nagy kezdőbetűvel.
     Mime type: text/*
     Output file: (tetszőleges fájl, én csináltam az ilyeneknek egy temp mappát a Tasker mappájában) Tasker/temp/idokep.txt

+ File -> read file (beolvassuk a letöltött fájl-t)
     File: Tasker/temp/idokep.txt
     To var: %idokep (lokális változó)

Innentől már nincs is nehéz dolgunk. Ha megfelel a mobil netes nézet, akkor kitehetjük egy HTML-popup-ba és kész is vagyunk :)

Ha fel akarjuk dolgozni, akkor az %idokep változót kell szétdarabolni. Erre van egy nagyon jó függvény:
+ Variables -> variable split
     Name: %idokep
     Splitter: (alapesetben talán szóköz, de bármivel vághatsz) </table>
Nekünk most ez kell, mert a visszakapott txt-ben az adatok táblázatokban vannak. A variable split sorszámozott tömb-be darabolja az eredeti változót.
Ha van kéznél asztali gép, vagy szövegszerkesztő, ami jól keres, akkor könnyebb a dolog. Én gedit-et használok ezekre és nagyon gyorsan ki lehet keresni a tördeléseket.
A 4. táblázat tárolja a napi adatokat. Most ez kell, tehát levágjuk ennek az elejét is, így marad csak a táblázat:
+ Variables -> variable split
     Name: %idokep4
     Splitter: <table

Kikeressük a várost a fentebb taglalt elvet követve (strong /strong közé írták)
Variable split %idokep42, </strong>
Variable split %idokep421, <strong>

Ezzel megvan a város neve
+ Variables -> Array push
     Name: %idokepNapi
     Position: 1
     Value: %idokep4212

A következő a szöveges időjárásjelzés (</td> és <br/> között)
Variable split %idokep422, </td>
Variable split %idokep4221, <br/>
Itt még van egy teendő, mert ebben a sorban tabulátorokat is eldugtak
+ Variables -> variable search replace
     Name: %idokep 42213
     Search: /t
     Replace: yes
Array push %idokepNapi, 2, %idokep42213

Napi hőmérséklet (Ez is strong közé van írva és azzal már felaprítottuk, úgyhogy egy vágás maradt)
variable split %idokep422, <strong>
Array push %idokepNapi, 3, %idokep4222

Kiírjuk valahová. Én értesítésnek teszem ki, így meg tudom nézni bármikor

+ Alert -> Notification
     Title: Időkép - %idokepNapi1
     Text: %idokepNapi3, %idokepNapi2
     Icon, number, permanent: opcionális

És egy stop a végére.
Task -> stop

Task letöltése

Köszönet az Időképnek





2013. június 24., hétfő

Tasker Init

Előfordulhat olyan, hogy szükség van bizonyos dolgokat babrálni a Tasker indításakor. Van erre való funkció, de nem túl bőbeszédű a net ezen a téren.


Feltétel:
event - tasker - monitor start

'Monitor Start

Tasker's Monitor Service has just started.

Tasks triggered from this action are guaranteed to be submitted for execution before any other and are therefore a good place to perform preparatory actions like setting the initial values for variables.

If it's necessary to ensure that resulting tasks finish before any other task starts, set the Task Priority in the profile properties to the highest level.'

Azt mondja, hogy minden előtt ez fut le a Tasker indításakor, és még azt, hogy ajánlott a legmagasabbra állítani a prioritását.

Én a változóimat nullázom vele. Talán azért hasznos, mert néha kifagy a progi, vagy a teló és ilyenkor a tárolt értékeket nem jól kezelik a taskok.

2013. június 23., vasárnap

Tasker profiljaim (otthoni, éjszakai, munkahelyi, normál)

Középhaladó szint

Az alapelgondolás adott volt: lusta vagyok, állítgassa a profilokat a telefon. Azért van, hogy helyettem dolgozzon.
Eddig erre a célra jó volt a Locale. Azonban a Tasker többet hoz ki a telefonból, úgyhogy lecseréltem. Lett miatta egy kis játék :)

Szempontok:
legyen négy profil
 -Normál
 -Otthoni (fél éves a kislányom, ne ébressze fel senki)
 -Otthoni éjszakai (éjszaka engem se ébresszen fel senki)
 -Munkahelyi (ébresszen fel valaki)

Adottak a következők
 -Otthoni wifi
 -Munkahelyi wifi

Normál esetben elég lenne csak közeli wifi-t beállítani a feltételnek:
wifi near[otthoni] + time[7:00-19:59] -> task[HOME] /kilépő -> task[NORMAL]
wifi near[otthoni] + time[20:00-6:59] -> task[NIGHT] /kilépő ->task[NORMAL]
wifi near[munkahelyi] -> task[WORK] /kilépő ->task[NORMAL]

Ez nekem két szempontból nem felelt meg
 -a wifi jel néhol gyenge, így otthon elindul a normál profil és felébred a lányom, nyűgös lesz, aztán én is.
 -párhozamosan futnak task-ok, ami nem olyan jó a memóriának, akksinak, notibar nem átlátható, stb.

Ezt a tervet szőttem:
Változókat állítgatok pozíciótól függően és ezek állapota fogja meghatározni a profilt.
Például az otthoni wifi és cella is tesz 1-1 -et a %Home változóba. Ha megszűnik létezni a wifi-jel, vagy cella-jel, akkor elvesz 1-1 -et.

 cell near[otthon] + time[7:00-19:59] -> task[_setHome] / task[_unsetHome]
 wifi near[otthon] + time[7:00-19:59] -> task[_setHome] / task[_unsetHome]
 cell near[otthon] + time[20:00-6:59] -> task[_setNight] / task[_unsetNight]
 wifi near[otthon] + time[20:00-6:59] -> task[_setNight] / task[_unsetNight]
 cell near[munkahely] -> task[_setWork] / task[_unsetWork]
 wifi near[munkahely] -> task[_setWork] / task[_unsetWork]

_setHome
variable add[%Home, 1]
variable set[%Night, 0]
variable set[%Work, 0]
perform task[setProfile]

_unsetHome
variable subtract[%Home, 1]
perform task[setProfile]

A _setHome és _unsetHome mintájára kell elképzelni a _setWork, _unsetWork, _setNight és _unsetNight task-okat.

setProfile
if[%Home > 0]
 perform task[HOME]
else if[%Night > 0]
 perform task[NIGHT]
else if[%Work > 0]
 perform task[WORK]
else
 perform task[NORMAL]
end if

A HOME, NIGHT, WORK és NORMAL értelemszerűen az adott profil beállításait tartalmazza. Vagy valami egész mást.

Még egy dolog van. Priorizálni kéne ezt a sok mindent, hogy értelme is legyen annak, amit csináltunk.
 Feltételek: ami cella, az eggyel magasabb, mint ami wifi (legalábbis nekem így lett jó). Ez nálam 9 és 8. A magasabb hajtódik végre először.
 Ahol perform task van, elméletileg ott is kellene állítani, de nekem eddig nem volt gond miatta. Alapértelmezett az 5. Ha a perform task[valami] prioritása magasabb, mint a hívó task-é, akkor előbbi lefut és csak utána folytatódik a szülő.

A fentiek alapján igazán nem nehéz megcsinálni, de azért itt a lehetőség letölteni zipben: Google drive-ból, vagy Dropbox-ból

Jó szórakozást

2013. június 18., kedd

Első bejegyzés

Kedves olvasóm (akár magam is)

Emlékszel még a G1-re? Akkor találkoztam először az androiddal. Akkortájt már jó ideje linux rendszer futott az otthoni számítógépemen és maximálisan meg voltam elégedve vele. Emiatt azonnal jó vélemény alakult ki bennem az androidról. Nem azért, mert annyira jó volt az első verzió (egyébként koncepció-telefon), hanem mert ismerve a nyílt forráskód sokszínűségét már akkor látszott, hogy hihetetlen dolog van készülőben. Két-három év alatt feltornázta magát a mobil/tablet-piac csúcsára, kiváló pozícióba került az egyéb kisméretű vagy hordozható rendszert igénylő kütyük versenyében is, mint például fényképező, kamera, smartwatch...satöbbi.

Hamar túljutottam az alaprendszeren és lehetőségein, aztán jöttek a bonyolultabb dolgok (kb időrendben):
-root
-rom-csere (
-remote vezérlés
-ssh vezérlés
-automatizálás
-rom-módosítás
-egyebek, amik most nem jutnak eszembe

Ezekről lesz majd itten szó.


A blognak két okból álltam neki:

1. Bárkinek, aki tanulhat belőle
2. Magamnak, mert mindent elfelejtek :)

A későbbiekben feljegyzésre kerülő dolgok bárki számára szolgáltathatnak fontos információkat, ötleteket eljárásokat, beállításokat, stb

Leginkább nekem :)

Jó olvasást