Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

[REF] How to add Reboot to power menu (updated 10/21/2010)

OP untermensch

17th October 2010, 11:14 PM   |  #1  
untermensch's Avatar
OP Senior Member
Flag Portland
Thanks Meter: 618
 
480 posts
Join Date:Joined: Apr 2009
this is the final method that will add reboot,recovery and download options
to the power menu updated 10/21/2010

================================================== ==========
Step 1.

the first thing we need to do is add string and image resources to framwork-res
for this example I am using a stock JI6 ROM your resource id's will be different
if on another ROM

use apk_manager to decompile framework-res

open "values\strings.xml" and add our string resources
Code:
<string name="reboot_recovery">Recovery</string>
<string name="reboot_download">Download</string>
<string name="reboot">Reboot</string>
save and close

open "values\public.xml" and assign our strings resource id's

scroll until you get to the end of the "<public type="string"" id list
note the id of the last string, in this example it is "10403c2" sometimes
the id's are out of order so search for "10403c2 + 1" or "10403c3"
if the next id is unused then we can start assigning id's to the strings
we added.
Code:
<public type="string" name="reboot_recovery" id="0x010403c3" />
<public type="string" name="reboot_download" id="0x010403c4" />
<public type="string" name="reboot" id="0x010403c5" />
now is a good time to add the image resources so add your icons to
"res\drawable-hdpi"
and assign id's to them the same way we did for the strings
in this example, using the example icons in the zip file I had
Code:
<public type="drawable" name="reboot" id="0x010803aa" />
<public type="drawable" name="recovery" id="0x010803ab" />
<public type="drawable" name="download" id="0x010803ac" />
save and close

now framework-res has the resources needed for this mod use
apk_manager to compile.

================================================== ==========
Step 2.

next we need to modify Samsung's shutdown method to accept 3 more options
so decompile framework and open "com\android\internal\app\ShutdownThread.smali "

since we are going to pass an integer to ShutdownThread and then evaluate
that integer when the code runs we have to have a spot for the integer so
add this to line 37
Code:
.field public static mReboot:I
then in method run at line 1463 add this code before "invoke-static {}, Landroid/os/Power;->shutdown()V"
Code:
sget v1, Lcom/android/internal/app/ShutdownThread;->mReboot:I
	
const/4 v2, 0x1
	
if-eq v1, v2, :reboot
	
const/4 v2, 0x2
	
if-eq v1, v2, :rebootRecovery
	
const/4 v2, 0x3
	
if-eq v1, v2, :rebootDownload
then after this code on about line 1477
Code:
.line 531
invoke-static {}, Landroid/os/Power;->shutdown()V

.line 532
return-void
add this code
Code:
:reboot
	
const-string v4, "now"
	
invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

return-void
	
:rebootRecovery
	
const-string v4, "recovery"
	
invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

return-void
	
:rebootDownload
	
const-string v4, "download"
	
invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

return-void
save and close

compile framework

================================================== ==========
Step 3.

now we are going to add the extra options to the power menu

decompile android.policy

open "com\android\internal\policy\impl\GlobalActions.sm ali"

the first thing that we need to do is increase the array length by 3
so in method createDialog on line 431 change this
Code:
const/4 v0, 0x3

new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
to this
Code:
const/4 v0, 0x6

new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
now add the new menu items this is where the resource id's that we added
to framework-res com into play so on line 457 after "aput-object v2, v0, v1"
add this code
Code:
    const/4 v1, 0x3

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

    const v3, 0x10803aa # reboot icon resource id

    const v4, 0x10403c5 # reboot string resource id 

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

    aput-object v2, v0, v1

    const/4 v1, 0x4

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

    const v3, 0x10803ab # recovery icon resource id

    const v4, 0x10403c3 # recovery string resource id

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

    aput-object v2, v0, v1

    const/4 v1, 0x5

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

    const v3, 0x10803ac # download icon resource id

    const v4, 0x10403c4 # download string resource id

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

    aput-object v2, v0, v1
make sure to change the resource id's to match what you added to to framework-res

save and close

next add the code that runs when the menu item is pressed

copy GlobalActions$3.smali and name it GlobalActions$7.smali
open GlobalActions$7 and replace all instances of GlobalActions$3
with GlobalActions$7 then add this code to line 52 before
"invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V"
Code:
const/4 v2, 0x1
	
sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
save and close

copy GlobalActions$3.smali and name it GlobalActions$8.smali
open GlobalActions$8 and replace all instances of GlobalActions$3
with GlobalActions$8 then add this code to line 52 before
"invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V"
Code:
const/4 v2, 0x2
	
sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
save and close

copy GlobalActions$3.smali and name it GlobalActions$9.smali
open GlobalActions$9 and replace all instances of GlobalActions$3
with GlobalActions$9 then add this code to line 52 before
"invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V"
Code:
const/4 v2, 0x3
	
sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
save and close

compile android.policy

done test on the phone.

flash the attached update.zip with the stock updater.
Attached Thumbnails
Click image for larger version

Name:	device.jpg
Views:	18498
Size:	28.0 KB
ID:	424006  
Attached Files
File Type: zip JI6_stock.zip - [Click for QR Code] (6.47 MB, 4574 views)
File Type: zip JI6_deodex.zip - [Click for QR Code] (6.41 MB, 4568 views)
File Type: zip powermenu_final.zip - [Click for QR Code] (22.8 KB, 8713 views)
Last edited by untermensch; 11th February 2011 at 12:15 AM. Reason: correct "res\values\strings.xml" should be \values\strings.xml ditto for public.xml
The Following 68 Users Say Thank You to untermensch For This Useful Post: [ View ]
17th October 2010, 11:18 PM   |  #2  
Member
Flag San Diego
Thanks Meter: 2
 
60 posts
Join Date:Joined: Aug 2010
More
Anyway to get this in a flashable zip? I don't know how to decompile files
The Following User Says Thank You to BabyBoi.JN For This Useful Post: [ View ]
17th October 2010, 11:27 PM   |  #3  
Member
Flag usa
Thanks Meter: 0
 
90 posts
Join Date:Joined: Jul 2006
More
Quote:
Originally Posted by BabyBoi.JN

Anyway to get this in a flashable zip? I don't know how to decompile files

bump Bump bump please
17th October 2010, 11:29 PM   |  #4  
blackerwater's Avatar
Senior Member
Flag Seattle
Thanks Meter: 52
 
857 posts
Join Date:Joined: Apr 2007
Donate to Me
More
Nice

Sent from my vibrant
17th October 2010, 11:29 PM   |  #5  
b0ricuaguerrero's Avatar
Senior Member
Flag brooklyn, N.Y
Thanks Meter: 161
 
484 posts
Join Date:Joined: Sep 2007
Donate to Me
More
Quote:
Originally Posted by BabyBoi.JN

Anyway to get this in a flashable zip? I don't know how to decompile files

I second that. I miss that option
17th October 2010, 11:30 PM   |  #6  
Junior Member
Thanks Meter: 0
 
18 posts
Join Date:Joined: Sep 2010
More
where is policy file
how to decompile
i use ubuntu
thx

Sent from my SGH-T959 using XDA App
17th October 2010, 11:30 PM   |  #7  
Senior Member
Flag Georgia
Thanks Meter: 118
 
608 posts
Join Date:Joined: Jul 2010
More
sounds like a great add-in if could be made flashable
17th October 2010, 11:37 PM   |  #8  
daddysays's Avatar
Senior Member
Amesbury, MA
Thanks Meter: 10
 
383 posts
Join Date:Joined: Jul 2010
More
Quote:
Originally Posted by adm1jtg

sounds like a great add-in if could be made flashable

Either that or a how to for dummies version

Sent from Vibrant Frankin Twiz Update3 JI2 modem.bin jac kernel with voodoo lagfix on XDA app with no fc's FINALLY!
17th October 2010, 11:39 PM   |  #9  
Member
Flag San Diego
Thanks Meter: 2
 
60 posts
Join Date:Joined: Aug 2010
More
Quote:
Originally Posted by daddysays

Either that or a how to for dummies version!

EXACTLY!!! That's what I need LOL
17th October 2010, 11:39 PM   |  #10  
s0niqu3's Avatar
Senior Member
Thanks Meter: 389
 
716 posts
Join Date:Joined: Feb 2005
Donate to Me
More
Quote:
Originally Posted by untermensch

someone asked for this so here it is.

decompile android.policy

make a copy of GlobalActions$3.smali and name it to GlobalActions$7.smali open GlobalActions$7.smali

and replace all instances of GlobalActions$3 with GlobalActions$7

replace method onPress with this

Code:
.method public onPress()V
    .registers 3

    const-string v0, "Reboot Now"

    invoke-static {v0}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

    return-void
.end method
save and close

now open GlobalActions.smali

and in method createDialog

the first thing that we need to do is increase the array length by 1 so find this
Code:
const/4 v0, 0x3

new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
and change to
Code:
const/4 v0, 0x4

new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
next we add the new menu item so on line 457 we add this next bit of code after "aput-object v2, v0, v1"
Code:
const/4 v1, 0x3 # position in the menu array

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

const v3, 0x1080030  # power icon

const v4, 0x10402af  # reboot string

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

aput-object v2, v0, v1
framework-res already has a string for reboot so no modifications are needed to framework-res

save and close then compile android.policy

Hi,

Thanks so much for this, absolutely fantastic work like always!

For anyone that doesn't know how to decompile/compile apk files search for either APK Manager, or smali/baksmali tutorial/help/etc., it should help you out greatly.

And for those that want a flashable .zip, well, here you go, BUT, I'm lazy, so it requires some conditions:

1) You use a rom based on JI6 that's fully deodexed
2) you have previously flashed (or your custom rom included) the epic/puzzle lockscreen mod (also from untermensch)
3) You disable voodoo (if you use it) prior to flashing since this zip attempts to wipe your dalvik-cache


That said, zip should flash fine from clockwork, and all it does is replace your android.policy.jar with one pre-modded for lockscreen & reboot option support, and it wipes your dalvik-cache since that's the safest thing to do after applying any mod, period.

Cheers, =)
Attached Files
File Type: zip JI6_lockscreen_mod_REBOOT_menu_option.zip - [Click for QR Code] (144.8 KB, 1558 views)

The Following 3 Users Say Thank You to s0niqu3 For This Useful Post: [ View ]
Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes