|
||
|
|
|
|||||||
| Personalización y temas Galaxy S III Personalización y temas Galaxy S III |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
[GUÍA] - Crear una pantalla de ajustes personalizados + activity
En esta guía os voy a explicar cómo nos podemos crear una pantalla de ajustes personalizada en Ajustes, así como dotar a SecSettings de una activity que nos permita acceder directamente a dicha pantalla desde el launcher ...o desde la cortina de notificaciones, por ejemplo..
Jorgefc82 me explicó en su día cómo integrar una apk en ajustes. En este enlace tenéis una guía (Integrating application in settings menu), veréis que es relativamente sencillo crearlo. Este tipo de integración lo encontráis en muchas Roms. Tiene la ventaja de que desde ajustes podéis acceder a opciones concretas de configuración (desde la principal de una aplicación, hasta una "activity" o funcionalidad específica que tengan las aplicaciones). Me picó el gusanillo de crearme una pantalla de ajustes propia y me puse a empollar. Encontré esta guía de didact74, pero no funcionaba bien en nuestros S3 y lo dejé hasta hoy que me he propuesto hacérmela y además crear una activity que permita acceder a dicha pantalla de ajustes personalizados... je, je.. lo he conseguido. En esa guía, se dan trazos y me valió para eso, pero realmente como veréis ...Al lío Qué he buscado con este mod - Crearme una pantalla de ajustes propia, que integre tanto aplicaciones como otras "activities" o funcionalidades integradas en aplicaciones de sistema (por ejemplo, con esto que os pongo está fácil integrar las opciones de grabación del teléfono..). - De esta forma cuando me cocino mis ROMS, veréis que tendremos una forma muy sencilla de tener predefinidas diferentes pantallas de ajustes personalizados, y es fácil rehacer el mod. - Crear una forma (activity) de poder acceder a esta pantalla de ajustes desde un launcher que permita accesos directos a actividades (activities)...o de la misma forma que en la barra de estado extendida puedo hacer un acceso a ajustes, hago un acceso a esta pantalla. VAMOS A ELLO Parte I - Crear la nueva pantalla de ajustes personalizados - Descompilamos SecSettings. - En la ruta smali\com\android\settings copiamos estos dos smalies que me he creado: GrxAjustesEspeciales.smali -> Nos posibilita la creación de la pantalla de ajustes nueva. Es el que se invoca desde el xml settings_headers.xml como veremos luego, y que nos abre la nueva pantalla de ajustes. GrxAjustesEspeciales_act.smali -> Veremos como creamos una actividad nueva en AndroidManifest.xml y cómo lo invocamos. La misión de este smali es el mismo que el anterior, pero cuando queremos acceder desde una acceso directo. - Nos creamos dos pngs. Uno en tamaño entre 40x40 y 50x50 aprox que será el que aparecerá en la pantalla de ajustes. Para este tuto me he creado otro de aprox. 90x90 suponiendo que vamos a hacer un acceso directo a la actividad creada desde un launcher tipo adw, nova, apex, etc.. - Dejamos los dos pngs en SecSettings.apk\res\drawable-xhdpi. Yo los he llamado grx_ajustes_launcher.png y grx_ajustes_rom.png - En SecSettings.apk\res\xml editamos settings_headers.xml y añadimos esto (luego ya os personalizáis todo vosotros, claro). Código:
<header android:icon="@drawable/grx_ajustes_rom" android:id="@id/grx_id_ajustes_rom" android:title="@string/grx_title_ajustes_rom" android:fragment="com.android.settings.GrxAjustesEspeciales" /> - grx_ajustes_rom es el png pequeño que aparece en el listado de opciones de la pantalla de ajustes. - android:id="@id/grx_id_ajustes_rom" es el id que necesitamos para crear la opción. - android:title="@string/grx_title_ajustes_rom" es el texto que mostramos en ajustes para acceder a nuestra pantalla - android:fragment="com.android.settings.GrxAjustesE speciales" es la forma de invocar el smali comentado anteriormente. NOTA: com.android.settings.GrxAjustesEspeciales hace referencia a la ruta que os dije antes que pusierais los smalies, podéis cambiarla claro, pero tendréis que cambiar su invocación en esta línea. - Ahora creamos el id y el string. - Nos vamos a SecSettings.apk\res\values y editamos ids.xml e insertamos nuestro id. Donde queráis. Código:
<item type="id" name="grx_id_ajustes_rom">false</item> Código:
<string name="grx_title_ajustes_rom">Ajustes Grouxho</string> Ahora necesitamos nuestro xml para nuestras opciones. Empecemos por una pantalla vacía. - Creamos una pantalla de ajustes personalizados vacía. Luego veréis por qué, aunque podéis añadir las opciones si queréis. Para ello en SecSettings.apk\res\xml creamos nuestro archivo xml. Yo le he llamado grx_ajustes_especiales.xml. Con este contenido, tendréis una pantalla vacía para probar los siguientes dos pasos. Código:
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen android:title="@string/grx_title_ajustes_rom" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"> </PreferenceScreen> Compilamos (no voy a explicar ahora cómo mantener la integridad de las apks compiladas y tal, supongo que sabéis mantener las firmas y demás..). Pues bien, una vez compilada y montada nuestra nueva apk, seguiremos trabajando con esta nueva apk (cada uno que siga su método). - Descompilamos nuestra apk bien montada (yo eliminaría la anterior) Y nos vamos a SecSettings.apk\res\values y abrimos public.xml para ver el public id asignado a grx_ajustes_especiales.xml. En mi caso resultó esto <public type="xml" name="grx_ajustes_especiales" id="0x7f070080" /> - Ahora vamos a ambos smalies y los editamos para poner este id.... Código:
- En GrxAjustesEspeciales.smali lo debéis poner en el método .method public onCreate(Landroid/os/Bundle;)V -> const v2, 0x7f070080 o el que os haya resultado, claro. - en GrxAjustesEspeciales_act.smali lo debéis poner en el método .method protected onCreate(Landroid/os/Bundle;)V -> const v0, 0x7f070080 o el que os haya resultado. - Ahora compilamos la apk y flasheamos (no olvidéis mantener la integridad de las firmas y todo eso, para que no os de bootloop o fc o después no podáis tematizar..). Si todo va bien y no he olvidado nada, ahora en ajustes deberéis ver vuestro icono, vuestro literal y si pulsáis, se os abriría una nueva pantalla, que es en la que trabajaremos a partir de ahora básicamente. Parte II - Añadir opciones a nuestra pantalla personalizada Para no enrollarme mucho, os dejo el código que tengo en, siguiendo el ejemplo, grx_ajustes_especiales.xml que está en res->xml si recordáis. Así os cuento las cosillas que he averiguado más fácilmente. Código:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen android:title="@string/grx_title_ajustes_rom"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<PreferenceScreen android:title="@string/grx_title_intro" android:summary="@string/grx_res_intro" />
<PreferenceCategory android:title="@string/grx_sec_title_stweaks" />
<PreferenceScreen android:title="@string/grx_title_stweaks" android:summary="@string/grx_res_stweaks">
<intent android:targetPackage="com.gokhanmoral.stweaks.app" android:action="android.intent.action.MAIN" android:targetClass="com.gokhanmoral.stweaks.app.MainActivity" />
</PreferenceScreen>
<PreferenceCategory android:title="@string/grx_sec_title_sonido" />
<PreferenceScreen android:title="@string/grx_title_ecualizador" android:summary="@string/grx_res_ecualizador" android:widgetLayout="@layout/round_more_icon">
<intent android:targetPackage="com.lonas.remsound" android:action="android.intent.action.MAIN" android:targetClass="com.lonas.remsound.activities.EqualizerActivity" />
</PreferenceScreen>
<PreferenceScreen android:title="@string/grx_title_sonido" android:summary="@string/grx_res_sonido">
<intent android:targetPackage="com.lonas.remsound" android:action="android.intent.action.MAIN" android:targetClass="com.lonas.remsound.activities.RemSoundActivity" />
</PreferenceScreen>
<PreferenceCategory android:title="@string/grx_sec_title_utiles" />
<PreferenceScreen android:icon="@drawable/grx_ajustes_rom" android:title="@string/grx_title_MWC" android:summary="@string/grx_res_MWC" android:widgetLayout="@layout/round_more_icon">
<intent android:targetPackage="com.legendk.multiwindow.full" android:action="android.intent.action.MAIN" android:targetClass="com.legendk.multiwindow.full.MWCMain" />
</PreferenceScreen>
<PreferenceCategory android:title="@string/grx_sec_title_otros" />
<com.android.settings.flipfont.FontListPreference android:title="@string/monotype_preference_title" android:key="MONOTYPE" android:summary="@string/monotype_preference_summary" android:widgetLayout="@layout/round_more_icon" />
<PreferenceScreen android:title="@string/screen_mode_setting" android:key="mode" android:summary="@string/screen_mode_summary">
<intent android:targetPackage="com.android.settings" android:action="android.intent.action.MAIN" android:targetClass="com.android.settings.ModePreview" />
</PreferenceScreen>
<PreferenceScreen android:title="@string/grx_consultar_memoria" android:summary="@string/grx_res_consultar_memoria">
<intent android:targetPackage="com.sec.android.app.controlpanel" android:action="android.intent.action.MAIN" android:targetClass="com.sec.android.app.controlpanel.activity.RamUseageActivity" />
</PreferenceScreen>
</PreferenceScreen>
Yo en concreto me he creado todos estos strings para este ejemplo. Código:
<string name="grx_title_ajustes_rom">Ajustes Grouxho</string>
<string name="grx_sec_title_stweaks">Kernel Lonas</string>
<string name="grx_title_stweaks">Configuración del Kernel</string>
<string name="grx_res_stweaks">Configuración avanzada del Kernel Lonas</string>
<string name="grx_sec_title_sonido">Sonido Lonas</string>
<string name="grx_title_ecualizador">Ecualizador Sonido Lonas</string>
<string name="grx_res_ecualizador">Configuración del ecualizador REM</string>
<string name="grx_title_sonido">Configuración de Sonido REM</string>
<string name="grx_res_sonido">Configuración avanzada del sonido Lonas</string>
<string name="grx_sec_title_utiles">Utilidades</string>
<string name="grx_title_MWC">Multiventana</string>
<string name="grx_res_MWC">Configuración de aplicaciones en Multiventana</string>
<string name="grx_sec_title_otros">Otros</string>
<string name="grx_consultar_memoria">Consultar RAM</string>
<string name="grx_res_consultar_memoria">Pulsa para consultar uso de memoria</string>
<string name="grx_title_intro">Accesos rápidos</string>
<string name="grx_res_intro">Aquí encontrará accesos rápidos a diferentes ajustes</string>
1.- Una introducción. Yo he usado este código, una ñapa, ja ja.. para poner un texto de introducción. No lo tengáis mucho en cuenta, esto en realidad debe hacerse con un layout específico par ello en el que insertamos los strings y estilos que queramos. Código:
<PreferenceScreen android:title="@string/grx_title_intro" android:summary="@string/grx_res_intro" /> <PreferenceCategory android:title="@string/grx_sec_title_stweaks" /> Código:
<PreferenceCategory android:title="@string/grx_sec_title_stweaks" /> Código:
<PreferenceScreen android:title="@string/grx_title_stweaks" android:summary="@string/grx_res_stweaks">
<intent android:targetPackage="com.gokhanmoral.stweaks.app" android:action="android.intent.action.MAIN" android:targetClass="com.gokhanmoral.stweaks.app.MainActivity" />
</PreferenceScreen>
En Nova mantienes pulsada una zona libre del escritorio -> Accesos Directos ->Actividades y a buscar la que quieres. Salen todas las visibles, pero insisto, conviene descompilar. También podéis aprovechar para ocultar en el launcher la apk (ver tuto de primera referencia). 4.- Un acceso con la flechita a la derecha Yo he aprovechado un xml que hay en layout y que me sirve para mantener la estética que tiene la rom.., android:widgetLayout="@layout/round_more_icon". Pero podéis personalizarlo, os creáis un layout propio y a correr. Fijaros que también lo puedes utilizar en en llamadas tipo Código:
<com.android.settings.flipfont.FontListPreference android:title="@string/monotype_preference_title" android:key="MONOTYPE" android:summary="@string/monotype_preference_summary" android:widgetLayout="@layout/round_more_icon" /> 5.- Acceso con icono y flechita a la derecha Fijaros en el siguiente código, añado un android:icon, en este caso reutilizo el icono pequeñito que usé en la pantalla de ajustes, ja ja... Este código permite acceder a la apk de control multiventana (MWC). Código:
<PreferenceScreen android:icon="@drawable/grx_ajustes_rom" android:title="@string/grx_title_MWC" android:summary="@string/grx_res_MWC" android:widgetLayout="@layout/round_more_icon">
<intent android:targetPackage="com.legendk.multiwindow.full" android:action="android.intent.action.MAIN" android:targetClass="com.legendk.multiwindow.full.MWCMain" />
</PreferenceScreen>
Compilamos, montamos, flasheamos y ya lo tenemos. Parte III - Crear una actividad para poder acceder a nuestra nueva pantalla de ajustes desde donde sea.. Trabajamos en el AndroidManifest.xml Lo editamos y añadimos lo siguiente Código:
<activity android:label="@string/grx_title_ajustes_rom" android:icon="@drawable/grx_ajustes_launcher" android:name="GrxAjustesEspeciales_act" android:parentActivityName="Settings">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
- android:label="@string/grx_title_ajustes_rom" es el texto que nos aparecerá, en este caso que está pensado para añadir un acceso directo desde un launcher tipo nova, adw.., en el listados de actividades. En nova, repito el proceso: mantener pulsado un momento sobre zona libre de nuestra home screen -> Accesos directos -> Actividades -> y en la apk "Ajustes", desplegamos y ahí deberá aparecer. - android:icon="@drawable/grx_ajustes_launcher" pues el icono que te aparece en el listado de actividades y el que luego se queda como icono en el laucher. - android:name="GrxAjustesEspeciales_act" el smali que se ejecutará al pulsar sobre el acceso creado.. - android:parentActivityName="Settings" actividad principal de la que depende.. Compilamos, montamos, flasheamos y a correr. Espero que os guste. Está montado para la EMD2 polaca, si no os churulan los smalies, tendréis que ajustarlos
Última edición por grouxho Día 10/05/13 a las 02:55:27. |
| Los siguientes 5 usuarios han agradecido a grouxho su comentario: | ||
|
|
|
#2
|
||||
|
||||
|
Capo!
__________________
|
![]() |
Estás aquí
|
||||||
|
||||||