[Q] DEV REQUEST: In-Call Screen Rotation - AT&T Samsung Galaxy Note II

I've scoured these forums and come up with nothing so far on this (other than apps that don't work!). Here's what I'm looking to do:
I drive FREQUENTLY for work and have my ATT Note 2 in a dash mount in landscape position. I would like my in-call screen to rotate to landscape, and actually be able to see my Caller ID photo as well as the standard dial pad.
I've tried Ultimate Rotation Control (and several other apps), and they DO rotate the screen, but the buttons are abnormally large and cover 90% of the screen. This covers up caller id as well as the dialer pad if you try to use it.
I found a mod and how-to for the S2 (links below) that does EXACTLY what I want, so I'm pretty sure someone with coding experience can figure this out. I can't figure out how to decompile-recompile my SecPhone.apk without errors, so I can't test this myself.
Is there anyone who can try to make this happen? If so, I'd be happy to make a donation for your time/effort. Thanks!
http://forum.xda-developers.com/showthread.php?t=2018583 - Mod for S2
http://forum.xda-developers.com/showthread.php?t=1705215 - How to for S2

Mods, is it possible for one of you to move this to the dev section? I feel like this is a pretty significant issue and would like to get the attention of someone who can actually sit down and decipher the proper code settings for this. I've tried doing it myself, but can't get the apk to recompile without errors.

Bump

Ultimate Rotation Control. Lets you auto rotate per app, as well as lock screen. I set the phone app to auto rotate and it does it in landscape mode.

BlackPhantomX said:
Ultimate Rotation Control. Lets you auto rotate per app, as well as lock screen. I set the phone app to auto rotate and it does it in landscape mode.
Click to expand...
Click to collapse
I appreciate the reply, but please read OP. Ultimate Rotation Control and all other rotation mods from the app store do NOT work properly. Yes, they will rotate the screen, but for some reason they force the buttons to take up 90% of the screen covering the dial pad (if I try to open it) and any caller ID information / photos.
I'm looking for someone who can make some coding changes to secphone.apk to fix the problem. See OP for examples done on the S2. I've tried this myself and can't figure it out, since I don't really know what I'm doing.

Any other feedback on this? I can't be the only one that this bugs the crap out of...

BUMP

obviously, none of the devs are interested....and, I know that has not been possible on several of the Android phones I have had over the last 5 years..
I guess you will either have to live with this, or learn about development, and try it yourself..

Just seems like a relatively simple fix since the legwork was already done for the GS2. I have tried doing this on my own, but keep running into issues when trying to re-compile.

Did you try deleting these 3 directories from the directory \secphone\res:
values-es
values-es-rUS
values-it
I did not have any compile issues when I compiled with Beans Build 1o
---------- Post added at 02:29 PM ---------- Previous post was at 02:24 PM ----------
MothChewMoth said:
Just seems like a relatively simple fix since the legwork was already done for the GS2. I have tried doing this on my own, but keep running into issues when trying to re-compile.
Click to expand...
Click to collapse
I have been working with MothChewMoth on the side and came up with the below:
Making the Note 2 TW Dialer Rotate based on phone orientation
First Note: I am not an android developer or a developer at all for that matter. I make no warranty for these changes and do so at your own risk. I have been running this for 2 days on my Verizon Note 2 running Beans Build 10 with no issues.
Thanks to Mirko ddd for posting how to do this on the Galaxy S2 which gave me a start for the Note 2
The instructions below were built off of CleanRom 4.5 ACE as that is what MothChewMoth was running.
DeCompile the SecPhone.apk and go to
apk and go to smali/com/android/phone/
You will need to edit two files:
InCallScreen.smali (this allows for rotation changes while on the phone)
CallCard.smali (this allows for rotation changes when a call is coming in)
Open InCallScreen.smali with a text editor and find the code:
Code:
.line 7185
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_c
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v0, v1, :cond_c
.line 7187
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
Remove the 2 lines:
Code:
If-eqz v0, :cond_c
Code:
If-ne v0, v1, :cond_c
Your new code should look like:
Code:
.line 7185
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v0
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
.line 7187
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
Save InCallScreen.smali
Open CallCard.smali with a text editor and find the code:
Code:
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_4
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v2, v1, :cond_4
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
Remove the 2 lines:
Code:
If-eqz v2, :cond_4
Code:
If-ne v2, v1, :cond_4
Your new code should look like:
Code:
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v2
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
Save the CallCard.smali
Re-Compile your secphone.apk
Replace your secphone.apk in /system/app and make sure its permissions are rw-r-r
Reboot your phone and enjoy
Second Note: To get past the CleanRom compile errors I ended up deleting these 3 directories from the directory \secphone\res:
values-es
values-es-rUS
values-it
I did not have any compile issues with the Beans Build 10 version of the same fix

Sounds like this was fixed according the forum over at ScottsRoms. Can you post the compiled, correct apk for landscape mode in call?

shaxs said:
Sounds like this was fixed according the forum over at ScottsRoms. Can you post the compiled, correct apk for landscape mode in call?
Click to expand...
Click to collapse
The attached files are built from the following Roms:
Beans Build 10
CleanRom 4.5 ACE (sorry for the 7zip compression format, zip wouldn't compress the file small enough)
I AM NOT A DEVELOPER, just a guy who hacked around until he got things working so please install this at your own risk.
To install:
1) download the proper file
2) Unzip and extract SecPhone.apk
3) Move your current SecPhone.apk from /system/app to a backup location on your phone/sdcard
4) Copy your new SecPhone.apk to /system/app
5) Change permissions on SecPhone.apk to rw-r-r
6) Reboot your phone
View attachment SecPhoneBeans.zip
View attachment SecPhoneCleanRom.7z

samuri28 said:
Did you try deleting these 3 directories from the directory \secphone\res:
values-es
values-es-rUS
values-it
I did not have any compile issues when I compiled with Beans Build 1o
---------- Post added at 02:29 PM ---------- Previous post was at 02:24 PM ----------
I have been working with MothChewMoth on the side and came up with the below:
Making the Note 2 TW Dialer Rotate based on phone orientation
First Note: I am not an android developer or a developer at all for that matter. I make no warranty for these changes and do so at your own risk. I have been running this for 2 days on my Verizon Note 2 running Beans Build 10 with no issues.
Thanks to Mirko ddd for posting how to do this on the Galaxy S2 which gave me a start for the Note 2
The instructions below were built off of CleanRom 4.5 ACE as that is what MothChewMoth was running.
DeCompile the SecPhone.apk and go to
apk and go to smali/com/android/phone/
You will need to edit two files:
InCallScreen.smali (this allows for rotation changes while on the phone)
CallCard.smali (this allows for rotation changes when a call is coming in)
Open InCallScreen.smali with a text editor and find the code:
Code:
.line 7185
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_c
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v0, v1, :cond_c
.line 7187
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
Remove the 2 lines:
Code:
If-eqz v0, :cond_c
Code:
If-ne v0, v1, :cond_c
Your new code should look like:
Code:
.line 7185
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v0
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
.line 7187
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
Save InCallScreen.smali
Open CallCard.smali with a text editor and find the code:
Code:
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_4
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v2, v1, :cond_4
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
Remove the 2 lines:
Code:
If-eqz v2, :cond_4
Code:
If-ne v2, v1, :cond_4
Your new code should look like:
Code:
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/String;)Z
move-result v2
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
Save the CallCard.smali
Re-Compile your secphone.apk
Replace your secphone.apk in /system/app and make sure its permissions are rw-r-r
Reboot your phone and enjoy
Second Note: To get past the CleanRom compile errors I ended up deleting these 3 directories from the directory \secphone\res:
values-es
values-es-rUS
values-it
I did not have any compile issues with the Beans Build 10 version of the same fix
Click to expand...
Click to collapse
I am very interested in this mod. I think it is very strange that there are no custom roms with this features integrated, because many people use their telephone as GPS in their car, like me.
I understand that it is necessary to modify SecPhone.apk of each rom. So, I am trying to decompile SecPhone.apk with the tools I downloaded from http://forum.xda-developers.com/showthread.php?t=1755243.
I extracted SecPhone.apk and framework-res.apk from the rom zip.
I installed framework-res.apk and when I try to decompile SecPhone.apk, it goes:
- Loading resource table.....
- Loaded....
- Decoding...
- Loading resource table from C:/...
Then, I get an error, which says Exception in thread "main" java.lang.OutOfMemory ...
So, I am stuck.
I get errors, but it somehow succeeded decompiling smalis, and I see the lines to delete. So, I really would like to decompile and recompile.
I have downloaded several different apktools, but some give an empty "SecPhone" folder. Maybe I am doing something wrong, but I don't know where my mistake is. Could you please give me some advice?

