[guide][jb][3-way] easily enable extended power menu for mtk devices

Did you find this guide useful and easy

  • yeah

    Votes: 1 100.0%
  • somewhat ok

    Votes: 0 0.0%

  • Total voters
    1
  • Poll closed .
Search This thread

pavan kr

Senior Member
Aug 24, 2013
76
65
Banglore
Hello Everyone ,


In this guide i'll show u how to add Reboot and Recovery option to power menu

There is lots of Guides on how to add recovery option to power menu but none worked perfectly on my device(MTK)

so i found a new way , in which we need not to find proper globalaction files



Requirements :

apktool
Notepad++
android.policy.jar
framework-res.apk
Time and Patience :)

Part-1

Decompile Your framework-res.apk and navigate to - res/value/strings.xml

add these lines at the end.

Code:
<string name="reboot_text">Reboot</string>
<string name="recovery_text">Recovery</string>

Like this
Gj58eDL.png


and add the attached pngs to - res/drawable-hdpi/ and compile the apk

again decompile the modded apk and open res/values/public.xml

Part-2

Now Decompile your "android.policy.jar" and add the attached files to - "android.policy.jar.out\smali\com\android\internal\policy\impl"

Now open GlobalActions.smali and find this method

Code:
.method private createDialog()Lcom/android/internal/policy/impl/GlobalActions$GlobalActionsDialog;

Below that you will see

Code:
.locals 11

change it to

Code:
.locals [COLOR="Red"]12[/COLOR]

Now find

Code:
.prologue

Below that paste this

Code:
const [COLOR="Red"]v11[/COLOR], 0x1080030        <------------ Replace the id with ic_lock_power_off (power off drawable) in the opened public.xml

Now Find this

Code:
new-instance [COLOR="Purple"]v1[/COLOR], Lcom/android/internal/policy/impl/GlobalActions$2;

const [COLOR="DarkGreen"]v2[/COLOR], 0x10400e7

change the id 0x10400e7 with the new id in public.xml

Code:
<public type="string" name="global_action_power_off"

now below that you will see

Code:
const [COLOR="Magenta"]v3[/COLOR], 0x10400e7

now delate the above line and paste this below

Code:
invoke-direct {v1, p0, v11, v2}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

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

    .line 317
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$98;

    const [COLOR="Red"]v2[/COLOR], 0x108061a  <----------id of <public type="drawable" name="ic_lock_reboot" 

    const [COLOR="Magenta"]v3[/COLOR], 0x104054f  <----------id of <public type="string" name="reboot_text" 

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

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

    .line 327
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;

    const [COLOR="Red"]v2[/COLOR], 0x1080619  <---------- id of  <public type="drawable" name="ic_lock_recovery" 

    const [COLOR="Magenta"]v3[/COLOR], 0x1040550  <-----------id of  <public type="string" name="recovery_text"

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

Replace the above ids with the id in your public.xml

Before :
Code:
.line 281
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V

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

    .line 284
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    [COLOR="RoyalBlue"]new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;

    const v2, 0x1080030

    const v3, 0x10400e7

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

    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
[/COLOR]
    .line 309
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

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

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

    .line 312
After :

Code:
.line 281
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V

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

    .line 284
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;

   [COLOR="Blue"] const v2, 0x10400e7

    invoke-direct {v1, p0, v11, v2}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

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

    .line 317
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$98;

    const v2, 0x108061a

    const v3, 0x104054f

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

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

    .line 327
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;

    const v2, 0x1080619

    const v3, 0x1040550

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

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

   [/COLOR] .line 309
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;

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

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

Now compile and flash both the files

I have attached my GlobalActions.smali for comparision just change the extension from .zip to .smali

Result :

sjzVq61.png

Hints :

1 . While Replacing the id from public.xml replace only last 7 digits

like this

QuUtSyu.png


2. keep track of registers (like v1 v2 v11 etc) and .Line numbers should be unique

3. Register values (like 0x108061a) will be Different for Different roms

I've Tested this guide on 3 different roms and it is working fine without any errors

If u Have any Problems Post here i'll try my best to help you

Credits/ Thanks
SuperDroidBond

Adi Aisiteru Reborn

Learnt many things from their guides ...
If you like my work Hit Thanks ..dont forget :) :)
 

Attachments

  • my_GlobalActions.zip
    55.3 KB · Views: 245
Mar 29, 2014
30
0
hello aweasome guide sir thanks alot
put can you give me a smali tool you used
the guide is aweasome realy want to do it thanks
i have done the tutorial and when i press and hold power volume it softreboots
so where is the problem
hope any one here helps me
 
Last edited:
Mar 29, 2014
30
0
working for my device Xperia C
after changing Const V3 with V2 that u said in the section of putting the line 317 and 327
u have to fix it more as things are going wrong cause thereis gona be amiss in the last line
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 5
    Hello Everyone ,


    In this guide i'll show u how to add Reboot and Recovery option to power menu

    There is lots of Guides on how to add recovery option to power menu but none worked perfectly on my device(MTK)

    so i found a new way , in which we need not to find proper globalaction files



    Requirements :

    apktool
    Notepad++
    android.policy.jar
    framework-res.apk
    Time and Patience :)

    Part-1

    Decompile Your framework-res.apk and navigate to - res/value/strings.xml

    add these lines at the end.

    Code:
    <string name="reboot_text">Reboot</string>
    <string name="recovery_text">Recovery</string>

    Like this
    Gj58eDL.png


    and add the attached pngs to - res/drawable-hdpi/ and compile the apk

    again decompile the modded apk and open res/values/public.xml

    Part-2

    Now Decompile your "android.policy.jar" and add the attached files to - "android.policy.jar.out\smali\com\android\internal\policy\impl"

    Now open GlobalActions.smali and find this method

    Code:
    .method private createDialog()Lcom/android/internal/policy/impl/GlobalActions$GlobalActionsDialog;

    Below that you will see

    Code:
    .locals 11

    change it to

    Code:
    .locals [COLOR="Red"]12[/COLOR]

    Now find

    Code:
    .prologue

    Below that paste this

    Code:
    const [COLOR="Red"]v11[/COLOR], 0x1080030        <------------ Replace the id with ic_lock_power_off (power off drawable) in the opened public.xml

    Now Find this

    Code:
    new-instance [COLOR="Purple"]v1[/COLOR], Lcom/android/internal/policy/impl/GlobalActions$2;
    
    const [COLOR="DarkGreen"]v2[/COLOR], 0x10400e7

    change the id 0x10400e7 with the new id in public.xml

    Code:
    <public type="string" name="global_action_power_off"

    now below that you will see

    Code:
    const [COLOR="Magenta"]v3[/COLOR], 0x10400e7

    now delate the above line and paste this below

    Code:
    invoke-direct {v1, p0, v11, v2}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
        .line 317
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$98;
    
        const [COLOR="Red"]v2[/COLOR], 0x108061a  <----------id of <public type="drawable" name="ic_lock_reboot" 
    
        const [COLOR="Magenta"]v3[/COLOR], 0x104054f  <----------id of <public type="string" name="reboot_text" 
    
        invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$98;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
        .line 327
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
    
        const [COLOR="Red"]v2[/COLOR], 0x1080619  <---------- id of  <public type="drawable" name="ic_lock_recovery" 
    
        const [COLOR="Magenta"]v3[/COLOR], 0x1040550  <-----------id of  <public type="string" name="recovery_text"
    
        invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

    Replace the above ids with the id in your public.xml

    Before :
    Code:
    .line 281
        new-instance v0, Ljava/util/ArrayList;
    
        invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
    
        iput-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        .line 284
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        [COLOR="RoyalBlue"]new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;
    
        const v2, 0x1080030
    
        const v3, 0x10400e7
    
        invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    [/COLOR]
        .line 309
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        iget-object v1, p0, Lcom/android/internal/policy/impl/GlobalActions;->mAirplaneModeOn:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
        .line 312
    After :

    Code:
    .line 281
        new-instance v0, Ljava/util/ArrayList;
    
        invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
    
        iput-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        .line 284
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;
    
       [COLOR="Blue"] const v2, 0x10400e7
    
        invoke-direct {v1, p0, v11, v2}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
        .line 317
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$98;
    
        const v2, 0x108061a
    
        const v3, 0x104054f
    
        invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$98;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
        .line 327
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
    
        const v2, 0x1080619
    
        const v3, 0x1040550
    
        invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    
       [/COLOR] .line 309
        iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
    
        iget-object v1, p0, Lcom/android/internal/policy/impl/GlobalActions;->mAirplaneModeOn:Lcom/android/internal/policy/impl/GlobalActions$ToggleAction;
    
        invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    Now compile and flash both the files

    I have attached my GlobalActions.smali for comparision just change the extension from .zip to .smali

    Result :

    sjzVq61.png

    Hints :

    1 . While Replacing the id from public.xml replace only last 7 digits

    like this

    QuUtSyu.png


    2. keep track of registers (like v1 v2 v11 etc) and .Line numbers should be unique

    3. Register values (like 0x108061a) will be Different for Different roms

    I've Tested this guide on 3 different roms and it is working fine without any errors

    If u Have any Problems Post here i'll try my best to help you

    Credits/ Thanks
    SuperDroidBond

    Adi Aisiteru Reborn

    Learnt many things from their guides ...
    If you like my work Hit Thanks ..dont forget :) :)
    1
    1
    +1

    reserved ..