Acceder

Ver la Versión Completa : [TUTORIAL] Galaxy SII +/+ NFC [I9105/I9105P] Vol+ y Vol- para pasar canciones


klurosu
17/06/13, 00:11:46
Gracias a:
majdinj (http://forum.xda-developers.com/member.php?u=369057)
xpeiacle (http://forum.xda-developers.com/member.php?u=4948919)
grilleld (http://forum.xda-developers.com/member.php?u=4826618)

Yo solo he modificado el codigo para que cuadre en nuestro i9105 o i9105P.


Al turron!

Necesitaras:
Android.policy.jar
HoloxTool_v1.0.1 (https://docs.google.com/file/d/0B4gZLyPSGvqhYlRxTXhpeTZQZ0k/edit?usp=sharing)
"boton.vol.pasa.pistas (https://drive.google.com/folderview?id=0B4gZLyPSGvqhYmRiZGtRSmlsRWc&usp=sharing)"


1. Abre “Android.policy.jar” con “WinRAR” y saca el archivo “classes.dex” a la carpeta “dex” que hay dentro de “HoloxTool_v1.0.1” y selecciona la opción “2” cuando ejecutes “HoloxTool.bat”
2. Entra en “HoloxTool_v1.0.1\database\dex\classout\com/android/internal/policy/impl y abre el archivo “PhoneWindowManager.smali”
3. Busca la línea:".field static final LONG_PRESS_POWER_SHUT_OFF:I = 0x2" y añade lo que esta en azul justo debajo:

.field static final LONG_PRESS_POWER_SHUT_OFF:I = 0x2

.field private static final LONG_PRESS_TIMEOUT:I = 0x190

.field static final MINI_APP_DIALOG_LAYER:I = 0x5

- Busca ".field private mIsVisibleSPenGestureView:Z" y añade estas lineas en azul:

.field private mIsVisibleSPenGestureView:Z

.field mIsVolumeAction:Z

.field mIsVolumeBlocking:Z

.field mKeyboardTapVibePattern:[J

- Busca ".field private mVolumeDownKeyTriggered:Z" y añade esta linea azul::

.field private mVolumeDownKeyTriggered:Z

.field mVolumeDownLongPress:Ljava/lang/Runnable;

.field private final mVolumeKeyLongPressforOneTouchReport:Ljava/lang/Runnable;

- Busca ".field private mVolumeUpKeyTriggered:Z" y añade esta linea azul:

.field private mVolumeUpKeyTriggered:Z

.field mVolumeUpLongPress:Ljava/lang/Runnable;

.field mWindowManager:Landroid/view/IWindowManager;

- Busca el metodo ".method public constructor <init>()V" y vete al final del mismo para poder añadir estas lineas azulesantes del "return-void":

.line 7554
new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$35;

invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$35;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;V

iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mScreenLockTimeout:Ljava/lang/Runnable;

new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$Skip1;

invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$Skip1;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;V

iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$Skip2;

invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$Skip2;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;V

iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;

.line 8501
return-void
.end method

- Busca el metodo ".method handleVolumeKey(II)V" y añade estas lineas encima del "invoke-static" y sustituye la condicion:

. method handleVolumeKey(II)V
.registers 8
.parameter "stream"
.parameter "keycode"

.prologue
.line 5673
move-object/from16 v0, p0

iget-boolean v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeBlocking:Z

if-nez v0, :cond_c

invoke-static {}, Lcom/android/internal/policy/impl/PhoneWindowManager;->getAudioService()Landroid/media/IAudioService;

move-result-object v0

.line 5674
.local v0, audioService:Landroid/media/IAudioService;
if-nez v0, :cond_7

.line 5705
:cond_c
:goto_c
return-void;[/code]

- Aun en el metodo de arriba, busca "Landroid/os/PowerManager$WakeLock;->release()V" y cambia el valor del ":goto" por el de antes:

[CODE].line 5703
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBroadcastWakeLock:Landroid/os/PowerManager$WakeLock;

invoke-virtual {v2}, Landroid/os/PowerManager$WakeLock;->release()V

goto :goto_c

- Hay otro, asi que...haz lo mismo:

.line 5703
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBroadcastWakeLock:Landroid/os/PowerManager$WakeLock;

invoke-virtual {v2}, Landroid/os/PowerManager$WakeLock;->release()V

goto :goto_c

- Ahora al final del metodo ".method handleVolumeKey(II)V" y antes del metodo ".method public hasNavigationBar()Z", añade estos dos:

.method handleVolumeLongPress(I)V
.registers 6

const/4 v1, 0x1

move-object/from16 v0, p0

iput-boolean v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeBlocking:Z

const/4 v1, 0x0

iput-boolean v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeAction:Z

const/16 v1, 0x18

if-ne p1, v1, :cond_majdi

iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

:goto_nj
iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

sget v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->LONG_PRESS_TIMEOUT:I

int-to-long v2, v2

invoke-virtual {v1, v0, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z

return-void

:cond_majdi
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;

goto :goto_nj
.end method

.method handleVolumeLongPressAbort()V
.registers 3

const/4 v1, 0x0

move-object/from16 v0, p0

iput-boolean v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeBlocking:Z

iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;V

iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;

invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;V

return-void
.end method

- Busca el metodo ".method public interceptKeyBeforeQueueing(Landroid/view/KeyEvent;IZ)I", y busca abajo la linea "Lcom/android/internal/policy/impl/PhoneWindowManager;->mSamsungVolumeControlThread:Lcom/android/internal/policy/impl/PhoneWindowManager$SamsungVolumeControlThread;" para añadir estas lineas:

. line 6234
.end local v7 #ex:Landroid/os/RemoteException;
:cond_4d3
move-object/from16 v0, p0

iget-boolean v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mScreenOnEarly:Z

if-nez v0, :cond_dinj

invoke-virtual/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->isMusicActive()Z

move-result v29

if-eqz p0, :cond_dinj

move-object/from16 v0, p0

move/from16 v15, v19

invoke-virtual {v0, v15}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeLongPress(I)V

:cond_dinj
move-object/from16 v0, p0

iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSamsungVolumeControlThread:Lcom/android/internal/policy/impl/PhoneWindowManager$SamsungVolumeControlThread;

move-object/from16 v29, v0

if-nez v29, :cond_68

- Aun en este metodo, mas abajo deberas modificar una condicion:

invoke-virtual/range {v29 .. v29}, Lcom/android/internal/policy/impl/PhoneWindowManager$SamsungVolumeControlThread;->start()V

oto/16 :goto_68

.line 6242
.end local v27 #telephonyService:Lcom/android/internal/telephony/ITelephony;
.end local v28 #voipInterfaceService:Landroid/os/IVoIPInterface;
:cond_506
if-nez v5, :cond_newa

move-object/from16 v0, p0

iget-boolean v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeBlocking:Z

if-eqz v0, :cond_newa

invoke-virtual/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeLongPressAbort()V

move-object/from16 v0, p0

iget-boolean v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeAction:Z

if-nez v0, :cond_newa

move-object/from16 v0, p0

const/4 v3, 0x0

move/from16 v15, v19

invoke-virtual {v0, v3, v15}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeKey(II)V

:cond_newa
move-object/from16 v0, p0

iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSamsungVolumeControlThread:Lcom/android/internal/policy/impl/PhoneWindowManager$SamsungVolumeControlThread;

move-object/from16 v29, v0

- Nos vamos al final del metodo ".method sendCloseSystemWindows(Ljava/lang/String;V" y encima del metodo ".method setAttachedWindowFrames(Landroid/view/WindowManagerPolicy$WindowState;IILandroid/view/WindowManagerPolicy$WindowState;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;I)V" añade esto:

.method protected sendMediaButtonEvent(I)V
.registers 15

invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J

move-result-wide v1

new-instance v11, Landroid/content/Intent;

const-string v4, "android.intent.action.MEDIA_BUTTON"

const/4 v5, 0x0

invoke-direct {v11, v4, v5}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;V

new-instance v0, Landroid/view/KeyEvent;

const/4 v5, 0x0

const/4 v7, 0x0

move-wide v3, v1

move v6, p1

invoke-direct/range {v0 .. v7}, Landroid/view/KeyEvent;-><init>(JJIII)V

const-string v4, "android.intent.extra.KEY_EVENT"

invoke-virtual {v11, v4, v0}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Parcelable;Landroid/content/Intent;

iget-object v4, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

const/4 v5, 0x0

invoke-virtual {v4, v11, v5}, Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;V

new-instance v12, Landroid/content/Intent;

const-string v4, "android.intent.action.MEDIA_BUTTON"

const/4 v5, 0x0

invoke-direct {v12, v4, v5}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;V

new-instance v3, Landroid/view/KeyEvent;

const/4 v8, 0x1

const/4 v10, 0x0

move-wide v4, v1

move-wide v6, v1

move v9, p1

invoke-direct/range {v3 .. v10}, Landroid/view/KeyEvent;-><init>(JJIII)V

const-string v4, "android.intent.extra.KEY_EVENT"

invoke-virtual {v12, v4, v3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Parcelable;Landroid/content/Intent;

iget-object v4, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

const/4 v5, 0x0

invoke-virtual {v4, v12, v5}, Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;V

const/4 v8, 0x1

move-object/from16 v9, p0

iput-boolean v8, v9, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolumeAction:Z

return-void
.end method

Cierra el documento guardando los cambios.

4. Añade los dos archivos que hay dentro de "boton.vol.pasa.pistas (https://drive.google.com/folderview?id=0B4gZLyPSGvqhYmRiZGtRSmlsRWc&usp=sharing)" a la ruta: "com/android/internal/policy/impl" y recompila mediante la opción “3” del menú de “HoloxTool_v1.0.1”.
5. copia el archivo “new-classes.dex” que hay dentro de “HoloxTool_v1.0.1\database\dex” al escritorio y renómbralo a “classes.dex”
6. Abre “Android.policy.jar” con “WinRAR” y mete el archivo “classes.dex” que tienes en tu escritorio (machacará el que hay dentro)


Ya está.

Ahora cada vez que estes escuchando tu musica favorita y el movil este en modo bloqueo, podras pasar a la siguiente cancion o a la anterior... pulsando Vol+ o Vol-