Succeeded !! but a problem!!
Hello, since my last post above, I have been trying to decompile SecPhone.apk, but none of apktools I tried worked for me. BUT, finally, with APK multi-Tool from the great post below, I was able to decompile and recompile SecPhone.apk.
http://forum.xda-developers.com/showthread.php?t=1310151
I installed framework-res.apk and twframework-res.apk before working with Multi-Tool.
For compiling, I did not chose to keep the original files. (I said "n"). And, after compiling, I copied androidmanifest.xml from the original SecPhone.apk into the compiled apk, replacing the new one. (It did not work the 1st time I did not copy this file.) Certainly, there are other and better ways, but anyway I have a working SecPhone.apk.
However, there is a problem. When I make a call in landscape, I have no buttons on the right side as in the attached photo. (When I make a call in portrait, I have no buttons, neither.) But, I have buttons when I receive a call in landscape and in portrait.
I deleted the 2 lines in each smali (total 4 lines), and I did not change anything else. I am very happy I have a phone, which works in landscape, too, but I would like to have the buttons back. Can you give me some advice?
Thank you for the great thread!!
PS: I am on Scamus V4.

3to4 said:
Hello, since my last post above, I have been trying to decompile SecPhone.apk, but none of apktools I tried worked for me. BUT, finally, with APK multi-Tool from the great post below, I was able to decompile and recompile SecPhone.apk.
http://forum.xda-developers.com/showthread.php?t=1310151
I installed framework-res.apk and twframework-res.apk before working with Multi-Tool.
For compiling, I did not chose to keep the original files. (I said "n"). And, after compiling, I copied androidmanifest.xml from the original SecPhone.apk into the compiled apk, replacing the new one. (It did not work the 1st time I did not copy this file.) Certainly, there are other and better ways, but anyway I have a working SecPhone.apk.
However, there is a problem. When I make a call in landscape, I have no buttons on the right side as in the attached photo. (When I make a call in portrait, I have no buttons, neither.) But, I have buttons when I receive a call in landscape and in portrait.
I deleted the 2 lines in each smali (total 4 lines), and I did not change anything else. I am very happy I have a phone, which works in landscape, too, but I would like to have the buttons back. Can you give me some advice?
Thank you for the great thread!!
PS: I am on Scamus V4.
Click to expand...
Click to collapse
Can you show the code snippet before you made your changes? and highlight the lines you removed?
Also I ended up using the procedures listed here to finally get my de-compile/re-compile to work:
http://forum.xda-developers.com/showthread.php?t=1809649

samuri28 said:
Can you show the code snippet before you made your changes? and highlight the lines you removed?
Also I ended up using the procedures listed here to finally get my de-compile/re-compile to work:
http://forum.xda-developers.com/showthread.php?t=1809649
Click to expand...
Click to collapse
Thank you very much for your reply. Finally, I deleted another line in each file, and it seems to be working now.
I need to use the phone a little while to see if there is really no problem like freezing, but I got my buttons back.
The lines I deleted are in red.
InCallScreen.smali:
.line 7147
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/StringZ
move-result v0
if-eqz v0, :cond_c
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v0, v1, :cond_c
.line 7149
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
CallCard.smali:
.line 719
if-eqz v0, :cond_4
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/StringZ
move-result v2
if-eqz v2, :cond_4
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v2, v1, :cond_4
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
That's all.
Thank you again for your posts.

3to4 said:
Thank you very much for your reply. Finally, I deleted another line in each file, and it seems to be working now.
I need to use the phone a little while to see if there is really no problem like freezing, but I got my buttons back.
The lines I deleted are in red.
InCallScreen.smali:
.line 7147
:cond_5
sget-boolean v0, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v0, :cond_6
const-string v0, "hardkeyboardhidden_no"
invoke-static {v0}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/StringZ
move-result v0
if-eqz v0, :cond_c
iget v0, p1, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v0, v1, :cond_c
.line 7149
:cond_6
iget v2, p1, Landroid/content/res/Configuration;->orientation:I
CallCard.smali:
.line 719
if-eqz v0, :cond_4
.line 720
sget-boolean v2, Lcom/android/phone/PhoneApp;->mIsDockConnected:Z
if-nez v2, :cond_0
const-string v2, "hardkeyboardhidden_no"
invoke-static {v2}, Lcom/android/phone/PhoneFeature;->hasFeature(Ljava/lang/StringZ
move-result v2
if-eqz v2, :cond_4
iget v2, v0, Landroid/content/res/Configuration;->hardKeyboardHidden:I
if-ne v2, v1, :cond_4
.line 722
:cond_0
iget v0, v0, Landroid/content/res/Configuration;->orientation:I
That's all.
Thank you again for your posts.
Click to expand...
Click to collapse
Was it this line that you also deleted?
if-nez v0, :cond_6
I wonder if this is a ROM specific change as my secPhone.apk still has that line in it.

samuri28 said:
Was it this line that you also deleted?
if-nez v0, :cond_6
I wonder if this is a ROM specific change as my secPhone.apk still has that line in it.
Click to expand...
Click to collapse
Yes. This may be rom specific, but as I am no programmer, I cannot tell.
The two additional lines I deleted are;
1) if-nez v0, :cond_6 in InCallScreen.smali
2) if-nez v2, :cond_0 in CallCard.smali.
What I don't really understand is this feature (landscape in-call screen) is integrated in android, but disabled somehow, and you have to hack it to profit from the feature!!

3to4 said:
Yes. This may be rom specific, but as I am no programmer, I cannot tell.
The two additional lines I deleted are;
1) if-nez v0, :cond_6 in InCallScreen.smali
2) if-nez v2, :cond_0 in CallCard.smali.
What I don't really understand is this feature (landscape in-call screen) is integrated in android, but disabled somehow, and you have to hack it to profit from the feature!!
Click to expand...
Click to collapse
From the research I did trying to figure out how to get Landscape In-Call it looks like Samsung for some reason intentionally disabled Docking Mode on its phones and in turn disable auto rotation when in a dock (we forced the phone to auto-rotate regardless of in a dock). However in AOSP this feature is a setting within the phone settings menu, so I am assuming another Samsung intentional exclusion.

Hello There
I have P6200 with PAC-Man milestone1 (JB 4.2.1) , and I'm tired to make InCall in Portrait mode post here (http://forum.xda-developers.com/showthread.php?t=2544636)
I follow this post and I can't find SecPhone.apk
is there any help ???

Related

[FIX][HOWTO] Lockscreen loading Bug

This mod (JVU/JW4/JW5/JW6) fixes bug when battery is below 20 % in lockscreen displayed "charging %" instead of "Please connect charger".
HOWTO
1. Decompile android.policy.jar
For beginers here is a guide by pantrif13 : http://forum.xda-developers.com/show...1&postcount=16
2. Edit android.policy\smali\com\android\internal\policy\impl\ClockWidget.smali
Search
.method public setBatteryInfo()V
Change line:
Code:
invoke-virtual {v3}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->shouldShowBatteryInfo()Z
by
Code:
invoke-virtual {v3}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->shouldShowBatteryInfo1()Z
3. Edit android.policy\smali\com\android\internal\policy\impl\KeyguardUpdateMonitor.smali
Search
Code:
.line 360
new-instance v1, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor$3;
invoke-direct {v1, p0}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor$3;-><init>(Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;)V
invoke-virtual {p1, v1, v0}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
Add bellow
Code:
new-instance v1, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor$4;
invoke-direct {v1, p0}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor$4;-><init>(Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;)V
invoke-virtual {p1, v1, v0}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
And add to end of file
Code:
.method public shouldShowBatteryInfo1()Z
.locals 1
.prologue
.line 962
iget v0, p0, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->mBatteryStatus:I
invoke-direct {p0, v0}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->isPluggedIn(I)Z
move-result v0
if-nez v0, :cond_0
iget v0, p0, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->mBatteryLevel:I
invoke-direct {p0, v0}, Lcom/android/internal/policy/impl/KeyguardUpdateMonitor;->isBatteryLow(I)Z
move-result v0
if-eqz v0, :cond_1
:cond_0
const/4 v0, 0x1
:goto_0
return v0
:cond_1
const/4 v0, 0x0
goto :goto_0
.end method
4. Copy the file KeyguardUpdateMonitor$4.smali attached in "android.policy\smali\com\android\internal\policy\impl\" and recompile
Thanks, I hope to see your fix in some ROM now !
Sent from my GT-I9000 using XDA
.Slane. said:
Thanks, I hope to see your fix in some ROM now !
Sent from my GT-I9000 using XDA
Click to expand...
Click to collapse
S A U R O M - Projekt---> JW5/JW4/JVU/JW1/JVZ for I9000
Good news and good job. thanks
I'm just curious how ppl find something like that out. And what does the smileys mean?
What changes did you make to this fix in your jw6 rom?
Yes,jw6 aviable
Sent from my GT-I9000 using xda app-developers app
dark_knight35 said:
I'm just curious how ppl find something like that out. And what does the smileys mean?
Click to expand...
Click to collapse
The smileys ar ;/) (w/out "/" ) and the forum rules are the smileys are activated
Sent from my GT-I9000 using Tapatalk 2
Is there a chance for us with the lack of skills to get this as a flashable zip?
This bug is gone in 2.3.6 ZSJW4 for chinese market. I think it is the only version of JW...firmware that comes with this fixed.
Hey there lirik0.
I tried your guide so as to fix this bug for the Samsung Galaxy S Plus (i9001).
I have made all the changes to the files that you describe (with some differences on the 3rd - it was a different line number).
But i probably need a different attachment file to download and recompile.
Could you please help all the i9001 community to resolve this issue cause?
Thanks in advance!
PS: I have also attached our android.policy.jar from XXKQH ROM.

[MOD] [LIH/LJ1/LJ2/LJ4/LJ5/LK4/LKC deodex] back/menu long press kills foreground app

Thanks to Sorg, Poppuri, Pako, Wanam.
2 level reboot menu from Wanam also included.
The mod actually developed by sorg and implemented into poppuri ROM with 2 another mods. One of them is too complicated idnd changes whole logic of hard buttons behavior. I just separated it from another ones.
Warning:
Installing of this mod will:
1. Remove another hard keys related mods like volume long press etc.
2. Remove old TV effect.
I dislike this mods, so they are not implemented.
3. Replace power menu with one from WanamLite ROM.
If you need tis mods, please ask autors of mod or ROM for implementing this one or do it yourself.
v2 Update.
Always vibrate, also if nothing killed.
Kills launchers.
Excluded App list:
com.android.providers.applications
com.sec.android.app.clockpackage
com.sec.android.widgetapp.alarmclock
com.sec.phone
com.android.settings
com.android.defcontainer
com.android.contacts
com.sec.android.app.factorymode
v3 - Will not kill launchers, but always provide feedback
To implement into another ROM/file:
1. Decompile android.policy.jar (both from attachment and from your ROM).
2. Copy PhoneWindowManager$BackLongPress.smali into
\android.policy.jar.out\com\android\internal\policy\impl\
3. Merge changes from \android.policy.jar.out\com\android\internal\policy\impl\PhoneWindowManager.smali to your file.
You can use original file from LIH ROM to find differences.
4. Recompile.
hi, just flash the zip in cwm? Criskelo I LIH.?
You can.
Make backup first.
Better - ask Kriskello for implementing this mod.
It simple.
I hope that will work.
---------- Post added at 08:17 PM ---------- Previous post was at 08:13 PM ----------
So I already have and it seems fully functional, many thanks for your work, it's ok
Doesn't work in my custom LIH rom.
well i don.t have a notebook or a desktop system in the next few days,and i really like this feature...so can someone compile one for wanam 4.0 XXDLJ1?tx
Work in omega 29
Enviado desde mi GT-I9300 usando Tapatalk 2
Work on hyper light DLJ1 1.1.5
finally I don't need to install jkay
Tap talk killed now with kill back key
Envoyé depuis mon GT-I9300 avec Tapatalk
You may name my babies
Insert coin 2.0.0 XDLID. works perfectly, wanted this so long. if i could thousand thank i would
akelon said:
Work in omega 29
Enviado desde mi GT-I9300 usando Tapatalk 2
Click to expand...
Click to collapse
I tried on omega 29 and its not worked any solution will be appriciated. Thanks..
There is no differences in android.policy.jar between LIH and LJ1.
So, the mod should work on LJ1.
akelon said:
Work in omega 29
Enviado desde mi GT-I9300 usando Tapatalk 2
Click to expand...
Click to collapse
Have you recompiled it or just flashed it directly?
I am on Omega v29 and it didn't work after flashing. Could you please share the modded file? Thanks in advance.
tczhang said:
Have you recompiled it or just flashed it directly?
I am on Omega v29 and it didn't work after flashing. Could you please share the modded file? Thanks in advance.
Click to expand...
Click to collapse
Worked here on v29. Just flashed
Sent from my GT-I9300 using Xparent Green Tapatalk 2
d8389 said:
To implement into another ROM/file:
1. Decompile android.policy.jar (both from attachment and from your ROM).
2. Copy PhoneWindowManager$BackLongPress.smali into
\android.policy.jar.out\com\android\internal\policy\impl\
3. Merge changes from \android.policy.jar.out\com\android\internal\policy\impl\PhoneWindowManager.smali to your file.
You can use original file from LIH ROM to find differences.
4. Recompile.
Click to expand...
Click to collapse
Plz give us the guide about "the changes of PhoneWindowManager.smali"
androidphone2012 said:
Plz give us the guide about "the changes of PhoneWindowManager.smali"
Click to expand...
Click to collapse
You should add
Code:
.field private final mBackLongPress:Ljava/lang/Runnable;
.field public mBackLongPressed:I
somewhere in
# instance fields
---
Code:
new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$BackLongPress;
invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$BackLongPress;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;)V
iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
in
Code:
.method public constructor <init>()V
i do it in another similar group
---
in
Code:
.method public interceptKeyBeforeDispatching(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)J
I increased number of registers by 1 (not sure it's necessary)
and after something like
Code:
const-string v41, "RemoteException when showing recent apps"
move-object/from16 v0, v40
move-object/from16 v1, v41
invoke-static {v0, v1, v10}, Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
goto :goto_521
.line 3110
.end local v10 #e:Landroid/os/RemoteException;
:cond_532
add
Code:
const/16 v40, 0x4
move/from16 v0, v21
move/from16 v1, v40
if-ne v0, v1, :cond_569
.line 2281
if-eqz v9, :cond_556
if-nez v30, :cond_55f
move-object/from16 v0, p0
const v1, 0x0
iput v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPressed:I
if-nez v22, :cond_569
iget-object v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;
invoke-static {}, Landroid/view/ViewConfiguration;->getGlobalActionKeyTimeout()J
move-result-wide v2
const-wide/16 v4, 0x5
mul-long/2addr v2, v4
invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z
goto :goto_569
:cond_556
move-object/from16 v0, p0
iget-object v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;
invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
:cond_55f
move-object/from16 v0, p0
iget v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPressed:I
if-eqz v1, :cond_569
const-wide/16 v40, -0x1
goto/16 :goto_ad
:cond_569
:goto_569
check also for conflicting goto & cond
d8389 said:
You should add
Code:
.field private static final LONG_PRESS_TIMEOUT:I = 0x190
somewhere in
# static fields
---
Code:
.field private final mBackLongPress:Ljava/lang/Runnable;
.field public mBackLongPressed:I
somewhere in
# instance fields
---
Code:
new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$BackLongPress;
invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$BackLongPress;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;)V
iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
in
Code:
.method public constructor <init>()V
i do it in another similar group
---
in
Code:
.method public interceptKeyBeforeDispatching(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)J
I increased number of registers by 1 (not sure it's necessary)
and after something like
Code:
const-string v41, "RemoteException when showing recent apps"
move-object/from16 v0, v40
move-object/from16 v1, v41
invoke-static {v0, v1, v10}, Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
goto :goto_521
.line 3110
.end local v10 #e:Landroid/os/RemoteException;
:cond_532
add
Code:
const/16 v40, 0x4
move/from16 v0, v21
move/from16 v1, v40
if-ne v0, v1, :cond_569
.line 2281
if-eqz v9, :cond_556
if-nez v30, :cond_55f
move-object/from16 v0, p0
const v1, 0x0
iput v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPressed:I
if-nez v22, :cond_569
iget-object v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;
invoke-static {}, Landroid/view/ViewConfiguration;->getGlobalActionKeyTimeout()J
move-result-wide v2
const-wide/16 v4, 0x5
mul-long/2addr v2, v4
invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z
goto :goto_569
:cond_556
move-object/from16 v0, p0
iget-object v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPress:Ljava/lang/Runnable;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;
invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
:cond_55f
move-object/from16 v0, p0
iget v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mBackLongPressed:I
if-eqz v1, :cond_569
const-wide/16 v40, -0x1
goto/16 :goto_ad
:cond_569
:goto_569
check also for conflicting goto & cond
Click to expand...
Click to collapse
Thanks, but PhoneWindowManager.smali in Nexus S differs from SGS III Could you give me some tips?
d8389 said:
Thanks to Sorg, Poppuri, Pako, Wanam.
2 level reboot menu from Wanam also included.
The mod actually developed by sorg and implemented into poppuri ROM with 2 another mods. One of them is too complicated idnd changes whole logic of hard buttons behavior. I just separated it from another ones.
Click to expand...
Click to collapse
also working on CheckROM 5.5 DLIB!
@D8329,can you make Pin Code Unlock without pressing OK button mod too ?
works perfectly on foxhound 1.0

[HOW-TO][CWM]"Accurate" Data Icons for TMo-based stock roms

Howdy folks -
After numerous folks asked about having icons that showed the actual connection type on T-Mobile stock roms (here in particular) I decided to take a crack at figuring something out for my little concoction of a rom called Tweaked. While what is in Tweaked has a small difference from what I discuss here, the underlying changes are largely the same. What follows is a hopefully adequate guide for what I ended up doing - one that will hopefully allow others wanting to tinker on their own as opposed to use the tinkerings of others.
That being said, the original request was for 2 flashables - so I will post those here. In an attempt to make things as "painless" as possible (with pain being defined as "messes up my theme images"), the zips posted are vrtheme-style and will not change and images or xmls - just flash in recovery
[size=+1]Jedi Master 13[/size] STANDARD
Download md5 C7D3CD3550938F930AE343E591112F15
[size=+1]Jedi Master 13[/size] AOSP THEME BY FOREVERLOCO
Download md5 1E1CE78803D58BBECB7937174428AE7F
If you are more interested in taking a crack at doing the mod yourself - read on
Also - I should put out the disclaimer that I haven't tested these... so tread cautiously and make a backup before flashing!
Let me know if there are any issues.
[size=+1]How to do my particular twist on the data icon mod[/size]
Alright, first off this is NOT the only way to do things - it just happens to be the way I did it. This does not make it better/worse than other approaches - do what works for you. For example, if you are comfortable using apktool or one of the front-end ui interfaces for apktool like apkmultitool or the like - great, you will be fine (just decompile and recompile the entirety of SystemUI.apk).
That being said - if you are following this a bit closer to what I've laid out you will need a few things up front for this guide to be of any use. Again - there are several ways/methods/tools that can be used to go about this process - what follows is just what I tend to use.
Ok, so this guide uses/requires the following:
Ability to use baksmali/smali
WHAT I USE:
- I have to use a Windows environment for work, so for better or worse I tend to stay there. To emulate the land o' linux, I use CygWin - there are better methods/tools I am sure, but this is the one I use based on previous non-android exposure to it.
- I also use the baksmali-1.4.2.jar and smali-1.4.2.jar (off-topic: looks like some nice changes in store for the 2.0 beta ) from here.
NOTE: To use the jars above you need to have java installed, though I believe you can use the "standard" java that is often already on a machine.
Ability to extract/replace files within an apk
WHAT I USE:
- Really this is just a fancy way of saying you need some sort of archiving utility to extract/replace the classes.dex you will pull from SystemUI.apk. I tend to use JZip or 7zip myself.
Ability to view/edit text files
WHAT I USE:
- Notepad++ is awesome. That is all.
Ok - now for the fun stuff
First you will need the SystemUI.apk (located in /system/app) for whatever UVBMB4-base rom you are using. Once you have that - open up the apk and pull out the classes.dex. To avoid any sorts of path issues, make a directory wherever and drop the classes.dex and the two .jars (baksmali and smali) into it. Now fire up CygWin and cd yourself to the directory where all that now resides.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Once there, do this:
Code:
java -jar baksmali-1.4.2.jar -a 16 -o /Path/to/the/directory/outSysUI/ classes.dex
This is basically saying "use this baksmali jar file and decompile this android 4.1.x classes.dex file and dump the output/decompiled stuff into the /Path/to/the/directory/outSysUI/ directory." You will of course need to edit things depending on where that directory (the one w/ classes.dex and the 2 jars) is.
There should now be a folder called outSysUI in the directory - go to it and then go to /com/android/systemui/statusbar/policy and open NetworkController.smali.
Ok, before getting into the code part of what I did, I thought I would offer a little background that explains my thinking behind getting this working.
In the NetworkController.smali I noticed there were a bunch of update...DataNetType()V methods, so I traced their calls back to a method called getUpdateDataNetType()V. It was there I saw that the method basically tests what network you are on, and based on that it calls a method that then uses/calls the appropriate icons to display. Given that, I looked around for an update...DataNetType()V sort of method that used the H (referenced as DATA_H here) icons, and while there were a few the method I really landed on was the updateDataNetType()V method. This appeared to be a general sort of call when no other carrier was detected (felt "AOSP"-ish), and more importantly it had the H icon references in it. I then looked at the TMobile one (updateTMoDataNetType()V) to see how it was structured, and noticed it was a wee bit simplified as far as some of the checks that were done compared to the more general method I was looking at - I also paid particular attention to the bits that call up the LTE relevant icons in the TMo-based method.
I decided to copy the general method to use as a base, and then trimmed out some of the unneeded calls based on their absense from the TMo-based method. I then edited/worked in the LTE icon calls (changing a DATA_ call and some resource ids at the appropriate pswitch location) from the TMo method to make a new method. That last part was a little tricky, but I just compared the pswtich calls at the end of both methods to figure out where the LTE call was in the TMo method and where it should go in the new method.
If interested in taking a crack at crafting it on your own - have at it! Make sure to pay special attention to how the TMo method calls the lte icons (there are some resource id calls that need to be transferred over You can always use the below for reference as well!
Below is the method I cobbled together. Paste it in it's entirety right above this line:
Code:
.method private final updateTMODataNetType()V
New method:
Code:
.method private final updateAccTMODataNetType()V
.registers 8
.prologue
const v6, 0x7f0200a3
const v5, 0x7f020096
const/4 v4, 0x0
const v3, 0x7f0a0069
const v2, 0x7f020097
.line 1423
iget v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataNetType:I
packed-switch v0, :pswitch_data_12c
:goto_12
return-void
.line 1528
:pswitch_13
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1530
const v0, 0x7f0200a0
iput v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1531
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a0068
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto :goto_12
.line 1434
:pswitch_2c
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1436
iput v4, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1437
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a0068
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto :goto_12
.line 1444
:pswitch_42
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_E:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1446
const v0, 0x7f02009f
iput v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1447
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a006d
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto :goto_12
.line 1454
:pswitch_5b
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_3G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1455
iput v2, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1456
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
invoke-virtual {v0, v3}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1462
:pswitch_6f
iget-boolean v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mHspaDataDistinguishable:Z
if-eqz v0, :cond_8d
.line 1463
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_H:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1464
const v0, 0x7f0200a1
iput v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1465
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a006a
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1468
:cond_8d
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_3G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1469
iput v2, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1470
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
invoke-virtual {v0, v3}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1477
:pswitch_a1
iget-boolean v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mHspaDataDistinguishable:Z
if-eqz v0, :cond_bf
.line 1478
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_H_PLUS:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1479
const v0, 0x7f0200a2
iput v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1480
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a006a
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1483
:cond_bf
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_3G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1484
iput v2, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1485
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
invoke-virtual {v0, v3}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1493
:pswitch_d3
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_1X:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1495
iput v5, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1496
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a006c
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1503
:pswitch_ea
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_1X:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1505
iput v5, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1506
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a006c
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1516
:pswitch_101
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_3G:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1517
iput v2, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1518
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
invoke-virtual {v0, v3}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1522
:pswitch_115
sget-object v0, Lcom/android/systemui/statusbar/policy/TelephonyIcons;->DATA_LTE:[[I
iget v1, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mInetCondition:I
aget-object v0, v0, v1
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataIconList:[I
.line 1523
iput v6, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mDataTypeIconId:I
.line 1524
iget-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContext:Landroid/content/Context;
const v1, 0x7f0a00b6
invoke-virtual {v0, v1}, Landroid/content/Context;->getString(I)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mContentDescriptionDataType:Ljava/lang/String;
goto/16 :goto_12
.line 1432
:pswitch_data_12c
.packed-switch 0x0
:pswitch_2c
:pswitch_13
:pswitch_42
:pswitch_5b
:pswitch_d3
:pswitch_101
:pswitch_101
:pswitch_ea
:pswitch_6f
:pswitch_6f
:pswitch_6f
:pswitch_13
:pswitch_101
:pswitch_115
:pswitch_101
:pswitch_a1
.end packed-switch
.end method
The last little bit of code editing is to replace the call to the original TMo data icon method with the new one. This call can be found in
Code:
.method private getUpdateDataNetType()V
Just search for
Code:
updateTMODataNetType()V
and replace that call with
Code:
updateAccTMODataNetType()V
(or whatever you end up calling it).
So for a more exact visual:
Instead of
Code:
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/NetworkController;->updateTMODataNetType()V
it now says
Code:
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/NetworkController;->updateAccTMODataNetType()V
Now save the NetworkController.smali and return to CygWin. Type the following:
Code:
java -Xmx1024M -jar smali-1.4.2.jar -a 16 outSysUI/ -o classes.dex
This is basically saying "using up to this much memory (1024M), use the smali-1.4.2.jar file to compile the contents of the outSysUI/ directory into a 4.1.x classes.dex file."
You then take that newly compiled classes.dex and drop it back into SystemUI.apk. Then you can push/flash the apk and blammo you are all set
Hope this helps folks
I know I say it often, but there are so many ways to go about this - what I showed was just one way (and it could be convoluted for all I know lol). Also - don't take anything I say as "concrete must-be-true" facts - I am often wrong and if so feel free to (constructively) point it out This is all about learning after all, right?
You the man bro!! Thanks so much for sharing your knowledge.
Sent from my SGH-T889 using Xparent Skyblue Tapatalk 2
thank you so much for sharing :good:
Awesome, appreciate your work!
Sent from my SGH-T889 using Tapatalk 4 Beta
As I don't like making edits directly to the various system APKs, here's a version using Xposed.
NOTE: This does NOTHING if you don't have the framework installed. http://forum.xda-developers.com/showthread.php?t=1574401
Install the framework, following the directions in that thread. Once you have that working, install this module. It should give you a notification that the module isn't enabled. Select it, then enable the module and reboot. It seems to be working fine here, but I don't have LTE so there might be issues with that. I do get H, H+, and 3G so far. The code is basically what is in the OP, modified for reflection as required. I'll push the source to my github in a bit. Thanks go to dwitherell, this module is just a port.
This is currently only tested on MB4. It should work on most any TMO ROM. It only overrides the Tmobile specific method, so international ROMs, other carrier ROMs, AOSP, are probably not going to work. Most of those seem to have the "correct" icons anyway. TMobile just likes to call everything faster than Edge "4G". I doubt it will cause any problems in those cases, it will probably just fail to load, not finding the method to override.
If there end up being a lot of questions etc, I'll make a new thread so we don't hijack this one. There's not much to it, so I don't expect much for issues. Please don't post questions about this module to the framework thread I linked above.
ttabbal said:
As I don't like making edits directly to the various system APKs, here's a version using Xposed...
Click to expand...
Click to collapse
Nice job! If for nothing else than to learn something new I should really look into doing little things like this (with "this" referring to what is in the OP) using xposed... It would take some learning though... I feel like I've stumbled upon how-tos on the topic, but @ttabbal if there are particulars you found useful and feel like sharing (with "sharing" being more accurately defined as "supporting my laziness about doing a search at the moment")... feel free to PM me
dwitherell said:
Nice job! If for nothing else than to learn something new I should really look into doing little things like this (with "this" referring to what is in the OP) using xposed... It would take some learning though... I feel like I've stumbled upon how-tos on the topic, but @ttabbal if there are particulars you found useful and feel like sharing (with "sharing" being more accurately defined as "supporting my laziness about doing a search at the moment")... feel free to PM me
Click to expand...
Click to collapse
I totally get being lazy. The code is in my repo now. It's much like the code you posted, the big difference is that you don't have access to the actual member variables and such directly. So you have to access them via Reflection. Using tools like VTS to decompile the classes to java style code helps a lot. Then you just adjust it a little to make reflection calls rather than direct like you do with smali. The biggest thing I like about this stuff over smali edits is that you can add/remove whatever you like as a user without affecting anything else, as mods tend to be self-contained.
https://github.com/travistabbal/XposedMods/tree/master/DataIconsFix
Hope it helps, comparing what I have to what you did should make it pretty clear. For Xposed itself, they provide some nice tutorials for the basic setup to build a module. It's not that much really, just a couple properties in the manifest and a text file in /res.
Ahhhh.... So it was in systemui and not framework-res! Network control Smali huh? I remember that one when I was doing those throttle hacks and from some themeing. It makes sense now. Thanks for the how to! And thanks for mentioning Tweaked ROM. It is so awesome with all the visual options. Tsm parts reminds me of CM6 with all the ui options before the simpler systemui theme apks. Love having the option to change slight things here and there. Feeds my ocd very nicely lol! I ended up pairing it with saber kernel from ptmr (for CPU/GPU OCing UVing, voodoo sound, and Trickster Mod support), for ever loco's AOSP theme (with a few of my own modded/added images for total awesomeness), and a few of my standard system works, init.d scripts, build.prop edits. I don't think I'll ever switch ROMs again until we at least get a stable, solid 4.2.2 ROM I bet international with get one shortly after the Note 3 is released. This baby with keep me happy until then... thanks again for pointing me in the right direction and showing your work on the icon mod! I know you added it on 2.1 but it's nice to know how you got there
---------- Post added at 11:29 PM ---------- Previous post was at 11:22 PM ----------
ttabbal said:
I totally get being lazy. The code is in my repo now. It's much like the code you posted, the big difference is that you don't have access to the actual member variables and such directly. So you have to access them via Reflection. Using tools like VTS to decompile the classes to java style code helps a lot. Then you just adjust it a little to make reflection calls rather than direct like you do with smali. The biggest thing I like about this stuff over smali edits is that you can add/remove whatever you like as a user without affecting anything else, as mods tend to be self-contained.
https://github.com/travistabbal/XposedMods/tree/master/DataIconsFix
Hope it helps, comparing what I have to what you did should make it pretty clear. For Xposed itself, they provide some nice tutorials for the basic setup to build a module. It's not that much really, just a couple properties in the manifest and a text file in /res.
Click to expand...
Click to collapse
Wow! That sounds very useful! Might try it for any future edits. And yeah, xposed modules are too difficult from what I've read also. I just haven't had any good ideas on what to make atm... Might make one soon for the hell of it. I just don't have the time I used to, unfortunately.
I can confirm that the xposed module I posted works properly with LTE.
As it's really just a port of the code dwitherell posted, I don't see any reason his wouldn't.
ttabbal said:
I can confirm that the xposed module I posted works properly with LTE.
As it's really just a port of the code dwitherell posted, I don't see any reason his wouldn't.
Click to expand...
Click to collapse
Yep, I don't think it's official yet but LTE testing has been going on in my area - all good on my end as well Thanks for the xposed feedback!

[MOD][GUIDE]Enable Heads Up Notifications

This guide was written based on the Sprint Samsung Galaxy S3 ND8 KitKat stock ROM but with the proper modifications may work for other KitKat ROMs. Please don't ask me to modify this to work with ROM xyz or to compile this for you into a ROM. I won't do it.
Background Info
As you know, Android 4.4 has a heads-up notification feature built in but disabled with no way to enable it from settings. While there are various Xposed modules that will enable this for you as well as give some additional functionality (such as whitelisting), I personally don't use Xposed because it causes conflicts on my ROM so I decided to figure out how to enable it myself. Simply enabling Heads Up notifications caused all sorts of force closes any time an ongoing notification presented itself so that had to be worked out as well.
Requirements
apktool 2.0 beta 9 and the knowledge of how to use it. There are various guides on how to use apktool on XDA. Find one and read it. Make sure to read the information on the apktool site as well since some of the options in 2.0 may be different from the guides you find.
A text editor that supports Unix-style text files. I recommend Notepad++.
Files
You'll be working with the following apks:
SystemUI.apk
SecSettings.apk
SystemUI.apk
Decompile SystemUI.apk using apktool.
Open smali\com\android\systemui\statusbar\BaseStatusBar.smali in your preferred text editor.
Find .method protected shouldInterrupt(Landroid/service/notification/StatusBarNotificationZ.
This method is of no use to us in it's current form and is what causes the force closes/ongoing notification issues so we are going to completely remove it and replace it with the following:
Code:
.method protected shouldInterrupt(Landroid/service/notification/StatusBarNotification;)Z
.locals 12
.param p1, "sbn" # Landroid/service/notification/StatusBarNotification;
.prologue
const/4 v8, 0x0
const/4 v9, 0x1
.line 1292
invoke-virtual {p1}, Landroid/service/notification/StatusBarNotification;->isOngoing()Z
move-result v4
if-nez v4, :cond_0
iget-object v10, p0, Lcom/android/systemui/statusbar/BaseStatusBar;->mPowerManager:Landroid/os/PowerManager;
invoke-virtual {v10}, Landroid/os/PowerManager;->isScreenOn()Z
move-result v1
:goto_0
return v1
:cond_0
move v1, v8
goto :goto_0
.end method
Save the file and recompile SystemUI using apktool. Don't forget to re-sign the APK (either use an APK signer if you have a ROM that has 3rd-party system app signatures enabled or copy the AndroidManifest.xml file and META-INF folder from the original to the new APK).
That's it for SystemUI.apk.
SecSettings.apk
Decompile SecSettings.apk with apktool.
First, we need to add the title and summary for the setting to enable Heads Up notifications. Open res\values\Strings.xml in your preferred text editor.
Add the following lines to the bottom of the file:
Code:
<string name="heads_up">Heads up notifications</string>
<string name="heads_up_desc">Enable heads up notifications</string>
Save the file and close it.
Next we need to add the setting entry. Open res\xml\display_settings.xml in your preferred text editor.
Add the following line underneath your preferred setting category (I chose to place it under "General" in my ROM):
Code:
<CheckBoxPreference android:title="@string/heads_up" android:key="heads_up_setting" android:widgetLayout="@touchwiz:layout/preference_widget_twcheckbox" />
Save the file and close it.
Finally, we will add the code to enable/disable Heads Up notifications. Open smali\com\android\settings\DisplaySettings.smali in your preferred text editor.
Find # instance fields and add the following line (on a new line) somewhere before # direct methods:
Code:
.field private mHeadsUp:Landroid/preference/CheckBoxPreference;
Find .method private updateState()V, then locate the section of code that looks similar to this:
Code:
:cond_0
invoke-direct {p0}, Lcom/android/settings/DisplaySettings;->updateInformativeScreenSummary()V
.line 1374
iget-object v3, p0, Lcom/android/settings/DisplaySettings;->mDisplayBatteryLevel:Landroid/preference/CheckBoxPreference;
invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v4, "display_battery_percentage"
invoke-static {v0, v4, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-eqz v0, :cond_2
move v0, v1
:goto_0
invoke-virtual {v3, v0}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
Your variables (v#'s), conditionals (cond_#'s), gotos (goto_#'s), and .line #'s may differ. Under the line invoke-virtual {v3, v0}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V, add:
Code:
iget-object v3, p0, Lcom/android/settings/DisplaySettings;->mHeadsUp:Landroid/preference/CheckBoxPreference;
invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v4, "heads_up_enabled"
invoke-static {v0, v4, v2}, Landroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-eqz v0, :cond_8
move v0, v1
:goto_6
invoke-virtual {v3, v0}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
You'll want to change the variables to match the ones in the prior code section if they are different for you. Also make sure to change the conditional and goto labels to one hexadecimal numeral higher than the highest one already present in the method (for example, in stock ND8, the highest conditional is cond_7 so we choose cond_8 for the conditional here and the highest goto is goto_5 so we chose goto_6).
Scroll down to the end of the method and add the following above .end method:
Code:
:cond_8
move v0, v2
goto/16 :goto_6
Make sure to change v2 to whatever variable is defined at the beginning of the method as 0x0 (ie. const/4 v2, 0x0 in this case).
Find .method public onCreate(Landroid/os/BundleV, then locate the section of code that looks similar to the following:
Code:
const-string v0, "display_battery_level"
invoke-virtual {p0, v0}, Lcom/android/settings/DisplaySettings;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v0
check-cast v0, Landroid/preference/CheckBoxPreference;
iput-object v0, p0, Lcom/android/settings/DisplaySettings;->mDisplayBatteryLevel:Landroid/preference/CheckBoxPreference;
Again, your variables (v#'s) may differ. Beneath the line iput-object v0, p0, Lcom/android/settings/DisplaySettings;->mDisplayBatteryLevel:Landroid/preference/CheckBoxPreference;, add the following:
Code:
const-string v0, "heads_up_setting"
invoke-virtual {p0, v0}, Lcom/android/settings/DisplaySettings;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v0
check-cast v0, Landroid/preference/CheckBoxPreference;
iput-object v0, p0, Lcom/android/settings/DisplaySettings;->mHeadsUp:Landroid/preference/CheckBoxPreference;
Make sure to change the variable #'s to match the ones in the prior code section.
Find .method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/PreferenceZ and locate the section of code that looks similar to:
Code:
:cond_a
iget-object v0, p0, Lcom/android/settings/DisplaySettings;->mDisplayBatteryLevel:Landroid/preference/CheckBoxPreference;
invoke-virtual {p2, v0}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_c
.line 1530
iget-object v0, p0, Lcom/android/settings/DisplaySettings;->mDisplayBatteryLevel:Landroid/preference/CheckBoxPreference;
invoke-virtual {v0}, Landroid/preference/CheckBoxPreference;->isChecked()Z
move-result v0
.line 1531
invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v1
const-string v4, "display_battery_percentage"
if-eqz v0, :cond_b
move v3, v2
:cond_b
invoke-static {v1, v4, v3}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
goto :goto_3
.line 1533
:cond_c
As usual, your variables (v#'s), conditionals (cond_#'s), gotos (goto_#'s), and .line #'s may differ. Under :cond_c, add the following:
Code:
iget-object v0, p0, Lcom/android/settings/DisplaySettings;->mHeadsUp:Landroid/preference/CheckBoxPreference;
invoke-virtual {p2, v0}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2b
.line 1530
iget-object v0, p0, Lcom/android/settings/DisplaySettings;->mHeadsUp:Landroid/preference/CheckBoxPreference;
invoke-virtual {v0}, Landroid/preference/CheckBoxPreference;->isChecked()Z
move-result v0
.line 1531
invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v1
const-string v4, "heads_up_enabled"
if-eqz v0, :cond_2c
move v3, v2
:cond_2c
invoke-static {v1, v4, v3}, Landroid/provider/Settings$Global;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
goto/16 :goto_3
:cond_2b
Again, you'll want to change the variables to match the ones in the prior code section if they are different for you and make sure to change the conditional labels to one hexadecimal numeral higher than the highest one already present in the method. Change the goto/16 :goto_3 to match the one in the previous code section.
Save the file and close it.
That's it for SecSettings.apk. Recompile and re-sign it.
Install both files to your phone using your preferred method. You should already know this but I'll say it anyway, THESE FILES CANNOT BE INSTALLED LIKE NORMAL SIDE-LOADED APKs. I prefer to reboot to recovery and use ADB to push the files to the system, but you can use whatever method is easiest for you (ie. Aroma file manager, flashable zip, etc.).
So I guess those of us that aren't very good at this will have to wait then? Lol
Sent from my SPH-L710 using Tapatalk
Great tutorial man! Thank you looking forward to add this to all my releases soon. Great job!
Great, it compiles without mistakes with Dn3 4.4.2 for N7105, but I was playing with my 4 years old daughter and I'm sure something will be wrong, lol!
I just had to use cond 8 instead of 7, but I will report very likely my failure... It will take longer for me to let it work.
Anyway, it is a very useful tutorial and it's the only one here.
Mismatch?
I think there is a typo in the code for statusbar, it says mismatched input "p1" expecting END_METHOD_DIRECTIVE
I took this one from your original code (the one inside your rom) and it compiles fine
.method protected shouldInterrupt(Landroid/service/notification/StatusBarNotificationZ
.locals 12
.parameter "sbn"
.prologue
const/4 v8, 0x0
const/4 v9, 0x1
.line 1292
invoke-virtual {p1}, Landroid/service/notification/StatusBarNotification;->isOngoing()Z
move-result v4
if-nez v4, :cond_0
iget-object v10, p0, Lcom/android/systemui/statusbar/BaseStatusBar;->mPowerManager:Landroid/os/PowerManager;
invoke-virtual {v10}, Landroid/os/PowerManager;->isScreenOn()Z
move-result v1
:goto_0
return v1
:cond_0
move v1, v8
goto :goto_0
.end method
I will re-check the next steps, because last night I was unable to get everything working (I am not a dev).
Thanks again.
lucaoldb said:
I think there is a typo in the code for statusbar, it says mismatched input "p1" expecting END_METHOD_DIRECTIVE
I took this one from your original code (the one inside your rom) and it compiles fine
.method protected shouldInterrupt(Landroid/service/notification/StatusBarNotificationZ
.locals 12
.parameter "sbn"
.prologue
const/4 v8, 0x0
const/4 v9, 0x1
.line 1292
invoke-virtual {p1}, Landroid/service/notification/StatusBarNotification;->isOngoing()Z
move-result v4
if-nez v4, :cond_0
iget-object v10, p0, Lcom/android/systemui/statusbar/BaseStatusBar;->mPowerManager:Landroid/os/PowerManager;
invoke-virtual {v10}, Landroid/os/PowerManager;->isScreenOn()Z
move-result v1
:goto_0
return v1
:cond_0
move v1, v8
goto :goto_0
.end method
I will re-check the next steps, because last night I was unable to get everything working (I am not a dev).
Thanks again.
Click to expand...
Click to collapse
The code in the guide is taken straight from my ROM. All this method does is check to see if the notification is ongoing or not, then check to make sure the screen is on. also, I highly recommend using the latest version of apktool.
First of all, thank you.
I still have to edit the files by myself, but I have tested both your system ui and your secsettings on to the rom I am using (Dn3 4.4.2 for N7105) and they work fine, including heads up notifications... So I will keep these settings for some days, until I have the time to learn more about this matter.
Btw, I will try some of yor themed apps I found inside your rom, which are very good looking.
So what does the hud look like and how does it work? Not familiar with it.
Sent from my SPH-L710 using Tapatalk
Works great. Thank you moonknightus
Deleted
marcran75 said:
Deleted
Click to expand...
Click to collapse
???
Sent from my SPH-L710 using Tapatalk
Just an fyi, I just tried this on the S5 stock touchwiz (which is 4.4.2). I get an error when trying to compile SecSettings.apk.
Code:
I: Smaling smali folder into classes.dex...
..\_WorkArea1\_working\SecSettings.apk\smali\com\android\settings\DisplaySettings.smali[2936,4] There is already a label with that name.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file: com/android/settings/DisplaySettings.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:358)
at brut.androlib.Androlib.buildSources(Androlib.java:298)
at brut.androlib.Androlib.build(Androlib.java:284)
at brut.androlib.Androlib.build(Androlib.java:258)
at brut.apktool.Main.cmdBuild(Main.java:240)
at brut.apktool.Main.main(Main.java:89)
It seems like the method or something is already being duplicated. SystemUI recompiled perfectly.
tp2215 said:
Just an fyi, I just tried this on the S5 stock touchwiz (which is 4.4.2). I get an error when trying to compile SecSettings.apk.
Code:
I: Smaling smali folder into classes.dex...
..\_WorkArea1\_working\SecSettings.apk\smali\com\android\settings\DisplaySettings.smali[2936,4] There is already a label with that name.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file: com/android/settings/DisplaySettings.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:358)
at brut.androlib.Androlib.buildSources(Androlib.java:298)
at brut.androlib.Androlib.build(Androlib.java:284)
at brut.androlib.Androlib.build(Androlib.java:258)
at brut.apktool.Main.cmdBuild(Main.java:240)
at brut.apktool.Main.main(Main.java:89)
It seems like the method or something is already being duplicated. SystemUI recompiled perfectly.
Click to expand...
Click to collapse
Either a goto or a conditional label is being duplicated. Reread the instructions paying attention to the part that says to adjust the labels accordingly. The S3 and S5 use very similar code but by no means is it identical.
Thanks moonknightus for this guide. I manage to apply this mod to my tablet.:good: .Now my only problem is your other mod.
@moonknightus please check your PM sir
Do I actually need to sign the apks our can I just use them once they are modified
Sent from my SPH-L710 using Tapatalk
bigwillyg said:
Do I actually need to sign the apks our can I just use them once they are modified
Sent from my SPH-L710 using Tapatalk
Click to expand...
Click to collapse
Either use an APK signer if you have a ROM that has 3rd-party system app signatures enabled or copy the AndroidManifest.xml file and META-INF folder from the original to the new APK.As stated by moonknightus in his other thread.
filchi756 said:
Either use an APK signer if you have a ROM that has 3rd-party system app signatures enabled or copy the AndroidManifest.xml file and META-INF folder from the original to the new APK.As stated by moonknightus in his other thread.
Click to expand...
Click to collapse
Ah gotcha. Thanks
Sent from my SPH-L710 using Tapatalk
Shouldn't this be :cond_8?
Code:
[COLOR="Red"]:cond_7
[/COLOR] move v0, v2
goto/16 :goto_6
tdunham said:
Shouldn't this be :cond_8?
Code:
[COLOR="Red"]:cond_7
[/COLOR] move v0, v2
goto/16 :goto_6
Click to expand...
Click to collapse
Yup

[MOD] [GUIDE] How To Change Air Command Apps

Hello everyone...
I've always liked the concept of the Air Command window that pops up when the S Pen is removed, but I didn't like being limited to the 5 options it gave me, as I only ever use two of them. So after much trial and error, I finally came up with a way to replace the defaults with whatever apps you want.
NOTES
Do this at your own risk. I am not responsible for loss of data, bricked devices, or global thermonuclear war resulting from this guide.
***Before proceeding any further, MAKE A BACKUP.
***This should work on any stock or stock-based ROM, but it has only been tested on the T-Mobile Galaxy Note 3 (sm-n900t) running Tweaked 3.95
***This is one of my first real forays into smali modding, and I'm still just learning, so while fully-functional, the smali could probably be made 'cleaner' and more efficient. In fact, I'm sure of it. Any tips/suggestions/improvements are more than welcome.
***This guide assumes that you already know how to decompile/compile both .jar and .apk files.
***In order to use different apps, you must be able to find the package name and the main activity (or any other activity you'd like) of the app that you want to use. These can be found by decompiling the app and looking in the AndroidManifest. Some examples:
Sketchbook For Galaxy
Package name: com.adsk.sketchbookhd.galaxy.oem
Activity: com.adsk.sketchbook.SketchBook
Papyrus
Package name: com.steadfastinnovation.android.projectpapyrus
Activity: com.steadfastinnovation.android.projectpapyrus.application.HeadlessMainActivity
MyScript Calculator
Package name: com.visionobjects.calculator
Activity: com.visionobjects.calculator.activity.MainActivity
With all that out of the way, let's begin!
Pull your services.jar from /system/framework and decompile it. The file we are going to be working with is /com/android/server/smartclip/SpenGestureManagerService$6.smali.
TO REPLACE ACTION MEMO
-Either search or scoll all the way down and find this line:
Code:
nop
-Erase that line, and paste the following in it's place:
Code:
:pswitch_ms1
if-eqz v6, :cond_atd1
:cond_atd1
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$1300()Ljava/lang/String;
move-result-object v10
invoke-virtual {v10, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
const/4 v11, 0x1
if-ne v10, v11, :cond_atd2
goto/16 :goto_42
:cond_atd2
new-instance v4, Landroid/content/Intent;
.end local v4 #intent:Landroid/content/Intent;
invoke-direct {v4}, Landroid/content/Intent;->()V
.restart local v4 #intent:Landroid/content/Intent;
const/high16 v10, 0x1400
invoke-virtual {v4, v10}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
new-instance v10, Landroid/content/ComponentName;
const-string v11, "YOUR_APP_NAME"
const-string v12, "YOUR_APP_ACTIVITY"
invoke-direct {v10, v11, v12}, Landroid/content/ComponentName;->(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v4, v10}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
const-string v10, "selectIndex"
const/4 v11, 0x1
invoke-virtual {v4, v10, v11}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v3, v11}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
goto/16 :goto_42
nop
-In the section you just pasted, replace "YOUR_APP_NAME" with the package name from your app, and replace "YOUR_APP_ACTIVITY" with the main activity from your app.
-Either scroll all the way down or search for the line:
Code:
.packed-switch 0x0
-Directly below that, change ":pswitch_43" to ":pswitch_ms1"
TO REPLACE SCRAPBOOKER
***NOTE: Pay no attention to the .line numbers in the following, as yours may be different.
-Search for the line:
Code:
const-string v10, "com.sec.android.app.rakein"
-There will be two of these lines. We're interested in the first one.
-Delete the line in red:
Code:
.restart local v4 #intent:Landroid/content/Intent;
const-string v10, "com.sec.android.app.rakein"
const-string v11, "com.sec.android.app.rakein.RakeInService"
[color=red]invoke-virtual {v4, v10, v11}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;[/color]
-Add the blue lines:
Code:
.restart local v4 #intent:Landroid/content/Intent;
[color=blue]const/high16 v10, 0x1400
invoke-virtual {v4, v10}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
new-instance v10, Landroid/content/ComponentName;[/color]
const-string v10, "com.sec.android.app.rakein"
const-string v11, "com.sec.android.app.rakein.RakeInService"
[color=blue]invoke-direct {v10, v11, v12}, Landroid/content/ComponentName;->(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v4, v10}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;[/color]
-Replace "com.sec.android.app.rakein" with the package name of the new app.
-Replace "com.sec.android.app.rakein.RakeInService" with the main activity of the new app.
-Scroll down a few lines until you see this:
Code:
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
-Replace that line with this:
Code:
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
-Scroll down until you see see this line:
Code:
goto/16 :goto_42
-Delete everything after that line, until you come to the following:
Code:
.line 669
:cond_154
new-instance v4, Landroid/content/Intent;
-Add the line in blue:
Code:
.line 669
:cond_154
[color=blue][emoji14]switch_120[/color]
new-instance v4, Landroid/content/Intent;
-Once finished, it should look like this:
Code:
.line 648
.restart local v4 #intent:Landroid/content/Intent;
const/high16 v10, 0x1400
invoke-virtual {v4, v10}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
new-instance v10, Landroid/content/ComponentName;
const-string v11, "com.adsk.sketchbookhd.galaxy.oem"
const-string v12, "com.adsk.sketchbook.SketchBook"
invoke-direct {v10, v11, v12}, Landroid/content/ComponentName;->(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v4, v10}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
.line 649
const-string v10, "selectIndex"
const/4 v11, 0x1
invoke-virtual {v4, v10, v11}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
.line 650
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
.line 652
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v2, v11}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
.line 654
const-string v10, "selectIndex"
const/4 v11, 0x1
invoke-virtual {v3, v10, v11}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
.line 655
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v3, v11}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
goto/16 :goto_42
.line 669
:cond_154
[emoji14]switch_120
new-instance v4, Landroid/content/Intent;
.end local v4 #intent:Landroid/content/Intent;
invoke-direct {v4}, Landroid/content/Intent;->()V
TO REPLACE SCREEN WRITE
-Search for this line:
Code:
nop
-Erase that line, and paste the following in its' place:
Code:
[emoji14]switch_ms2
if-eqz v6, :cond_atd3
:cond_atd3
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$1300()Ljava/lang/String;
move-result-object v10
invoke-virtual {v10, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
const/4 v11, 0x1
if-ne v10, v11, :cond_atd4
goto/16 :goto_42
:cond_atd4
new-instance v4, Landroid/content/Intent;
.end local v4 #intent:Landroid/content/Intent;
invoke-direct {v4}, Landroid/content/Intent;->()V
.restart local v4 #intent:Landroid/content/Intent;
const/high16 v10, 0x1400
invoke-virtual {v4, v10}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
new-instance v10, Landroid/content/ComponentName;
const-string v11, "YOUR_APP_NAME"
const-string v12, "YOUR_APP_ACTIVITY"
invoke-direct {v10, v11, v12}, Landroid/content/ComponentName;->(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v4, v10}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
const-string v10, "selectIndex"
const/4 v11, 0x1
invoke-virtual {v4, v10, v11}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v3, v11}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
goto/16 :goto_42
nop
-In the section you just pasted, replace "YOUR_APP_NAME" with the package name from your app, and replace "YOUR_APP_ACTIVITY" with the main activity from your app.
-Either scroll all the way down or search for the line:
Code:
.packed-switch 0x0
-Below that, change "[emoji14]switch_b7" to "[emoji14]switch_ms2"
TO REPLACE S FINDER
-Find the line:
Code:
const-string v11, "com.samsung.android.app.galaxyfinder"
-Replace "com.samsung.android.app.galaxyfinder" with the package name of the new app.
-On the line directly below, replace "com.samsung.android.app.galaxyfinder.GalaxyFinderActivity" with the main activity of the new app.
TO REPLACE PEN WINDOW
-Search for this line:
Code:
nop
-Erase that line, and paste the following in its' place:
Code:
[emoji14]switch_ms3
if-eqz v6, :cond_atd5
:cond_atd5
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$1300()Ljava/lang/String;
move-result-object v10
invoke-virtual {v10, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
const/4 v11, 0x1
if-ne v10, v11, :cond_atd6
goto/16 :goto_42
:cond_atd6
new-instance v4, Landroid/content/Intent;
.end local v4 #intent:Landroid/content/Intent;
invoke-direct {v4}, Landroid/content/Intent;->()V
.restart local v4 #intent:Landroid/content/Intent;
const/high16 v10, 0x1400
invoke-virtual {v4, v10}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
new-instance v10, Landroid/content/ComponentName;
const-string v11, "YOUR_APP_NAME"
const-string v12, "YOUR_APP_ACTIVITY"
invoke-direct {v10, v11, v12}, Landroid/content/ComponentName;->(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v4, v10}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
const-string v10, "selectIndex"
const/4 v11, 0x1
invoke-virtual {v4, v10, v11}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v4, v11}, Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
invoke-static {}, Lcom/android/server/smartclip/SpenGestureManagerService;->access$200()Landroid/content/Context;
move-result-object v10
sget-object v11, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
invoke-virtual {v10, v3, v11}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
goto/16 :goto_42
nop
-In the section you just pasted, replace "YOUR_APP_NAME" with the package name from your app, and replace "YOUR_APP_ACTIVITY" with the main activity from your app.
-Either scroll all the way down or search for the line:
Code:
.packed-switch 0x0
-Below that, change "[emoji14]switch_1f8" to "[emoji14]switch_ms3"
NOTES
-Regardless of how many apps you change, you should only have one instance of the line:
Code:
nop
-It should be right before the array of switches at the bottom of the document.
-After you've made your changes, save the file, re-smali the classout folder, copy the resulting classes.dex into your services.jar, push to /system/framework, set permissions, wipe Cache and Dalvik (never hurts), and reboot.
CHANGING THE ICONS
-Decompile your framework-res.apk, and go to res/drawable-xxhdpi. The icons will all begin with "airbutton_global_icon". Simply find the one(s)
corresponding to the app(s) you've changed, and edit it however you want. Just be sure to keep the file name the same.
CHANGING THE TEXT
-To change the text that shows when you hover over the Air Command apps, go to your decompiled framework-res.apk
and open res/values/strings.xml. The default strings are as follows:
Action Memo -
Scrap Booker -
Screen Write -
S Finder -
Pen Window -
-Locate the one(s) you want to change, change the content of the string(s), save, recompile, push to system/priv-app, set permissions, and reboot.
***Note: You may have to change them in res/values-en-rUS/strings.xml also.
Enjoy!
Reserved
edit: Meant to post this thread in General rather than Themes & Apps....If a mod could be so kind as to move it....
Thanks for this. I will be doing this tomorrow morning when I might have a free sec or 2. I use another app currently that gives me other options, but it is very clunky and not ideal. Your solution should be perfect to replace unused items with useful things I need! Take care and thanks for sharing.
Chris
Good luck! If you need any help or run into any problems, let me know.
That's a great idea and some really excellent work man :fingers-crossed: I'd be interested to give it a try on my Note 4 at some point, probably not for a bit though as there are several things that I'd like to get "set up" first. One thing at the top of that list (which I mention because it seems like you might find it as useful as I do, if you don't use it already) is GMD S-pen Control. In terms of "optimizing" use of the S-pen and making use of it as the single most versatile navigational tool in addition to its other uses, that app can't be beat. On my N3 I had it set up so that just by scribbling something on the screen, I could: launch pretty much any semi-frequently used app, toggle radios, take me directly to any menu within settings, etc. Although I occasionally used air command, more often than not I found it "getting in the way" when I was trying to scribble a GMD gesture until I made it stop auto-launching, and just put it (along with most of the other Samsung native functions) in one of the several "Launchbars" that are a part of the GMD app - rather than launching whatever via gestures (or rather, in addition to), you can assign "actions" to buttons on various launchbars that can be triggered by drawing straight down from the top of the screen or right from the left side.
Anyway, just wanted to say nice work on a super-practical mod, and let you know about the kinds of things you can do with the GMD app if you've never tried it
Thanks for the feedback! Just be sure you have a good, working backup. I don't have a Note 4, so can't test it, but I imagine it will be similar.
The smali will be slightly different, and the file name might have changed as well (particularly the number at the end, after the $). As long as you can find the corresponding file, you'll probably be able to use the same long block of code from the OP, and just change the switch numbers in the array at the bottom of the file. If you want to send me your services.jar sometime, I's be happy to take a look at it!
As for GMD S-Pen Control, I had tried it a long time ago, and it seemed pretty useful, but it sounds like they've added a lot more functionality since then, so I'll check it out. Thanks for the heads up!
Morningstar said:
Thanks for the feedback! Just be sure you have a good, working backup. I don't have a Note 4, so can't test it, but I imagine it will be similar.
The smali will be slightly different, and the file name might have changed as well (particularly the number at the end, after the $). As long as you can find the corresponding file, you'll probably be able to use the same long block of code from the OP, and just change the switch numbers in the array at the bottom of the file. If you want to send me your services.jar sometime, I's be happy to take a look at it!
As for GMD S-Pen Control, I had tried it a long time ago, and it seemed pretty useful, but it sounds like they've added a lot more functionality since then, so I'll check it out. Thanks for the heads up!
Click to expand...
Click to collapse
Thanks man! Just browsing through the system files and apks, I'd say that the majority of then look familiar (a few clearly new, and a few more installed DynamicKat ROM).... I've only had the phone for a week, but I've developed the notion that the way the the system (Tmo's latest 4.4.4 release) definitely, (possibly), handles things like dependencies and kernel modules differently. This is a really appealing project though because the result would be super-useful (it had never really occurred to me before, but looking back, it's kind of surprising that customizing air command isn't already "a thing" (beyond themeing). Just makes a ton of sense About time man!) but also because I'm sure I'd learn a ton just giving it a shot - I'd like to (try) incorporating a bit of themeing action, so best case scenario: learn a ton trying to figure it out and end up with a sweet / functional air command, worst case: learn a ton trying to figure it out and end up with a restored nandroid.... and a bunch of knowledge that I'm sure will be applicable towards many things on modding the N4 later on.
The only "issue" I've run into with GMD is recording paths for a ton of different things, then not really using it much for a bit, then starting to again to find that I've forgotten most of the non-obvious pen paths that I've assigned However, using it regularly is a huge time saver.
Why is this not an X-Posed module or a .TAR or a flashable .ZIP file or .APK file?? Thank you very much for posting this, it truly is great!
I have been searching for days for something like this and it would seem that everyone is just " happy" with modding the **** out of their droid but don't touch the AirCommand menu. Also, it would seem that people are again, actually happy with all of the other shortcuts / functions of AirCommand which I never used and will never use since I do not find them useful at all.
I've only seen AnyApp Air Command which I am using right now on Phantom ROM but having a 5 app pop-up menu for just 1 app is redundant.
I have an N7100 and I will do a nandroid and post back the results here.
This really needs to be turned into something more user-friendly. Also, in case you're working on something like that already, here's a suggestion : an "Alt+Tab" like shortcut would be awesome! Often times you're browsing the net for something but want to switch back to gaming or Settings or whatever. So a "Switch to previous used app" shortcut would be really nice!
@Morningstar Great complete Guide
I did Microsoft doc and pdf ,
Thanks, guys! This was my first real attempt at a smali mod, so it's rather convoluted and has a lot of redundancy, though it does work. I've gotten it to where it's much simpler, as you can see here where I re-did it for the Note 4. I haven't updated this, because it didn't seem like there was much interest, but if anyone wants I can throw together the same sort of thing I did for the N4, so you only have to add in the lines for your app, and change a few numbers....Much easier that way lol...
Morningstar said:
Thanks, guys! This was my first real attempt at a smali mod, so it's rather convoluted and has a lot of redundancy, though it does work. I've gotten it to where it's much simpler, as you can see here where I re-did it for the Note 4. I haven't updated this, because it didn't seem like there was much interest, but if anyone wants I can throw together the same sort of thing I did for the N4, so you only have to add in the lines for your app, and change a few numbers....Much easier that way lol...
Click to expand...
Click to collapse
You have no idea how many people are fgsfds frustrated when they search for "customize air command menu / change air command apps / shortcuts" and all they get is "How to theme your Air Command menu"
So yes, please! Keep it up, you're doing an excellent job and thank you very much for this!
Thank you. I'll have a little simpler method up later tonight or tomorrow. It'll be in the general forum, not Themes and Apps....Put this one here by mistake lol
Haven't forgotten about this...I've just had a busy day. I still intend to get an updated version put up tonight, or early tomorrow, since it may be after midnight lol.
Morningstar said:
Haven't forgotten about this...I've just had a busy day. I still intend to get an updated version put up tonight, or early tomorrow, since it may be after midnight lol.
Click to expand...
Click to collapse
No hurry, bro. I'd personally be happy with a 1/month update
Updated posted HERE.
Lollipop version coming tomorrow...

Categories

Resources