Tile para tiempo de apagado - pantalla normal y pantalla de bloque (en modo normal y en modo ahorro de energía)
Características
- Tile integrado en systemui
- Nos permite cambiar el tiempo de apagado (controlando la screen_off_timeout de settings system). El toggle está sincronizado con la opción de settings.
- Pulsando en el texto se nos expande un detalle en el que podemos cambiar el tiempo de apagado en pantalla de bloqueo cuando no tocamos nada tanto en modo normal como ahorro de energía. Por defecto son 5 segundos y 3 segundos. Podemos cambiar ambos entre 3 y 30 segundos.
Guía
- Nos bajamos el zip adjunto y lo descomprimimos.
- Editamos Systemui.apk
1- pones los pngs de res-drawables en vuestra carpeta drawables dentro de systemui - res
2.- Editamos strings.xml del systemui (en res - values) y ponemos dentro los strings del adjunto que aparecen en el txt res-values-strings
Hacemos lo mismo para los strings en res values-es.
3.- del anexo copiamos el layout qs_detail_grxscreenofftime.xml que encontrarés a la carpeta res - layout de vuestro systemui
4.- Este paso es opcional. Debido al sistema de análisis de logging que ha puesto samsung, si no añadimos en arrays.xml unos valores cada vez que pulsemos click en el toggle se generará una línea de log (una excepción). Esto pasa con todos los toggles no stock. Si queréis quitar esa línea de log hacemos lo siguiente
Editarmos res-values-arrays.xml en el systemui y buscamos este array : <string-array name="tile_ids"> . Antes de que se cierre el array añadimos las siguientes líneas
añadimos esas 4 líneas que hay antes de </string-..
5.- Del anexo copiamos los 5 smalies que veréis en la carpeta \smali\com\android\systemui\qs\tiles al systemui, en la misma ruta.
Ahora vamos a dar el soporte al mod de los tiempos de apagado en bloqueo
6.- Editamos statusbar.smali y añadimos el siguiente método al final del smali
Desde el tile llamamos a este método, que hace de intermediario. Es necesario por que mStatusBarWindowManager es una variable tipo protected, por lo que no podemos acceder desde el tile, a no ser que cambiemos su condición, pero no merece la pena.
7.- Finalmente editamos StatusBarWindowManager.smali y hacemos los siguientes cambios.
- Añadimos los siguientes dos variables, después de la etiqueta instance fields
- Localizamos el método method public constructor <init>(Landroid/content/Context;)V
Buscamos la línea donde se establece el context y añadimos la línea indicada a continuación
- Ahora al final del smali añadimos los siguientes dos métodos
- Para finalizar con el mod buscamos el método getUserActivityTimeout()J y hacemos los siguientes cambios (buscar ## en el siguiente código)
Para activar el toggle:
- Instalación en limpio:
a.- En el propio SystemUi edita strings.xml y busca el siguiente string y añádelo como se indica (GrxScreenOnTime y una coma al principio por ejemplo)
b.- En tu csc edita el others.xml por ejemplo edita (si no lo tiene busca en google como añadirlo) la siguiente entrada.
- Instalación e sucio
Usa el método b de instalación en limpio
Características
- Tile integrado en systemui
- Nos permite cambiar el tiempo de apagado (controlando la screen_off_timeout de settings system). El toggle está sincronizado con la opción de settings.
- Pulsando en el texto se nos expande un detalle en el que podemos cambiar el tiempo de apagado en pantalla de bloqueo cuando no tocamos nada tanto en modo normal como ahorro de energía. Por defecto son 5 segundos y 3 segundos. Podemos cambiar ambos entre 3 y 30 segundos.
Guía
- Nos bajamos el zip adjunto y lo descomprimimos.
- Editamos Systemui.apk
1- pones los pngs de res-drawables en vuestra carpeta drawables dentro de systemui - res
2.- Editamos strings.xml del systemui (en res - values) y ponemos dentro los strings del adjunto que aparecen en el txt res-values-strings
Hacemos lo mismo para los strings en res values-es.
3.- del anexo copiamos el layout qs_detail_grxscreenofftime.xml que encontrarés a la carpeta res - layout de vuestro systemui
4.- Este paso es opcional. Debido al sistema de análisis de logging que ha puesto samsung, si no añadimos en arrays.xml unos valores cada vez que pulsemos click en el toggle se generará una línea de log (una excepción). Esto pasa con todos los toggles no stock. Si queréis quitar esa línea de log hacemos lo siguiente
Editarmos res-values-arrays.xml en el systemui y buscamos este array : <string-array name="tile_ids"> . Antes de que se cierre el array añadimos las siguientes líneas
Código:
<item>GrxScreenOnTime</item>
<item>999</item>
<item>9999</item>
<item>9999</item>
</string-array>
añadimos esas 4 líneas que hay antes de </string-..
5.- Del anexo copiamos los 5 smalies que veréis en la carpeta \smali\com\android\systemui\qs\tiles al systemui, en la misma ruta.
Ahora vamos a dar el soporte al mod de los tiempos de apagado en bloqueo
6.- Editamos statusbar.smali y añadimos el siguiente método al final del smali
Código:
.method public grxUpdateLockScreenTimeOff()V
.locals 1
iget-object v0, p0, Lcom/android/systemui/statusbar/phone/StatusBar;->mStatusBarWindowManager:Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;
if-eqz v0, :cond_0
iget-object v0, p0, Lcom/android/systemui/statusbar/phone/StatusBar;->mStatusBarWindowManager:Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;
invoke-virtual {v0}, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->grxUpdateLockScreenTimeOff()V
:cond_0
return-void
.end method
Desde el tile llamamos a este método, que hace de intermediario. Es necesario por que mStatusBarWindowManager es una variable tipo protected, por lo que no podemos acceder desde el tile, a no ser que cambiemos su condición, pero no merece la pena.
7.- Finalmente editamos StatusBarWindowManager.smali y hacemos los siguientes cambios.
- Añadimos los siguientes dos variables, después de la etiqueta instance fields
Código:
# instance fields
.field private mGrxLsTimeOutNormal:J
.field private mGrxLsTimeOutPowerSave:J
- Localizamos el método method public constructor <init>(Landroid/content/Context;)V
Buscamos la línea donde se establece el context y añadimos la línea indicada a continuación
Código:
...
...
iput-object p1, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mContext:Landroid/content/Context; ### buscamos esta línea
invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->grxReadScreenOffTimeOutValues()V ## añadimos esta línea
const-string/jumbo v0, "window"
...
- Ahora al final del smali añadimos los siguientes dos métodos
Código:
.method public grxReadScreenOffTimeOutValues()V
.locals 4
iget-object v0, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mContext:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v1, "toff_ls_normal"
const v2, 0x5
:try_start_0
invoke-static {v0, v1, v2}, Landroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v2
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
:goto_0
const v1, 0x3e8
mul-int v2, v2, v1
int-to-long v2, v2
iput-wide v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mGrxLsTimeOutNormal:J
const-string v1, "toff_ls_psm"
const v2, 0x3
:try_start_1
invoke-static {v0, v1, v2}, Landroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v2
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_1
:goto_1
const v1, 0x3e8
mul-int v2, v2, v1
int-to-long v2, v2
iput-wide v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mGrxLsTimeOutPowerSave:J
return-void
:catch_0
move-exception v1
const v2, 0x5
goto :goto_0
:catch_1
move-exception v1
const v2, 0x3
goto :goto_1
.end method
.method public grxUpdateLockScreenTimeOff()V
.locals 1
invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->grxReadScreenOffTimeOutValues()V
const/4 v0, 0x1
invoke-virtual {p0, v0}, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->updateUserActivityTimeout(Z)V
return-void
.end method
- Para finalizar con el mod buscamos el método getUserActivityTimeout()J y hacemos los siguientes cambios (buscar ## en el siguiente código)
Código:
.method public getUserActivityTimeout()J
.locals 8
##const-wide/16 v6, 0x1388 ## remove this line
##const-wide/16 v4, 0xbb8 ## remove this line
iget-wide v6, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mGrxLsTimeOutNormal:J ### add this line
iget-wide v4, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mGrxLsTimeOutPowerSave:J ### add this line
sget v2, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->AWAKE_INTERVAL_DEFAULT_MS_DEFAULT:I
int-to-long v0, v2
invoke-static {}, Lcom/android/systemui/util/SettingsHelper;->getInstance()Lcom/android/systemui/util/SettingsHelper;
move-result-object v2
invoke-virtual {v2}, Lcom/android/systemui/util/SettingsHelper;->isSmartStayEnabled()Z
move-result v2
if-eqz v2, :cond_0
## invoke-static {v6, v7, v0, v1}, Ljava/lang/Math;->min(JJ)J ## remove this line
### move-result-wide v0 ## remove this line
move-wide v0, v6 ### add this line
:cond_0
sget-boolean v2, Lcom/android/systemui/Rune;->KEYGUARD_SUPPORT_HIGH_PERFORMANCE_MODE:Z
if-eqz v2, :cond_1
invoke-static {}, Lcom/android/systemui/util/SettingsHelper;->getInstance()Lcom/android/systemui/util/SettingsHelper;
move-result-object v2
invoke-virtual {v2}, Lcom/android/systemui/util/SettingsHelper;->isNormalInHighPerformanceMode()Z
move-result v2
if-eqz v2, :cond_1
##invoke-static {v6, v7, v0, v1}, Ljava/lang/Math;->min(JJ)J ## remove this line
##move-result-wide v0 ## remove this line
move-wide v0, v6 ### add this line
:cond_1
iget-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mContext:Landroid/content/Context;
invoke-static {v2}, Lcom/android/keyguard/KeyguardUpdateMonitor;->getInstance(Landroid/content/Context;)Lcom/android/keyguard/KeyguardUpdateMonitor;
move-result-object v2
invoke-virtual {v2}, Lcom/android/keyguard/KeyguardUpdateMonitor;->isDexMode()Z
move-result v2
if-eqz v2, :cond_2
sget v2, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->AWAKE_INTERVAL_DEFAULT_MS_DEFAULT:I
int-to-long v0, v2
:cond_2
invoke-static {}, Lcom/android/systemui/util/SettingsHelper;->getInstance()Lcom/android/systemui/util/SettingsHelper;
move-result-object v2
invoke-virtual {v2}, Lcom/android/systemui/util/SettingsHelper;->isEmergencyMode()Z
move-result v2
if-eqz v2, :cond_4
###invoke-static {v4, v5, v0, v1}, Ljava/lang/Math;->min(JJ)J ### remove this line
### move-result-wide v0 ### remove this line
move-wide v0, v4 ## add this line
:cond_3
:goto_0
const-string/jumbo v2, "StatusBarWindowManager"
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v4, "getUserActivityTimeout()"
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v2, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-wide v0
:cond_4
invoke-static {}, Lcom/android/systemui/util/SettingsHelper;->getInstance()Lcom/android/systemui/util/SettingsHelper;
move-result-object v2
invoke-virtual {v2}, Lcom/android/systemui/util/SettingsHelper;->isPowerSavingMode()Z
move-result v2
if-eqz v2, :cond_3
iget-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mPowerManager:Landroid/os/PowerManager;
if-nez v2, :cond_5
iget-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mContext:Landroid/content/Context;
const-string/jumbo v3, "power"
invoke-virtual {v2, v3}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Landroid/os/PowerManager;
iput-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mPowerManager:Landroid/os/PowerManager;
:cond_5
iget-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mPowerManager:Landroid/os/PowerManager;
if-eqz v2, :cond_3
iget-object v2, p0, Lcom/android/systemui/statusbar/phone/StatusBarWindowManager;->mPowerManager:Landroid/os/PowerManager;
invoke-virtual {v2}, Landroid/os/PowerManager;->isPowerSaveMode()Z
move-result v2
if-eqz v2, :cond_3
### invoke-static {v4, v5, v0, v1}, Ljava/lang/Math;->min(JJ)J # remove this line
### move-result-wide v0 ## remove this line
move-wide v0, v4 ### add this line
goto :goto_0
.end method
Para activar el toggle:
- Instalación en limpio:
a.- En el propio SystemUi edita strings.xml y busca el siguiente string y añádelo como se indica (GrxScreenOnTime y una coma al principio por ejemplo)
Código:
<string name="quick_settings_tiles_default">GrxScreenOnTime,Wifi,Sound .....
b.- En tu csc edita el others.xml por ejemplo edita (si no lo tiene busca en google como añadirlo) la siguiente entrada.
Código:
<CscFeature_SystemUI_ConfigDefQuickSettingItem>GrxScreenOnTime,Wifi ....
- Instalación e sucio
Usa el método b de instalación en limpio