Este foro usa cookies
Este foro hace uso de cookies para almacenar su información de inicio de sesión si está registrado, y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Por favor, confirme si acepta o rechaza el establecimiento de estas cookies.

Se almacenará una cookie en su navegador, independientemente de su elección, para evitar que le vuelvan a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

Calificación:
  • 2 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
MOD GRX MODS FOR ANDROID 10 - Q (S9+ Firmw)
Si no me equivoco estás en android Q no?. 

En android R (adjunto imagen) la cosa se complica aún más. Ahora en vez de una notificación es un Bar Item. 

En tu caso, y en R también, el layout también depende de la app, es una custom view, y en realidad creo que se procesan en ui como remote views, no estoy seguro, ya lo miraré. Pero veo que tienes acceso a ello. 

Bien, para lo que quieres hacer dos ideas: 

- Si usas getrunningtask para saber cual es la aplicación que está ahora mismo siendo vista por el usuario te pasa lo que comentas. Lo que debes averiguar es qué aplicación tiene capturado el MediaFocus, eso se puede intentar hacer vía el media controller, por ejemplo, o con callbacks del media session. Deberás investigar un poco, pero esa es la forma correcta. Yo esto lo usaba para hacer el mod de album art hace un par de versiones android o ya más, no recuerdo. Si retomo esa idea lo comento por aquí, pero por ahora ando en otros mods para android R. 

-  Para el tema de los colores de los botones una idea sería pillar la view, ir buscando childs y entonces comprobar si son "instance of buttons" (digo buttons porque tampoco he mirado el layout y no se si son imageviews o buttons..  La lógica sería, si el child es del tipo que buscamos, lo coloreamos.  Y así con cada child.

El problema que veo a este mod es que la notificación de media se actualiza varias veces por segundo, y claro, procesar todo lo que estás procesando gastará mucha batería. Como siempre hago en mis mods te aconsejo que uses un mecanismo asíncrono para saber que app ha capturado el media focuss y cada vez que cambie pues averiguas la app y te lo guardas por ahí. y si quieres colorear por app, pues en ese mismo momento guardas el color que le corresponde. Así en cada actualización de la media notification ya tienes el color a aplicar y reduces mucho el procesamiento. 

Son solo ideas, no he tenido tiempo de mirar el código en detalle, pero dale un vistazo, me alegra ver que alguien intenta este tipo de mods..

Yo precisamente estoy también liado con los colorines del panel para android R, pero yo desde el principio ya descarto la idea de colorear las notificaciones o panel bars que usan custom layouts (layouts de aplicaciones, remote views. Por ejemplo la noti de google de noticias de actualidad, etc.). No me motiva meter ciclos de cpu solo para esos temas puntuales. 


[Imagen: e436863c9ad5ed38be12b4c678673ec5.jpg]

Sent from my SM-G986B using Tapatalk
[-] Recuento: 2 usuarios dicen Me Gusta a Grouxho por este post:
  • JavixKGD (02-10-2021), GVM (02-09-2021)
Responder
(02-09-2021, 10:29 AM)Grouxho escribió: Si no me equivoco estás en android Q no?. 

En android R (adjunto imagen) la cosa se complica aún más. Ahora en vez de una notificación es un Bar Item. 

En tu caso, y en R también, el layout también depende de la app, es una custom view, y en realidad creo que se procesan en ui como remote views, no estoy seguro, ya lo miraré. Pero veo que tienes acceso a ello. 

Bien, para lo que quieres hacer dos ideas: 

- Si usas getrunningtask para saber cual es la aplicación que está ahora mismo siendo vista por el usuario te pasa lo que comentas. Lo que debes averiguar es qué aplicación tiene capturado el MediaFocus, eso se puede intentar hacer vía el media controller, por ejemplo, o con callbacks del media session. Deberás investigar un poco, pero esa es la forma correcta. Yo esto lo usaba para hacer el mod de album art hace un par de versiones android o ya más, no recuerdo. Si retomo esa idea lo comento por aquí, pero por ahora ando en otros mods para android R. 

-  Para el tema de los colores de los botones una idea sería pillar la view, ir buscando childs y entonces comprobar si son "instance of buttons" (digo buttons porque tampoco he mirado el layout y no se si son imageviews o buttons..  La lógica sería, si el child es del tipo que buscamos, lo coloreamos.  Y así con cada child.

El problema que veo a este mod es que la notificación de media se actualiza varias veces por segundo, y claro, procesar todo lo que estás procesando gastará mucha batería. Como siempre hago en mis mods te aconsejo que uses un mecanismo asíncrono para saber que app ha capturado el media focuss y cada vez que cambie pues averiguas la app y te lo guardas por ahí. y si quieres colorear por app, pues en ese mismo momento guardas el color que le corresponde. Así en cada actualización de la media notification ya tienes el color a aplicar y reduces mucho el procesamiento. 

Son solo ideas, no he tenido tiempo de mirar el código en detalle, pero dale un vistazo, me alegra ver que alguien intenta este tipo de mods..

Yo precisamente estoy también liado con los colorines del panel para android R, pero yo desde el principio ya descarto la idea de colorear las notificaciones o panel bars que usan custom layouts (layouts de aplicaciones, remote views. Por ejemplo la noti de google de noticias de actualidad, etc.). No me motiva meter ciclos de cpu solo para esos temas puntuales. 


Estas correcto en todos los accounts, esto es un remote view, pero no fue asi como lo llame sino que use un check-cast de FrameLayout desde el layout en el framework que contiene los botones (ImageButtons) y usando el FrameLayout luego busque los botones por sus IDs. Utilize el MediaController como sugerido y "EUREKAAA!!" ahi encontre "getPackageName()Ljava/lang/String;" y efectivamente llama a los paquetes de media que estan activos. Esto ahora me abre la puerta tambien para cambiarle los iconos de media dependiendo del layout, por lo menos los de play, pausa, prev y next. Mecionastes usar un mecanismo asíncrono. Puedes elaborar un poco mas en como se veria esto? En mi metodo, solo hago el llamado an los colores de apps individuales cuando tenemos todos las acciones disponibles, si no se revierte a 3 iconos coloreados cual es el basico de todo los apps en compacto. Para decirte la verdad he estado pensando como bajar el numero de metodos que utilice para esto ya que tengo 5 metodos individuales coloreando en diferentes situaciones. Te puedo enviar el smali para que lo verifiques? Maybe hay una mejor manera de poder hacer el mod? Verdaderamente agradecido con toda la ayuda.
[-] Recuento: 1 usuario dice Me Gusta a JavixKGD por este post:
  • Grouxho (02-09-2021)
Responder
(02-09-2021, 07:00 PM)JavixKGD escribió:
(02-09-2021, 10:29 AM)Grouxho escribió: Si no me equivoco estás en android Q no?. 

En android R (adjunto imagen) la cosa se complica aún más. Ahora en vez de una notificación es un Bar Item. 

En tu caso, y en R también, el layout también depende de la app, es una custom view, y en realidad creo que se procesan en ui como remote views, no estoy seguro, ya lo miraré. Pero veo que tienes acceso a ello. 

Bien, para lo que quieres hacer dos ideas: 

- Si usas getrunningtask para saber cual es la aplicación que está ahora mismo siendo vista por el usuario te pasa lo que comentas. Lo que debes averiguar es qué aplicación tiene capturado el MediaFocus, eso se puede intentar hacer vía el media controller, por ejemplo, o con callbacks del media session. Deberás investigar un poco, pero esa es la forma correcta. Yo esto lo usaba para hacer el mod de album art hace un par de versiones android o ya más, no recuerdo. Si retomo esa idea lo comento por aquí, pero por ahora ando en otros mods para android R. 

-  Para el tema de los colores de los botones una idea sería pillar la view, ir buscando childs y entonces comprobar si son "instance of buttons" (digo buttons porque tampoco he mirado el layout y no se si son imageviews o buttons..  La lógica sería, si el child es del tipo que buscamos, lo coloreamos.  Y así con cada child.

El problema que veo a este mod es que la notificación de media se actualiza varias veces por segundo, y claro, procesar todo lo que estás procesando gastará mucha batería. Como siempre hago en mis mods te aconsejo que uses un mecanismo asíncrono para saber que app ha capturado el media focuss y cada vez que cambie pues averiguas la app y te lo guardas por ahí. y si quieres colorear por app, pues en ese mismo momento guardas el color que le corresponde. Así en cada actualización de la media notification ya tienes el color a aplicar y reduces mucho el procesamiento. 

Son solo ideas, no he tenido tiempo de mirar el código en detalle, pero dale un vistazo, me alegra ver que alguien intenta este tipo de mods..

Yo precisamente estoy también liado con los colorines del panel para android R, pero yo desde el principio ya descarto la idea de colorear las notificaciones o panel bars que usan custom layouts (layouts de aplicaciones, remote views. Por ejemplo la noti de google de noticias de actualidad, etc.). No me motiva meter ciclos de cpu solo para esos temas puntuales. 


Estas correcto en todos los accounts, esto es un remote view, pero no fue asi como lo llame sino que use un check-cast de FrameLayout desde el layout en el framework que contiene los botones (ImageButtons) y usando el FrameLayout luego busque los botones por sus IDs. Utilize el MediaController como sugerido y "EUREKAAA!!" ahi encontre "getPackageName()Ljava/lang/String;" y efectivamente llama a los paquetes de media que estan activos. Esto ahora me abre la puerta tambien para cambiarle los iconos de media dependiendo del layout, por lo menos los de play, pausa, prev y next. Mecionastes usar un mecanismo asíncrono. Puedes elaborar un poco mas en como se veria esto? En mi metodo, solo hago el llamado an los colores de apps individuales cuando tenemos todos las acciones disponibles, si no se revierte a 3 iconos coloreados cual es el basico de todo los apps en compacto. Para decirte la verdad he estado pensando como bajar el numero de metodos que utilice para esto ya que tengo 5 metodos individuales coloreando en diferentes situaciones. Te puedo enviar el smali para que lo verifiques? Maybe hay una mejor manera de poder hacer el mod? Verdaderamente agradecido con toda la ayuda.

Si, claro, mándamelos, sin problemas.

Por asíncrono me refiero a no comprobar continuamente qué color aplicar, o que app es la que está con el foco. A que que cuando pilles el nombre de la apk que tiene el focus media lo guardes en una variable public static como suelo hacer yo para que sea accesible desde cualquier punto dentro del mismo context.

Por ejemplo, y sin haber visto el código. Supongo que estás mirando en NotificationMediaManager, que ahí verás que se accede al packagename en el método findAndUpdateMediaNotifications. Pues bien, después de ese getpackagename, podrías llamar a un método que compruebe si el packagename actual (el que consigues después del getpackagename) es igual al último packagename. Si es igual, no haces nada, si no es igual, actualizas los colores o el color y lo almacenas en una variable public static. De esta forma tendrás siempre a mano el valor del package name y del color. Si el user cambia el valor de la preferencia de color para una apk, tu actualizas el color de esa variable. la próxima vez que quieras colorear no tienes nada más que pillar el color, nada de comprobar más cosas (bueno, sólo comprobar si el mod está activado, etc.)
De esta forma no tienes que estar calculando siempre qué color corresponde. En este caso veo que NotificationMediaManager te hace la parte de conseguir el nombre de la aplicación, así es que lo tienes bastante bien encaminado.

Aprovecho por si tienes algún mod que necesites saber qué app es la que está visible en cualquier momento de forma asíncrona. En services en PhoneWindowManagerExt tienes el método updateTopActivity(Landroid/content/ComponentName;)V que es llamado cada vez que cambia la top activity (la visible). 

En systemui también es posible, hazte un TaskStackChangeListener y regístralo en  el ActivityManagerWrapper, que te llamará cada vez que cambie... :)


Una cosa más: cuando no sabes los ids que podría tener los botones lo mejor es usar el instance-of-ImageButtons  , si lo es - > coloreas, si no lo es o es null , no coloreas.
[-] Recuento: 1 usuario dice Me Gusta a Grouxho por este post:
  • JavixKGD (02-10-2021)
Responder
@Grouxho

Añadi el smali en donde use los mods de los colores para los botones. Los puedes encontrar con facilidad usando tu mismo mecanismo de los guides con los ####. Hay otros mods mas en el smali, maybe les puedas hechar un vistazo a esos tambien. Quisiera aprender a como hacer mis metodos mas compactos o maybe mas utiles en acuerdo a los rescursos que utilizo de mi telefono ya sea memoria o bateria. Por favor no me juzgues en mi codigo, es bien beginner  Big Grin Estoy tratando de mejorarlo y seguir modificando como modifico y hago mods nuevos.

Por cierto, el MediaController lo estoy sacando de otra clase en modo estatico, de NotificationMediaManager. Iba a tratar de añadirlo a la misma clase, pero no sabia como hacer el media token que se necesita para el instance the MediaController en el constructor. Maybe me puedas ayudar con eso tambien si tengas la oportunidad. 

Ah last thing, sabes de algun metodo de back to kill que funcione? Estaba usando este run()V en PhoneWindowManager$KillApp despues de haber dado instance a la clase desde PhoneWindowManager. Este es el metodo:

Código:
.method public run()V
    .locals 12

    iget-object v10, p0, Lcom/android/server/policy/PhoneWindowManager$KillApp;->this$0:Lcom/android/server/policy/PhoneWindowManager;

    iget-object v7, v10, Lcom/android/server/policy/PhoneWindowManager;->mContext:Landroid/content/Context;

    const-string v4, "activity"

    invoke-virtual {v7, v4}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v11

    check-cast v11, Landroid/app/ActivityManager;

    const/4 v4, 0x1

    invoke-virtual {v11, v4}, Landroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List;

    move-result-object v1

    if-eqz v1, :cond_2

    invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v4

    invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z

    move-result v4

    if-eqz v4, :cond_2

    invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v4

    invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v9

    check-cast v9, Landroid/app/ActivityManager$RunningTaskInfo;

    iget-object v4, v9, Landroid/app/ActivityManager$RunningTaskInfo;->topActivity:Landroid/content/ComponentName;

    invoke-virtual {v4}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String;

    move-result-object v5

    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->isWhitelisted(Ljava/lang/String;)Z

    move-result v6

    if-nez v6, :cond_0

    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->isHomeApplication(Ljava/lang/String;)Z

    move-result v6

    if-nez v6, :cond_1

    const-string v2, "Killed : "

    :try_start_0
    iget v6, v9, Landroid/app/ActivityManager$RunningTaskInfo;->id:I

    const v1, 0x1

    invoke-static {}, Landroid/app/ActivityTaskManager;->getService()Landroid/app/IActivityTaskManager;

    move-result-object v11






    invoke-interface {v11, v6, v1}, Landroid/app/IActivityTaskManager;->semRemoveTask(II)Z

######Creo que mi problema esta aqui ya que no puedo entontrar el   metodo correcto para esto. Era otro anteriormente que era solo RemoveTask(II)Z en ActivityManager me parece, pero este no existe ahi ya. Sabes donde se encuentra en Q?








    goto :goto_0

    invoke-virtual {v11, v5}, Landroid/app/ActivityManager;->forceStopPackage(Ljava/lang/String;)V

    goto :goto_0
    :try_end_0
    .catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0

    :cond_0
    const-string v2, "White listed : "

    goto :goto_0

    :cond_1
    const-string v2, "Home application: "

    :goto_0
    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->getApplicationNameFromPageName(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v3

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "\n("

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, ")"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    const/4 v2, 0x1

    invoke-static {v7, v3, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v1

    invoke-virtual {v1}, Landroid/widget/Toast;->show()V

    const/4 v3, 0x0

    const/4 v5, 0x1

    invoke-virtual {v10, v3, v3, v5}, Lcom/android/server/policy/PhoneWindowManager;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z

    :cond_2
    :goto_1
    return-void

    :catch_0
    move-exception v5

    goto :goto_1
.end method


Archivos adjuntos
.zip   NotificationTemplateViewWrapper.zip (Tamaño: 7.89 KB / Descargas: 3)
Responder
(02-10-2021, 02:07 AM)JavixKGD escribió: @Grouxho

Añadi el smali en donde use los mods de los colores para los botones. Los puedes encontrar con facilidad usando tu mismo mecanismo de los guides con los ####. Hay otros mods mas en el smali, maybe les puedas hechar un vistazo a esos tambien. Quisiera aprender a como hacer mis metodos mas compactos o maybe mas utiles en acuerdo a los rescursos que utilizo de mi telefono ya sea memoria o bateria. Por favor no me juzgues en mi codigo, es bien beginner  Big Grin Estoy tratando de mejorarlo y seguir modificando como modifico y hago mods nuevos.

Por cierto, el MediaController lo estoy sacando de otra clase en modo estatico, de NotificationMediaManager. Iba a tratar de añadirlo a la misma clase, pero no sabia como hacer el media token que se necesita para el instance the MediaController en el constructor. Maybe me puedas ayudar con eso tambien si tengas la oportunidad. 

Ah last thing, sabes de algun metodo de back to kill que funcione? Estaba usando este run()V en PhoneWindowManager$KillApp despues de haber dado instance a la clase desde PhoneWindowManager. Este es el metodo:

Código:
.method public run()V
    .locals 12

    iget-object v10, p0, Lcom/android/server/policy/PhoneWindowManager$KillApp;->this$0:Lcom/android/server/policy/PhoneWindowManager;

    iget-object v7, v10, Lcom/android/server/policy/PhoneWindowManager;->mContext:Landroid/content/Context;

    const-string v4, "activity"

    invoke-virtual {v7, v4}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v11

    check-cast v11, Landroid/app/ActivityManager;

    const/4 v4, 0x1

    invoke-virtual {v11, v4}, Landroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List;

    move-result-object v1

    if-eqz v1, :cond_2

    invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v4

    invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z

    move-result v4

    if-eqz v4, :cond_2

    invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v4

    invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v9

    check-cast v9, Landroid/app/ActivityManager$RunningTaskInfo;

    iget-object v4, v9, Landroid/app/ActivityManager$RunningTaskInfo;->topActivity:Landroid/content/ComponentName;

    invoke-virtual {v4}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String;

    move-result-object v5

    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->isWhitelisted(Ljava/lang/String;)Z

    move-result v6

    if-nez v6, :cond_0

    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->isHomeApplication(Ljava/lang/String;)Z

    move-result v6

    if-nez v6, :cond_1

    const-string v2, "Killed : "

    :try_start_0
    iget v6, v9, Landroid/app/ActivityManager$RunningTaskInfo;->id:I

    const v1, 0x1

    invoke-static {}, Landroid/app/ActivityTaskManager;->getService()Landroid/app/IActivityTaskManager;

    move-result-object v11






    invoke-interface {v11, v6, v1}, Landroid/app/IActivityTaskManager;->semRemoveTask(II)Z

######Creo que mi problema esta aqui ya que no puedo entontrar el   metodo correcto para esto. Era otro anteriormente que era solo RemoveTask(II)Z en ActivityManager me parece, pero este no existe ahi ya. Sabes donde se encuentra en Q?








    goto :goto_0

    invoke-virtual {v11, v5}, Landroid/app/ActivityManager;->forceStopPackage(Ljava/lang/String;)V

    goto :goto_0
    :try_end_0
    .catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0

    :cond_0
    const-string v2, "White listed : "

    goto :goto_0

    :cond_1
    const-string v2, "Home application: "

    :goto_0
    invoke-direct {p0, v5}, Lcom/android/server/policy/PhoneWindowManager$KillApp;->getApplicationNameFromPageName(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v3

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "\n("

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, ")"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    const/4 v2, 0x1

    invoke-static {v7, v3, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v1

    invoke-virtual {v1}, Landroid/widget/Toast;->show()V

    const/4 v3, 0x0

    const/4 v5, 0x1

    invoke-virtual {v10, v3, v3, v5}, Lcom/android/server/policy/PhoneWindowManager;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z

    :cond_2
    :goto_1
    return-void

    :catch_0
    move-exception v5

    goto :goto_1
.end method



Buenas.

He echado un vistazo a tu código. Estas usando el enfoque tradicional que se impuso en este mundillo y que bueno, ya irás cambiando de estilo, lo verás.

Te voy a dar mi opinión y sobre todo algunas ideas para que sigas indagando en esto y veas otros enfoques que te puedan ayudar, espero.

- Si no estoy equivocado, y dando un primer vistazo al código de samsung, NotificationTemplateViewWrapper es una clase que se instancia a menudo, con cada notificación. No solo para notificaciones tipo media sino para todas.
- En el caso de notificaciones media el contenido cambia muy a menudo, lógicamente.

Teniendo en cuenta estas dos cuestiones veamos tu código. Cada vez que se instancia el wrapper (NotificationTemplateViewWrapper) resulta que registras el gearobserver con más de 20 claves...y lees las preferencias y las almacenas en unos static dentro del objeto wrapper.
Cada vez que una notificación, media o no, actualiza el contenido, actualizas todos las referencias a botones, vuelves a comprobar todos los colores (setHeaderValues()V). También cuando se llama al updatependingcancelations y otros momentos.


Mi consejo es que:

- Te crees una clase public donde quieras donde guardes los valores static con los valores.
- En esa clase añades un observer, usas el mismo context que statusbar para registrar todas tus claves. Cuando haya un cambio guardas los valores de usuario en esas static comentadas.
- Usa el mismo context que la clase statusbar, pues así te aseguras que desde el wrapper los valores serán los correctos.

Si haces esto, te habrás ahorrado un montón de ciclos de cpu y desde NotificationTemplateWrapper sólo tienes que usar sget, etc, pero tomas los valores de la clase creada. En cualquiera de mis mods ves cómo va.

Para hacerlo onfly, en mis guías verás como puedes acceder a statusbar desde esa clase a través de SystemUiprovider (en Q, en R es con Dependency) y una vez en statusbar pues o fuerzas una llamada a cambio de density o lo que sea. En mis mods verás cómo

Respecto a saber la app que tiene el focus, efectivamente en NotificationMediaManager lo puedes obtener, ahí mismo puedes poner una instrucción para guardar el packagename en la clase que te digo y además
puedes en ese momento comprobar qué apk está en curso y actualizar los colores en las claves static. Así sigues teniendo siempre disponible y actualizado los valores de las preferencias.

finalmente si estás empezando, te aconsejo que vayas abandonando gearobserver (vale para algún mod, pero usarlo así de forma generalizada en cualquier caso como ves no es a veces buena idea) y uses GrxSettings como app de preferencias, es otra liga.


Respecto al kill, echando un vistazo rápido al tema, creo que necesitas eto



Código:
  #### invoke-static {}, Landroid/app/ActivityTaskManager;->getService()Landroid/app/IActivityTaskManager;

  #### move-result-object v11

    #### invoke-interface {v11, v6, v1}, Landroid/app/IActivityTaskManager;->semRemoveTask(II)Z

invoke-virtual {v11, v6, v1}, Landroid/app/ActivityManager;->semRemoveTask(II)Z #####


Saludos,
[-] Recuento: 3 usuarios dicen Me Gusta a Grouxho por este post:
  • JavixKGD (02-11-2021), necrosauron (02-11-2021), GVM (02-11-2021)
Responder
Muchisimas gracias por todo, eres un maestro literal de modding. Gracias por sacar de tu tiempo para no tan solo hacer guias para los mods pero enseñar a la comunidad. Ya te dejo saber como me va. Voy a tomar tu sugerencia y poner los valores staticos en una clase aparte con el observer aparte. Ahora bien, mi ultima pregunta, si hago una clase aparte, tiene que ser una clase aparte por cada mod? Por ejemplo este mod de los botones, hago una clase solamente para los botones o crees que pueda incluir todos los mods que tengo en la clase NotificationTemplateViewWrapper  y hacer los llamados desde esa clase que voy a crear?
[-] Recuento: 2 usuarios dicen Me Gusta a JavixKGD por este post:
  • Grouxho (02-11-2021), GVM (02-11-2021)
Responder
(02-11-2021, 06:49 PM)JavixKGD escribió: Muchisimas gracias por todo, eres un maestro literal de modding. Gracias por sacar de tu tiempo para no tan solo hacer guias para los mods pero enseñar a la comunidad. Ya te dejo saber como me va. Voy a tomar tu sugerencia y poner los valores staticos en una clase aparte con el observer aparte. Ahora bien, mi ultima pregunta, si hago una clase aparte, tiene que ser una clase aparte por cada mod? Por ejemplo este mod de los botones, hago una clase solamente para los botones o crees que pueda incluir todos los mods que tengo en la clase NotificationTemplateViewWrapper  y hacer los llamados desde esa clase que voy a crear?


Pues eso depende de ti. Yo para las guías hago una por mod, porque sería un lio si no. Pero si es para tu rom o para ti hazte las clases que necesites por separado, o junta la lógica en una y deja los valores en otra u otras. Lo importante es que entiendas que con el mecanismo de claves public static obtendrás los valores correctos si estás en el mismo context y en el caso del systemui en el 90% de los casos te vale el context de la clase statusbar.

Puedes hacerte tantas clases como te sea más cómodo. Por ejemplo, puedes ir metiendo toda la lógica en una y luego hacer otras más pequeñas con solamente los valores de cada mod, etc.
Responder
@Grouxho
hola amigo, empezaste a trabajar con android 11?
[Imagen: vCuQYBl.png]
Responder
(02-26-2021, 07:20 AM)Carotixx escribió: @Grouxho
hola amigo, empezaste a trabajar con android 11?

que dispositivo tienes?
Responder
(02-27-2021, 10:53 PM)gollo00 escribió:
(02-26-2021, 07:20 AM)Carotixx escribió: @Grouxho
hola amigo, empezaste a trabajar con android 11?

que dispositivo tienes?
s10+
[Imagen: vCuQYBl.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)