[Verizon Samsung Galaxy S III] Didact74:
PART 2

Now for framework2.jar

Navigate to com/android/internal/widget/multiwaveview/GlowPadView.smali

Find the following method

.method private getDirectionDescription(I)Ljava/lang/String;

Replace the entire method with the following code

.method private getDirectionDescription(I)Ljava/lang/String;
.locals 4
.parameter "index"

.prologue
.line 1119
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptions:Ljava/util/ArrayList;

if-eqz v2, :cond_0

iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptions:Ljava/util/ArrayList;

invoke-virtual {v2}, Ljava/util/ArrayList;->isEmpty()Z

move-result v2

if-eqz v2, :cond_1

.line 1120
:cond_0
iget v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptionsResourceId:I

invoke-direct {p0, v2}, Lcom/android/internal/widget/multiwaveview/GlowPadView;->loadDescriptions(I)Ljava/util/ArrayList;

move-result-object v2

iput-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptions:Ljava/util/ArrayList;

.line 1121
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDrawables:Ljava/util/ArrayList;

invoke-virtual {v2}, Ljava/util/ArrayList;->size()I

move-result v2

iget-object v3, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptions:Ljava/util/ArrayList;

invoke-virtual {v3}, Ljava/util/ArrayList;->size()I

move-result v3

if-eq v2, v3, :cond_1

.line 1122
const-string v2, "GlowPadView"

const-string v3, "The number of target drawables must be equal to the number of direction descriptions."

invoke-static {v2, v3}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

.line 1124
const/4 v0, 0x0

.line 1133
:goto_0
return-object v0

.line 1130
:cond_1
:try_start_0
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mDirectionDescriptions:Ljava/util/ArrayList;

invoke-virtual {v2, p1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

move-result-object v0

check-cast v0, Ljava/lang/String;
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

.line 1131
.local v0, directionZ:Ljava/lang/String;
goto :goto_0

.line 1132
.end local v0 #directionZ:Ljava/lang/String;
:catch_0
move-exception v1

.line 1133
.local v1, e:Ljava/lang/Exception;
const-string v0, ""

goto :goto_0
.end method

Find the following method

.method private getTargetDescription(I)Ljava/lang/String;
.locals 4
.parameter "index"

.prologue
.line 1099
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptions:Ljava/util/ArrayList;

if-eqz v2, :cond_0

iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptions:Ljava/util/ArrayList;

invoke-virtual {v2}, Ljava/util/ArrayList;->isEmpty()Z

move-result v2

if-eqz v2, :cond_1

.line 1100
:cond_0
iget v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptionsResourceId:I

invoke-direct {p0, v2}, Lcom/android/internal/widget/multiwaveview/GlowPadView;->loadDescriptions(I)Ljava/util/ArrayList;

move-result-object v2

iput-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptions:Ljava/util/ArrayList;

.line 1101
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDrawables:Ljava/util/ArrayList;

invoke-virtual {v2}, Ljava/util/ArrayList;->size()I

move-result v2

iget-object v3, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptions:Ljava/util/ArrayList;

invoke-virtual {v3}, Ljava/util/ArrayList;->size()I

move-result v3

if-eq v2, v3, :cond_1

.line 1102
const-string v2, "GlowPadView"

const-string v3, "The number of target drawables must be equal to the number of target descriptions."

invoke-static {v2, v3}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

.line 1104
const/4 v1, 0x0

.line 1114
:goto_0
return-object v1

.line 1109
:cond_1
const-string v1, ""

.line 1111
.local v1, targetZ:Ljava/lang/String;
:try_start_0
iget-object v2, p0, Lcom/android/internal/widget/multiwaveview/GlowPadView;->mTargetDescriptions:Ljava/util/ArrayList;

invoke-virtual {v2, p1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

move-result-object v2

move-object v0, v2

check-cast v0, Ljava/lang/String;

move-object v1, v0
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

goto :goto_0

.line 1112
:catch_0
move-exception v2

goto :goto_0
.end method

Thats it for Framework2.jar

Now for android.policy

Navigate to com/android/internal/policy/impl/LockScreen.smali and ADD the following methods:

.method static synthetic access$1400(Lcom/android/internal/policy/impl/LockScreen;)Landroid/content/Context;
.locals 1
.parameter "x0"

.prologue
.line 56
iget-object v0, p0, Lcom/android/internal/policy/impl/LockScreen;->mContext:Landroid/content/Context;

return-object v0
.end method

.method static synthetic access$1500(Lcom/android/internal/policy/impl/LockScreen;)Landroid/content/Context;
.locals 1
.parameter "x0"

.prologue
.line 56
iget-object v0, p0, Lcom/android/internal/policy/impl/LockScreen;->mContext:Landroid/content/Context;

return-object v0
.end method

Navigate to com/android/internal/policy/impl/LockScreen$GlowPadViewMethods.smali.

Find the following method

.method public onTrigger(Landroid/view/View;I)V

Replace the entire method with the following code.

.method public onTrigger(Landroid/view/View;I)V
.locals 7
.parameter "v"
.parameter "target"

.prologue
const/high16 v6, 0x1000

.line 313
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->mGlowPadView:Lcom/android/internal/widget/multiwaveview/GlowPadView;

invoke-virtual {v4, p2}, Lcom/android/internal/widget/multiwaveview/GlowPadView;->getResourceIdForTarget(I)I

move-result v3

.line 321
.local v3, resId:I
sparse-switch v3, :sswitch_data_0

.line 367
:goto_0
return-void

.line 323
:sswitch_0
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$1200(Lcom/android/internal/policy/impl/LockScreen;)Landroid/content/Context;

move-result-object v4

invoke-static {v4}, Landroid/app/SearchManager;->getAssistIntent(Landroid/content/Context;)Landroid/content/Intent;

move-result-object v0

.line 324
.local v0, assistIntent:Landroid/content/Intent;
if-eqz v0, :cond_0

.line 325
invoke-direct {p0, v0}, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->launchActivity(Landroid/content/Intent;)V

.line 329
:goto_1
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->pokeWakelock()V

goto :goto_0

.line 327
:cond_0
const-string v4, "LockScreen"

const-string v5, "Failed to get intent for assist activity"

invoke-static {v4, v5}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

goto :goto_1

.line 333
.end local v0 #assistIntent:Landroid/content/Intent;
:sswitch_1
new-instance v4, Landroid/content/Intent;

const-string v5, "android.media.action.STILL_IMAGE_CAMERA"

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

invoke-direct {p0, v4}, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->launchActivity(Landroid/content/Intent;)V

.line 334
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->pokeWakelock()V

goto :goto_0

.line 339
:sswitch_2
new-instance v2, Landroid/content/Intent;

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

invoke-direct {v2, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V

.line 340
.local v2, phoneIntent:Landroid/content/Intent;
const-string v4, "com.android.contacts"

const-string v5, "com.android.contacts.activities.DialtactsActivity"

invoke-virtual {v2, v4, v5}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;

.line 341
invoke-virtual {v2, v6}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;

.line 342
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$1300(Lcom/android/internal/policy/impl/LockScreen;)Landroid/content/Context;

move-result-object v4

invoke-virtual {v4, v2}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V

.line 343
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->goToUnlockScreen()V

goto :goto_0

.line 348
.end local v2 #phoneIntent:Landroid/content/Intent;
:sswitch_3
new-instance v1, Landroid/content/Intent;

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

invoke-direct {v1, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V

.line 349
.local v1, mmsIntent:Landroid/content/Intent;
const-string v4, "com.android.mms"

const-string v5, "com.android.mms.ui.ConversationList"

invoke-virtual {v1, v4, v5}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;

.line 350
invoke-virtual {v1, v6}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;

.line 351
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$1400(Lcom/android/internal/policy/impl/LockScreen;)Landroid/content/Context;

move-result-object v4

invoke-virtual {v4, v1}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V

.line 352
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->goToUnlockScreen()V

goto :goto_0

.line 357
.end local v1 #mmsIntent:Landroid/content/Intent;
:sswitch_4
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$500(Lcom/android/internal/policy/impl/LockScreen;)V

.line 358
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->pokeWakelock()V

goto/16 :goto_0

.line 364
:sswitch_5
iget-object v4, p0, Lcom/android/internal/policy/impl/LockScreen$GlowPadViewMethods;->this$0:Lcom/android/internal/policy/impl/LockScreen;

invoke-static {v4}, Lcom/android/internal/policy/impl/LockScreen;->access$400(Lcom/android/internal/policy/impl/LockScreen;)Lcom/android/internal/policy/impl/KeyguardScreenCallback;

move-result-object v4

invoke-interface {v4}, Lcom/android/internal/policy/impl/KeyguardScreenCallback;->goToUnlockScreen()V

goto/16 :goto_0

.line 321
:sswitch_data_0
.sparse-switch
0x1080294 -> :sswitch_0 #generic
0x10802dd -> :sswitch_1 #camera
0x10802f6 -> :sswitch_4 #silent
0x10802fe -> :sswitch_5 #unlock
0x1080301 -> :sswitch_5 #unlock phantom
0x1080604 -> :sswitch_2 #phone
0x1080607 -> :sswitch_3 #sms
.end sparse-switch
.end method

You need to copy the correct IDs into the switch bank from the framework-res step earlier. The ones shown are not correct for your phone.

Push all files to /system/framework

Done!

Hit that thanks button if this was useful![/hide]