samedi 14 février 2015

[MOD][TUTORIAL][i9500]Enable Flashlight, Screenshot PowerMenu on OFFICIAL Lollipop topic






1st THIS IS NOT MINE TUTORIAL
I just edit, fix and change the code from N9005 to I9500
Credits go to darkera13 (SAMSUNG Developer) from Samsungviet
Link to orginal thread here

2nd WHAT'D WE HAVE AFTER DOING THIS MOD



1. THIS MOD IS ONLY FOR DEODEXED OFFICIAL LOLLIPOP ROM: You'd prepare android.policy.jar and framework-res.apk
2. Decompile the framework-res.apk and open /res/values/arrays.xml with your favorite text editor
Search for:

Code:


<string-array name="config_globalActionsList">

Add like following:

Code:


<string-array name="config_globalActionsList">
    <item>power</item>
    <item>datamode</item>
    <item>airplane</item>
    <item>restart</item>
    <item>lockdown</item>
    <item>bugreport</item>
    <item>users</item>
    <item>emergencymode</item>

    <item>flashlight</item>
    <item>screenshot</item>

</string-array>


Save and open /res/values/strings.xml
Add to the end of file(EOF):

Code:


    <string name="global_action_screenshot">Take Screenshot</string>
    <string name="global_action_flashlight">Flashlight</string>
    <string name="global_actions_flashlight_on_status">On</string>
    <string name="global_actions_flashlight_off_status">Off</string>

</resources>


Save
Copy all PNG files in framework-res GlobalMenu_darkera13_samsungviet.vn.zip to /res/drawable-xhdpi and Compile
We'd get an apk: unsignedframework-res.apk
Now keep this file and decompile the open /res/values/public.xml(in project unsignedframework-res.apk] not framework-res.apk)
Note these lines to use in next big step

Code:


// This is what I got from recompiled framework-res.apk might be different with your
<public type="string" name="global_action_screenshot" id="0x01040ba5" />  -> const v4: 1040ba5
<public type="string" name="global_action_flashlight" id="0x01040ba6" />  -> const v6: 1040ba6
<public type="string" name="global_actions_flashlight_on_status" id="0x01040ba7" />  -> const v7: 1040ba7
<public type="string" name="global_actions_flashlight_off_status" id="0x01040ba8" />  -> const v8: 1040ba8
<public type="drawable" name="tw_ic_lock_flashlight_on" id="0x01080b5c" />  -> const v4: 1080b5c
<public type="drawable" name="tw_ic_lock_flashlight_off" id="0x01080b5b" />  -> const v5: 1080b5b
<public type="drawable" name="tw_ic_lock_screenshot" id="0x01080b5d" />  -> const v3: 1080b5d


3. Decompile the android.policy.jar and open /com/android/internal/policy/impl/GlobalActions.smali
Search for:

Code:


.field private mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;

Add like following:

Code:


.field private mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;

.field private mFlashlight:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

.field private mFlashlightState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

.field private mScreenshot:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;


Search for:

Code:


iput-object v3, p0, Lcom/android/internal/policy/impl/GlobalActions;->mAirplaneState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

sget-object v3, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;->Off:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;


Add like following:

Code:


iput-object v3, p0, Lcom/android/internal/policy/impl/GlobalActions;->mAirplaneState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

sget-object v3, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;->Off:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;


iput-object v3, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlightState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

sget-object v3, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;->Off:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;


Search for:

Code:


.method static synthetic access0(Lcom/android/internal/policy/impl/GlobalActions;)Landroid/content/Context;

Add to above like following:


Code:



.method static synthetic access00(Lcom/android/internal/policy/impl/GlobalActions;)Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;
        .locals 1

        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlight:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

        return-object v0
.end method

.method static synthetic access01(Lcom/android/internal/policy/impl/GlobalActions;)Z
        .locals 1

        invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getTorchStatus()Z

        move-result v0

        return v0
.end method

.method static synthetic access0(Lcom/android/internal/policy/impl/GlobalActions;)Landroid/content/Context;


Search for:

Code:



        iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;


Add like following * Remember sections in bold the the ids from public.xml you'll get when editing the framework-res.apk:

Code:


// This is what I got from recompiled framework-res.apk might be different with your
<public type="string" name="global_action_screenshot" id="0x01040ba5" />  -> const v4: 1040ba5
<public type="string" name="global_action_flashlight" id="0x01040ba6" />  -> const v6: 1040ba6
<public type="string" name="global_actions_flashlight_on_status" id="0x01040ba7" />  -> const v7: 1040ba7
<public type="string" name="global_actions_flashlight_off_status" id="0x01040ba8" />  -> const v8: 1040ba8
<public type="drawable" name="tw_ic_lock_flashlight_on" id="0x01080b5c" />  -> const v4: 1080b5c
<public type="drawable" name="tw_ic_lock_flashlight_off" id="0x01080b5b" />  -> const v5: 1080b5b
<public type="drawable" name="tw_ic_lock_screenshot" id="0x01080b5d" />  -> const v3: 1080b5d



Code:



        iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;


        new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$Flashlight;

        const v4, 0x1080b5c

        const v5, 0x1080b5b

        const v6, 0x1040ba6

        const v7, 0x1040ba7

        const v8, 0x1040ba8

        move-object/from16 v3, p0

        invoke-direct/range {v2 .. v8}, Lcom/android/internal/policy/impl/GlobalActions$Flashlight;-><init>(Lcom/android/internal/policy/impl/GlobalActions;IIIII)V

        move-object/from16 v0, p0

        iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlight:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

        new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$Screenshot;

        const v3, 0x1080b5d

        const v4, 0x1040ba5

        move-object/from16 v0, p0

        invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$Screenshot;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

        move-object/from16 v0, p0

        iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mScreenshot:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;


Search for:

Code:


const/16 v2, 0x100

Add like following:

Code:


    const/16 v2, 0x10

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mDataModeToggle:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

    move-object/from16 v0, p0

    iget-object v4, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    const/4 v5, 0x1

    move-object/from16 v0, p0

    invoke-direct {v0, v2, v3, v4, v5}, Lcom/android/internal/policy/impl/GlobalActions;->addDialogItemsIfEnabled(ILcom/android/internal/policy/impl/GlobalActions$Action;Ljava/util/ArrayList;Z)Z


  .line 1229
    const/16 v2, 0x20

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mAirplaneModeOn:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

    move-object/from16 v0, p0

    iget-object v4, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    const/4 v5, 0x1

    move-object/from16 v0, p0

    invoke-direct {v0, v2, v3, v4, v5}, Lcom/android/internal/policy/impl/GlobalActions;->addDialogItemsIfEnabled(ILcom/android/internal/policy/impl/GlobalActions$Action;Ljava/util/ArrayList;Z)Z

    .line 1230
    const/16 v2, 0x40

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;

    move-object/from16 v0, p0

    iget-object v4, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    const/4 v5, 0x1

    move-object/from16 v0, p0

    invoke-direct {v0, v2, v3, v4, v5}, Lcom/android/internal/policy/impl/GlobalActions;->addDialogItemsIfEnabled(ILcom/android/internal/policy/impl/GlobalActions$Action;Ljava/util/ArrayList;Z)Z


Search for:

Code:


const-string v2, "emergencymode"

Match 2 results, mark the line with:

Code:


    :cond_2b6
    const-string v2, "emergencymode"


Add like following:

Code:


  :cond_2b6
    const-string v2, "emergencymode"


    invoke-virtual {v2, v9}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2
       
    if-eqz v2, :cond_91

    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mEmergency:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

    invoke-virtual {v2, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    goto :goto_24b

    :cond_91
    const-string v2, "flashlight"

    invoke-virtual {v2, v9}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-eqz v2, :cond_92

    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlight:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

    invoke-virtual {v2, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    goto :goto_24b

    :cond_92
    const-string v2, "screenshot"

    invoke-virtual {v2, v9}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-eqz v2, :cond_2ca

    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mScreenshot:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;

    invoke-virtual {v2, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    goto :goto_24b

    .line 1291
    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mEmergency:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

    invoke-virtual {v2, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    goto :goto_24b


    .line 1292
    :cond_2ca
    const-string v2, "silent"


Search for:

Code:


.method private prepareDialog()V

Add to above like following:

Code:


.method private getTorchStatus()Z
        .locals 4

        .prologue
        const/4 v0, 0x0

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

        invoke-virtual {v1}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

        move-result-object v1

        const-string v2, "torch_light"

        const/4 v3, -0x2

        invoke-static {v1, v2, v0, v3}, Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I

        move-result v1

        if-eqz v1, :cond_0

        const/4 v0, 0x1

        :cond_0
        return v0
.end method


.method private prepareDialog()V


Add to bottom like following:

Code:


.method private prepareDialog()V
    .registers 8

       
        invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getTorchStatus()Z

        move-result v1

        if-eqz v1, :cond_20

        sget-object v4, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;->On:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

        iput-object v4, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlightState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

        goto :cond_21

        :cond_20
        sget-object v4, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;->Off:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

        iput-object v4, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlightState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

        goto :cond_21

        :cond_21


Search for:

Code:


const-string v4, "content://com.sec.knox.provider2/KnoxCustomManagerService1"

Add to above like following:

Code:


iget-object v4, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlight:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;

        iget-object v5, p0, Lcom/android/internal/policy/impl/GlobalActions;->mFlashlightState:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;

        invoke-virtual {v4, v5}, Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;->updateState(Lcom/android/internal/policy/impl/GlobalActions$ToggleAction$State;)V


    const-string v4, "content://com.sec.knox.provider2/KnoxCustomManagerService1"


Copy all smali files in andorid.policy.jar GlobalMenu_darkera13_samsungviet.vn.zip to /smali/com/android/internal/policy/impl and Compile the android.policy.jar
4. Now you'd have unsignedframework-res.apk mod_android.policy.jar. Rename them to framework-res.apk and android.policy.jar. Put it in CWM flashable zip and flash with TWRP or Philz.

LRX22C.I9500XXUHOAA Modded file: Download










Aucun commentaire:

Enregistrer un commentaire