Personalización y temas Galaxy S III Personalización y temas Galaxy S III

Respuesta
 
Herramientas
  #1  
Viejo 10/05/13, 02:47:16
Array

[xs_avatar]
grouxho grouxho no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Mensajes: 456
Modelo de smartphone: Samsung Galaxy S3 - Azul
Tu operador: Movistar
[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" />
donde:
- 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>
- Nos vamos a SecSettings.apk\res\values y editamos strings.xml insertando nuestro string.

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>
- Ahora compilamos la aplicación para obtener el public id de este xml, pues lo necesitamos poner en los smalies.

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.
Ya estamos llegando al momento crucial, ver que funciona el montaje..., je je..

- 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>
- Recordar que por cada @string que veáis en el código anterior, tenéis que crear su correpondiente entrada en values-> strings.xml
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>
Ahora os cuento rápidamente qué cosas se pueden poner muy fácilmente en el xml de nuestra pantalla de ajustes.

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" />
2.- Una categoría de ajustes o preferencias, la pondríamos así. Os pilla por defecto la tematización que tengáis en vuestro framework-res para las categorías.
Código:
<PreferenceCategory android:title="@string/grx_sec_title_stweaks" />
3.- Un acceso simple, sin flecha ni icono. Por ejemplo un acceso al stweaks. La gracia de esta integración es que cuando lanzas estas apks o activities y sales de ellas, vuelves a tu pantalla de ajustes, por lo que puedes organizarte una pantalla guapa con las cosas que más te gusten.

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>
Para saber cómo acceder a la actividad que quieres, en el primer tuto que os puse de referencia explican cómo, si bien, ese método no muestra todas las actividades que puedes utilizar. Por ejemplo, en rem sound el Nova (se puede hacer con el nova también) solo muestra la actividad principal, pero si os fijáis en el código que os he puesto, he creado un acceso al equializado de REM también. Hay que descompilar la apk que quieras acceder y mirar los nombres de las clases.

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" />
En este caso se invoca la funcionalidad de cambiar el tipo de fuente. ya os digo, son ejemplos, también he puesto uno para acceder directamente al uso de memoria ram, etc.

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>
Pues bien, vais montando vuestra pantalla en este plan.


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>
Donde

- 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
Imágenes Adjuntas
Tipo de Archivo: jpg Screenshot_2013-05-10-00-27-39.jpg (47.2 KB, 226 visitas)
Tipo de Archivo: jpg Screenshot_2013-05-09-19-22-22.jpg (57.8 KB, 228 visitas)
Tipo de Archivo: jpg Screenshot_2013-05-10-01-35-01.jpg (60.1 KB, 231 visitas)
Tipo de Archivo: jpg Screenshot_2013-05-10-00-27-33.jpg (52.9 KB, 226 visitas)
Tipo de Archivo: jpg Screenshot_2013-05-10-01-31-03.jpg (67.6 KB, 227 visitas)

Última edición por grouxho Día 10/05/13 a las 02:55:27.
Responder Con Cita
Los siguientes 5 usuarios han agradecido a grouxho su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 10/05/13, 04:22:12
Array

[xs_avatar]
Jeshuuu Jeshuuu no está en línea
Nuevo cocinero
 
Fecha de registro: abr 2012
Localización: Chile
Mensajes: 3,317
Modelo de smartphone: Galaxy s8
Tu operador: Movistar
Capo!
__________________
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Foros Samsung > Otros smartphones de Samsung antiguos > Samsung Galaxy S III > Personalización y temas Galaxy S III



Hora actual: 20:27:16 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /