phenomarc
20/05/13, 22:45:04
Hoy vamos a crear un toggle que nos permitirá cambiar nuestra forma de desbloqueo y elegir entre la de Samsung y la AOSP.
Trabajaremos con 2 archivos:
- android.polic.jar
- SecSettings
Empezamos por el android.policy.jar:
1) Descompilamos el android.policy.jar y buscamos el archivo LockPatternKeyguardView.smali, que se encuentra en smali/com/android/internal/policy/impl/.
2) Buscamos el método .method createLockScreen()Landroid/view/View y lo editamos para que quede así, añadiendo las lineas rojas:
.method createLockScreen()Landroid/view/View;
.registers 7
.prologue
.line 1319
iget-object v0, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v1, "aosp_lock"
const/4 v2, 0x0
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-nez v0, :cond_mirko
new-instance v0, Lcom/android/internal/policy/impl/sec/CircleLockScreen;
iget-object v1, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
iget-object v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mConfiguration:Landroid/content/res/Configuration;
iget-object v3, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
iget-object v4, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mUpdateMonitor:Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;
iget-object v5, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mKeyguardScreenCallback:Lcom/android/internal/policy/impl/KeyguardScreenCallback;
invoke-direct/range {v0 .. v5}, Lcom/android/internal/policy/impl/sec/CircleLockScreen;-><init>(Landroid/content/Context;Landroid/content/res/Configuration;Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;Lcom/android/internal/policy/impl/KeyguardScreenCallback;)V
goto :goto_ddd
.line 1325
:cond_mirko
new-instance v0, Lcom/android/internal/policy/impl/LockScreen;
iget-object v1, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
iget-object v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mConfiguration:Landroid/content/res/Configuration;
iget-object v3, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
iget-object v4, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mUpdateMonitor:Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;
iget-object v5, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mKeyguardScreenCallback:Lcom/android/internal/policy/impl/KeyguardScreenCallback;
invoke-direct/range {v0 .. v5}, Lcom/android/internal/policy/impl/LockScreen;-><init>(Landroid/content/Context;Landroid/content/res/Configuration;Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;Lcom/android/internal/policy/impl/KeyguardScreenCallback;)V
.local v0, lockView:Landroid/view/View;
:goto_ddd
invoke-direct {p0, v0}, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->initializeTransportControlView(Landroid/view/View;)V
Ya hemos acabado con la edición del android.policy.jar. Recompilamos y lo pasamos.
Seguimos con el SecSettings. Ahora lo que haremos será añadir el toggle en los ajustes de lockscreen.
3) Descompilamos el SecSettings.apk y buscamos el smali LockscreenSettings.smali, localizado en smali/com/android/settings.
4) Una vez abierto el archivo, vamos a hacer varias sustituciones, o quitar y añadir, como lo querais ver. Añadimos lo rojo, borramos lo lila:
.field private mAospLock:Landroid/preference/CheckBoxPreference;
.field private mCameraShortCut:Landroid/preference/SwitchPreferenceScreen;
.field private mClock:Landroid/preference/CheckBoxPreference;
.field private mDualclock:Landroid/preference/SwitchPreferenceScreen;
.field private mHelpText:Landroid/preference/CheckBoxPreference;
.field private mInformationTicker:Landroid/preference/SwitchPreferenceScreen;
.field private mInkEffect:Landroid/preference/PreferenceScreen;
.field mInkEffectSummary:[I
.field private mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
.field private mLockScreenShortcut:Landroid/preference/SwitchPreferenceScreen;
.field private mMotionDialog:Landroid/app/AlertDialog;
.field private mRippleEffect:Landroid/preference/CheckBoxPreference;
.field private mSayCommand:Landroid/preference/CheckBoxPreference;
A partir de aquí, sugiero buscar todos los dos "mSayCommand" y sustituirlos por "mAospLock", y todos los "wake_up_lock_screen" sustituirlos por "aosp_lock" (solo hay 2).
Ya hemos acabado con el smali.
5) Abrimos el lockscreen_Settings.xml, localizado en res/xml y añadimos lo siguiente donde queramos que se nos vea:
<CheckBoxPreference android:title="@string/your_string" android:key="say_your_wakeup" android:summary="@string/your_summary_string" />
Si quereis podeis cambiar "your_string" y "your_summary_string" por el texto que querais, siempre y cuando concuerde con lo añadido en el paso 6.
Además, buscamos y borramos lo siguiente:
<CheckBoxPreference android:title="@string/samsung_unlock_option_say_your_wakeup_command_to_u nlock_screen" android:key="say_your_wakeup" android:summary="@string/wakeup_in_lockscreen_summary" />
6)Abrimos el archivo strings.xml, en res/values y añadimos al final lo siguiente:
<string name="your_string">Título</string>
<string name="your_summary_string">Descripción</string>
En "Título" y "Descripción" poneed lo que querais.
Hemos acabado. Compilamos el SecSettings y los pasamos a nuestro S2.
A disfrutar!
Agradecimientos
Mirko ddd
Trabajaremos con 2 archivos:
- android.polic.jar
- SecSettings
Empezamos por el android.policy.jar:
1) Descompilamos el android.policy.jar y buscamos el archivo LockPatternKeyguardView.smali, que se encuentra en smali/com/android/internal/policy/impl/.
2) Buscamos el método .method createLockScreen()Landroid/view/View y lo editamos para que quede así, añadiendo las lineas rojas:
.method createLockScreen()Landroid/view/View;
.registers 7
.prologue
.line 1319
iget-object v0, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v1, "aosp_lock"
const/4 v2, 0x0
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-nez v0, :cond_mirko
new-instance v0, Lcom/android/internal/policy/impl/sec/CircleLockScreen;
iget-object v1, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
iget-object v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mConfiguration:Landroid/content/res/Configuration;
iget-object v3, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
iget-object v4, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mUpdateMonitor:Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;
iget-object v5, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mKeyguardScreenCallback:Lcom/android/internal/policy/impl/KeyguardScreenCallback;
invoke-direct/range {v0 .. v5}, Lcom/android/internal/policy/impl/sec/CircleLockScreen;-><init>(Landroid/content/Context;Landroid/content/res/Configuration;Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;Lcom/android/internal/policy/impl/KeyguardScreenCallback;)V
goto :goto_ddd
.line 1325
:cond_mirko
new-instance v0, Lcom/android/internal/policy/impl/LockScreen;
iget-object v1, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mContext:Landroid/content/Context;
iget-object v2, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mConfiguration:Landroid/content/res/Configuration;
iget-object v3, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
iget-object v4, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mUpdateMonitor:Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;
iget-object v5, p0, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->mKeyguardScreenCallback:Lcom/android/internal/policy/impl/KeyguardScreenCallback;
invoke-direct/range {v0 .. v5}, Lcom/android/internal/policy/impl/LockScreen;-><init>(Landroid/content/Context;Landroid/content/res/Configuration;Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;Lcom/android/internal/policy/impl/KeyguardScreenCallback;)V
.local v0, lockView:Landroid/view/View;
:goto_ddd
invoke-direct {p0, v0}, Lcom/android/internal/policy/impl/LockPatternKeyguardView;->initializeTransportControlView(Landroid/view/View;)V
Ya hemos acabado con la edición del android.policy.jar. Recompilamos y lo pasamos.
Seguimos con el SecSettings. Ahora lo que haremos será añadir el toggle en los ajustes de lockscreen.
3) Descompilamos el SecSettings.apk y buscamos el smali LockscreenSettings.smali, localizado en smali/com/android/settings.
4) Una vez abierto el archivo, vamos a hacer varias sustituciones, o quitar y añadir, como lo querais ver. Añadimos lo rojo, borramos lo lila:
.field private mAospLock:Landroid/preference/CheckBoxPreference;
.field private mCameraShortCut:Landroid/preference/SwitchPreferenceScreen;
.field private mClock:Landroid/preference/CheckBoxPreference;
.field private mDualclock:Landroid/preference/SwitchPreferenceScreen;
.field private mHelpText:Landroid/preference/CheckBoxPreference;
.field private mInformationTicker:Landroid/preference/SwitchPreferenceScreen;
.field private mInkEffect:Landroid/preference/PreferenceScreen;
.field mInkEffectSummary:[I
.field private mLockPatternUtils:Lcom/android/internal/widget/LockPatternUtils;
.field private mLockScreenShortcut:Landroid/preference/SwitchPreferenceScreen;
.field private mMotionDialog:Landroid/app/AlertDialog;
.field private mRippleEffect:Landroid/preference/CheckBoxPreference;
.field private mSayCommand:Landroid/preference/CheckBoxPreference;
A partir de aquí, sugiero buscar todos los dos "mSayCommand" y sustituirlos por "mAospLock", y todos los "wake_up_lock_screen" sustituirlos por "aosp_lock" (solo hay 2).
Ya hemos acabado con el smali.
5) Abrimos el lockscreen_Settings.xml, localizado en res/xml y añadimos lo siguiente donde queramos que se nos vea:
<CheckBoxPreference android:title="@string/your_string" android:key="say_your_wakeup" android:summary="@string/your_summary_string" />
Si quereis podeis cambiar "your_string" y "your_summary_string" por el texto que querais, siempre y cuando concuerde con lo añadido en el paso 6.
Además, buscamos y borramos lo siguiente:
<CheckBoxPreference android:title="@string/samsung_unlock_option_say_your_wakeup_command_to_u nlock_screen" android:key="say_your_wakeup" android:summary="@string/wakeup_in_lockscreen_summary" />
6)Abrimos el archivo strings.xml, en res/values y añadimos al final lo siguiente:
<string name="your_string">Título</string>
<string name="your_summary_string">Descripción</string>
En "Título" y "Descripción" poneed lo que querais.
Hemos acabado. Compilamos el SecSettings y los pasamos a nuestro S2.
A disfrutar!
Agradecimientos
Mirko ddd