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 :)