In this post I’ll explain what is Superuser mod and how to enable it on your device. The Superuser mod disables the nasty signature verification for all apps. After applying this mod you can install apps with different signature like Xperia Z1 or newer Sony apps. Things that are needed in this process are the following:
Rooted device
Deodexed ROM (If you are using ODEXED ROM, just delete services.odex)
Services.jar from your device
Baksmali Manager; the one that I'm currently using and shown in this tutorial DOWNLOAD
Notepad++
Step 1) Decompile Services.jar file
You can pull the services.jar file via adb or using some file manager on phone. I recommend using ADB since it will be needed for the Baksmali app. Via ADB, type the command:
Code:
adb pull /system/framework/services.jar
After you pulled the file successfully copy it and paste it in the baksmali folder. Now, follow the steps on how to decompiling the file.
1. Open baksmali Manager.bat
2. Press 4 (Select file to work) and then press Enter.
3. Enter the number in which services.jar file is shown, in my case it's 3. Press 3 then Enter.
4. After you selected the file, press 1 to Baksmali. Wait until it finishes.
Step 2) Applying the MOD
This is the part we've waiting for, disabling the signature check. Follow the steps.
1. Go to the newly created services folder in the baksmali folder and enter this location; \com\android\server\pm\
2. Search for a file called PackageManagerService.smali and open it with Notepad++
3. Press CTRL+F and search for '.method static compareSignatures'
4. You will see something similar to this:
Code:
.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
.registers 9
.parameter "s1"
.parameter "s2"
.prologue
.line 2284
if-nez p0, :cond_8
.line 2285
if-nez p1, :cond_6
const/4 v6, 0x1
.line 2304
:goto_5
return v6
.line 2285
:cond_6
const/4 v6, -0x1
goto :goto_5
.line 2289
:cond_8
if-nez p1, :cond_c
.line 2290
const/4 v6, -0x2
goto :goto_5
.line 2292
:cond_c
new-instance v3, Ljava/util/HashSet;
invoke-direct {v3}, Ljava/util/HashSet;-><init>()V
.line 2293
.local v3, set1:Ljava/util/HashSet;,"Ljava/util/HashSet<Landroid/content/pm/Signature;>;"
move-object v0, p0
.local v0, arr$:[Landroid/content/pm/Signature;
array-length v2, v0
.local v2, len$:I
const/4 v1, 0x0
.local v1, i$:I
:goto_14
if-ge v1, v2, :cond_1e
aget-object v5, v0, v1
.line 2294
.local v5, sig:Landroid/content/pm/Signature;
invoke-virtual {v3, v5}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z
.line 2293
add-int/lit8 v1, v1, 0x1
goto :goto_14
.line 2296
.end local v5 #sig:Landroid/content/pm/Signature;
:cond_1e
new-instance v4, Ljava/util/HashSet;
invoke-direct {v4}, Ljava/util/HashSet;-><init>()V
.line 2297
.local v4, set2:Ljava/util/HashSet;,"Ljava/util/HashSet<Landroid/content/pm/Signature;>;"
move-object v0, p1
array-length v2, v0
const/4 v1, 0x0
:goto_26
if-ge v1, v2, :cond_30
aget-object v5, v0, v1
.line 2298
.restart local v5 #sig:Landroid/content/pm/Signature;
invoke-virtual {v4, v5}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z
.line 2297
add-int/lit8 v1, v1, 0x1
goto :goto_26
.line 2301
.end local v5 #sig:Landroid/content/pm/Signature;
:cond_30
invoke-virtual {v3, v4}, Ljava/util/HashSet;->equals(Ljava/lang/Object;)Z
move-result v6
if-eqz v6, :cond_38
.line 2302
const/4 v6, 0x0
goto :goto_5
.line 2304
:cond_38
const/4 v6, -0x3
goto :goto_5
.end method
5. Shrink the whole method so it looks like this:
FOR ANDROID LOWER THAN 4.4 (Donut, GingerBread, IceCreamSandwitch, All JellyBean versions, also there is a chance that will work on some KitKat ROMs if the second method doesn't work)
Code:
.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
.registers 9
const/4 v0, 0x0
return v0
.end method
FOR ANDROID HIGHER THAN 4.4 (including LolliPop, KitKat, M)
Code:
.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
.locals 11
.param p0, "s1" # [Landroid/content/pm/Signature;
.param p1, "s2" # [Landroid/content/pm/Signature;
.prologue
const/4 v7, 0x0
.line 2934
return v7
.end method
Now find
Code:
invoke-static {v4, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
move-result v4
if-nez v4, :cond_c
.line 5572
new-instance v4, Lcom/android/server/pm/PackageManagerException;
const/16 v5, -0x13
const-string v11, "Cannot install platform packages to user storage!"
invoke-direct {v4, v5, v11}, Lcom/android/server/pm/PackageManagerException;-><init>(ILjava/lang/String;)V
throw v4
.line 5578
.end local v89 # "s1":[Landroid/content/pm/Signature;
:cond_c
And include do the changes marked in red color
Code:
invoke-static {v4, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
move-result v4
[COLOR="Red"]if-eqz[/COLOR] v4, :cond_c
.line 5572
new-instance v4, Lcom/android/server/pm/PackageManagerException;
const/16 v5, -0x13
const-string v11, "Cannot install platform packages to user storage!"
invoke-direct {v4, v5, v11}, Lcom/android/server/pm/PackageManagerException;-><init>(ILjava/lang/String;)V
throw v4
.line 5578
.end local v89 # "s1":[Landroid/content/pm/Signature;
:cond_c
6. Save the changes.
Step 3) Recompiling services.jar and pushing it back to system
We've come to the last piece of the puzzle. This is a bit tricky part but I'll make it simple for you, I recommend backing up your services.jar file in case something goes wrong.
1. Open baksmali again and choose services.jar as I previously explained.
2. Press 2 to smali the current work in classes.dex file.
3. In the baksmali folder you will find your services.jar and classes.dex file.
4. Open services.jar file with WinRAR (you can use other software) and replace the new (modified) classes.dex file with the new classes.dex file in the archive.
{
"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"
}
5. Push the services.jar file using ADB or copy it to system/framework using file manager. The command for adb is:
Code:
adb push services.jar /system/framework/
6. Set the permissions to rw- r-- r--
7. Reboot your phone.
8. Enjoy!
Thanks to eybee1970 for making the Xperia T Superuser mod and helping in this awesome tutorial. Also thanks to serajr for the KitKat method
What about for CM10.2 ??
@DavidMKD : What if the ROM is based on CM10.2 , that runs on a sony device ? Can I do this on its services.jar ?
Abhiheart said:
@DavidMKD : What if the ROM is based on CM10.2 , that runs on a sony device ? Can I do this on its services.jar ?
Click to expand...
Click to collapse
I don't think you read the topic, Services.jar from your device, make sure it's Sony based ROM. You already know the answer.
@DavidMKD That means a NO..Am I right ?? Thats why I guess, I was getting that strange error ..is there no way to make it work on CM 10,2 ??
@DavidMKD, thanks a lot for this!
By the way, I had a little problem with 3 apps that I integrated in system with Titanium Backup. They forcedly closed every time I tried to open them. But then I remembered that Titanium integrated them as odexed. I fixed it making them user app and integrating them again. After that, those apps seem to be still odexed but everything is working fine. Tried to reboot wiping caches to see if there could be any problem, but it wasn't.
As it disables signature verification wouldn't that make your device(s) extremely insecure?
gamer649 said:
As it disables signature verification wouldn't that make your device(s) extremely insecure?
Click to expand...
Click to collapse
You can still verify them by using an antivirus. xD
very good this method good working on 4.2.2!!!
set permission
broo, I put the services.jar file that has been patched with the other framework files in the sd card (folder 'done_app'). then I did this command:
adb shell
su
stop
mount -o rw,remount /system/ /system/
cp /sdcard/done_frame/* /system/framework/
mount -o ro,remount /system/ /system/
reboot
that's already changed the 'set permissions' or not yet?
silverbios said:
very good this method good working on 4.2.2!!!
Click to expand...
Click to collapse
@silverbios ..Were you in Stock Xperia 4.2.2
Abhiheart said:
@silverbios ..Were you in Stock Xperia 4.2.2
Click to expand...
Click to collapse
yes of course!
sadly stuck on error while decompiling
Sony Xperia ZU stock 4.2.2 doedex
Difficult any other method
Sent from my Xperia U Jellybean with XDA Premium
bro i do this on kitkat 4.4.2 service.jar.
and works fine but i have a new problem.i cant install as normall apk.
my means i cant install apk file.
pls help me for fix this
.
@DavidMKD
Mate, there's no need to patch framework.jar?
I'm asking for Xperia Z1
Tnx mate
Sent from my C6903 using Tapatalk
funky0308 said:
@DavidMKD
Mate, there's no need to patch framework.jar?
I'm asking for Xperia Z1
Tnx mate
Sent from my C6903 using Tapatalk
Click to expand...
Click to collapse
@alinolaw71
I haven't tried this method on 4.3 and 4.4 so far because I don't own a phone that is capable of doing so. I think that there is no need to patch framework.jar on 4.3 because it is based on Jellybean, for 4.4, haven't tried.
DavidMKD said:
@alinolaw71
I haven't tried this method on 4.3 and 4.4 so far because I don't own a phone that is capable of doing so. I think that there is no need to patch framework.jar on 4.3 because it is based on Jellybean, for 4.4, haven't tried.
Click to expand...
Click to collapse
tanx for replay bro.
.
Thank you for this wonderful guide!
baksmali manager.bat ?
Bro @DavidMKD,
Can you upload baksmali manager again? the zippyshare file is down.. it says "File does not exist on this server" :/ and I can't find a classes.dex file when using the other tool.. upload it again?
mnashfaq said:
Bro @DavidMKD,
Can you upload baksmali manager again? the zippyshare file is down.. it says "File does not exist on this server" :/ and I can't find a classes.dex file when using the other tool.. upload it again?
Click to expand...
Click to collapse
here
Related
You will need some Apk Manager, Apk Multi-tool, or anything else, to decompile your /system/framework/services.jar - there are many tutorials, how to decompile.
Then open:
...services.jar\smali\com\android\server\PowerManagerService.smali
with Notepad++
Find code:
iget-boolean v8, p0, Lcom/android/server/PowerManagerService;->mIsDocked:Z
if-eqz v8, :cond_b
move v8, p1
:goto_1
iget-object v9, p0, Lcom/android/server/PowerManagerService;->mLcdBacklightValues:[I
invoke-direct {p0, v8, v9}, Lcom/android/server/PowerManagerService;->getAutoBrightnessValue(I[I)I
Change:
{p0, v8, v9} to {p0, p1, v9}
Recompile, push back to your rom, wipe dalvik-cache.
WARNING: Use the apks at your own risk!!!
I am not responsible for any bricked devices
You'll need root for this to work
To backup original camera apk
Code:
adb pull /system/app/OppoGallery2.apk
adb pull /system/app/OppoGallery2.odex
To Install (after you backed up the older version):
Download the version, rename it to OppoGallery2.apk
Code:
adb push OppoGallery2.apk /sdcard/
adb shell
su
mount -o remount,rw /system
#remove older version
rm /system/app/OppoGallery2.apk
#if the file below exists
rm /system/app/OppoGallery2.odex
cp /sdcard/OppoGallery2.apk /system/app/
To revert to older version(or stock firmware version)
Code:
adb push OppoGallery2.apk /sdcard/
#if reverting to stock firmware version
adb push OppoGallery2.odex /sdcard/
adb shell
su
mount -o remount,rw /system
cp /sdcard/OppoGallery2.apk /system/app/
#if reverting to stock firmware version
cp /sdcard/OppoGallery2.odex /system/app/
Releases:
v2 - 2013-4-6
v1 - 2013-4-6
Changelog
v2 - 2013-4-6 - Based off the X909EN_13_130328 firmware, svn2611
Code:
Changelog:
- Enabled more values for timer(3, 5, 10, 20)s
- Known bugs:
---- GUI Icons for all timers will have a 5 in upper right corner
---- During countdown, if timeleft > 5s, it'll flash a "5" Icon. If timeleft < 5s, it'll flash the correct Icon (eg 4s left = "4" icon)
Compatibility: should work with any rom
[url=http://d-h.st/knx]Download[/url] | [url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/OppoGallery2.v2.apk]Mirror[/url]
[url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/v2.camera.timer.diff]Smali Code Diffs[/url]
v1 - 2013-4-6 - Based off the X909EN_13_130328 firmware, svn2611
Code:
Changelog:
- Enabled ISO toggle for camera (Settings for them were present, but not enabled)
<string name="pref_camera_iso_title">Select ISO</string>
<string name="pref_camera_iso_entry_auto">AUTO</string>
<string name="pref_camera_iso_entry_isodeblur">ISO Auto(HJR)</string>
<string name="pref_camera_iso_entry_iso100">ISO100</string>
<string name="pref_camera_iso_entry_iso200">ISO200</string>
<string name="pref_camera_iso_entry_iso400">ISO400</string>
<string name="pref_camera_iso_entry_iso800">ISO800</string>
<string name="pref_camera_iso_entry_iso1600">ISO1600</string>
Compatibility: should work with any rom
[url=http://d-h.st/3ER]Download[/url] | [url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/OppoGallery2.v1.apk]Mirror[/url]
[url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/v1.camera.iso.diff]Smali Code Diffs[/url]
Version 1:
I don't know why Oppo didn't enable ISO selection in the camera app
they added the string values and icons, but didn't add the code to display the menu system
The selection of ISO values seem to work: ISO 1600 seems grainer than any other mode... but isn't as grainy as I thought 1600 would be
Great Mod!
Thanks!
Today I was trying to decompile this APK with APK Manager v5. but i get error:
{
"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"
}
Can you give me any tips? Thanks in advance.
I guess I have to pull res framework?
Update:
I Pulled framework-res.apk, and went with "10.Decompile APK (With Dependences)" using framework-res.apk but still get this error....
NODO-GT said:
Great Mod!
Thanks!
Today I was trying to decompile this APK with APK Manager v5. but i get error:
Can you give me any tips? Thanks in advance.
I guess I have to pull res framework?
Update:
I Pulled framework-res.apk, and went with "10.Decompile APK (With Dependences)" using framework-res.apk but still get this error....
Click to expand...
Click to collapse
I use linux tools... maybe my guide will be a little useful.
don't think I had any problems with apktool
https://git.ngvincent.com/projects/oppo-x909-cm10/wiki/Decompile-apk
EDIT: did you pull framework-res.odex ?
paperWastage said:
I use linux tools... maybe my guide will be a little useful
https://git.ngvincent.com/projects/oppo-x909-cm10/wiki/Decompile-apk
Click to expand...
Click to collapse
I switched APK Manager to APK Tool...
When I decompile, I don't get smali folder... Will keep looking how to decompile this properly.
NODO-GT said:
I switched APK Manager to APK Tool...
When I decompile, I don't get smali folder... Will keep looking how to decompile this properly.
Click to expand...
Click to collapse
the firmware isn't deoxed.... so apktool decompile won't give you the .smali
as I mentioned in my edited post, for the framework, you'll need to copy the .odex as well (and use baksmali to decompile odex to .smail, then use smali to compile .smali to .dex)
same for decompiling any applications
can you please remove the "low battery check" that disable flash if the battery is lower than 20%? Thanks.
badworker said:
can you please remove the "low battery check" that disable flash if the battery is lower than 20%? Thanks.
Click to expand...
Click to collapse
hmm, they changed some stuff since the last time I decompiled their Gallery apk
give me a few hours to reupdate everything
EDIT: here is a build that I haven't tested (I'm using CM10.1-based roms)
this is taken from the latest stock oppo beta rom - X909EN_11_130629_Beta
contains only your requested change. let me know if it works? (same instructions on my original post)
(original file allows flash if battery >= 15%. I've set it to allow flash if battery > 0%)
http://d-h.st/wQT
paperWastage said:
hmm, they changed some stuff since the last time I decompiled their Gallery apk
give me a few hours to reupdate everything
EDIT: here is a build that I haven't tested (I'm using CM10.1-based roms)
this is taken from the latest stock oppo beta rom - X909EN_11_130629_Beta
contains only your requested change. let me know if it works? (same instructions on my original post)
(original file allows flash if battery >= 15%. I've set it to allow flash if battery > 0%)
http://d-h.st/wQT
Click to expand...
Click to collapse
Thanks! I'll give it a try asap.
Btw, I was trying to enable the ISO selection in the newer firmware (>=130531) but they are so different from the 130328 where you made modification. I am able to remove the flash check (with a lot of work, i'm learning ) but when I put your modification at the .smali files (with attenction to the .line and so on) the application force close itself. It's frustrating but i must try and retry till I get it working. So the request is: have you some usefull advices for me?
Thanks again for your work!
Tapatalked via Oppo Find 5
badworker said:
Thanks! I'll give it a try asap.
Btw, I was trying to enable the ISO selection in the newer firmware (>=130531) but they are so different from the 130328 where you made modification. I am able to remove the flash check (with a lot of work, i'm learning ) but when I put your modification at the .smali files (with attenction to the .line and so on) the application force close itself. It's frustrating but i must try and retry till I get it working. So the request is: have you some usefull advices for me?
Thanks again for your work!
Tapatalked via Oppo Find 5
Click to expand...
Click to collapse
smali sucks .... it's hard to apply patches for smali. these guys manage to auto-patch smali code, but usually the target is roughly the same (~android AOSP/AOKP/CM10.1 base with the same code)... if I have time, I'll take a look to see how they organize the smali patcher
you need to understand assembly (smali opcodes), know how to read it, and how java code relates to it
maybe a small tutorial would help: the flash check disabler code . Not sure how you modified the code, but here's how my thought process went
after decompiling to source code, you'll figure out how to solve the problem: have this function return false all the time
you want the function to return false (i.e. flash IS NOT forbidden)
I decide to target that (if i>=15) check (it checks if you have at least 15% battery left)
com/android/camera/Camera.java
Code:
private boolean isForbidFlash()
{
boolean flag = true;
File file = new File("/sys/class/power_supply/battery/capacity");
if(!file.exists())
return false;
FileReader filereader;
int i;
char c;
filereader = new FileReader(file);
char ac[] = new char[3];
filereader.read(ac);
i = Integer.valueOf(String.valueOf(ac).substring(0, 2)).intValue();
if(ac[0] != '1' || ac[1] != '0')
break MISSING_BLOCK_LABEL_98;
c = ac[2];
if(c == '0')
i = 100;
try
{
filereader.close();
}
catch(Exception exception1)
{
try
{
exception1.printStackTrace();
}
catch(Exception exception)
{
exception.printStackTrace();
Log.e("OppoCamera", (new StringBuilder()).append("isForbidFlash: e = ").append(exception).toString());
return false;
}
}
[B]if(i >= 15)[/B]
flag = false;
return flag;
}
smali code equivalent of the function above
Code:
.method private isForbidFlash()Z
.registers 9
.prologue
const/16 v7, 0x30
const/4 v0, 0x1
const/4 v1, 0x0
.line 4942
:try_start_4
new-instance v2, Ljava/io/File;
const-string v3, "/sys/class/power_supply/battery/capacity"
invoke-direct {v2, v3}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 4943
invoke-virtual {v2}, Ljava/io/File;->exists()Z
move-result v3
if-nez v3, :cond_12
.line 4969
:goto_11
return v1
.line 4946
:cond_12
new-instance v3, Ljava/io/FileReader;
invoke-direct {v3, v2}, Ljava/io/FileReader;-><init>(Ljava/io/File;)V
.line 4947
const/4 v2, 0x3
new-array v4, v2, [C
.line 4948
invoke-virtual {v3, v4}, Ljava/io/FileReader;->read([C)I
.line 4950
invoke-static {v4}, Ljava/lang/String;->valueOf([C)Ljava/lang/String;
move-result-object v2
.line 4951
const/4 v5, 0x0
const/4 v6, 0x2
invoke-virtual {v2, v5, v6}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Integer;->intValue()I
move-result v2
.line 4952
const/4 v5, 0x0
aget-char v5, v4, v5
const/16 v6, 0x31
if-ne v5, v6, :cond_42
const/4 v5, 0x1
aget-char v5, v4, v5
if-ne v5, v7, :cond_42
const/4 v5, 0x2
aget-char v4, v4, v5
:try_end_3e
.catch Ljava/lang/Exception; {:try_start_4 .. :try_end_3e} :catch_50
if-ne v4, v7, :cond_42
.line 4953
const/16 v2, 0x64
.line 4956
:cond_42
:try_start_42
invoke-virtual {v3}, Ljava/io/FileReader;->close()V
:try_end_45
.catch Ljava/lang/Exception; {:try_start_42 .. :try_end_45} :catch_4b
.line 4961
:goto_45
const/16 v3, 0xf
if-ge v2, v3, :cond_6d
:goto_49
move v1, v0
goto :goto_11
.line 4957
:catch_4b
move-exception v3
.line 4959
:try_start_4c
invoke-virtual {v3}, Ljava/lang/Exception;->printStackTrace()V
:try_end_4f
.catch Ljava/lang/Exception; {:try_start_4c .. :try_end_4f} :catch_50
goto :goto_45
.line 4963
:catch_50
move-exception v0
.line 4965
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
.line 4966
const-string v2, "OppoCamera"
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "isForbidFlash: e = "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
goto :goto_11
:cond_6d
move v0, v1
.line 4961
goto :goto_49
.end method
if you look at the smali code and walk through/compare it with the java code, you'll see different ways to tackling the problem
A) just simply return v1 (=FALSE) on the first line. side effects: you bypass the try/catch statements, dunno if you'll break anything
B) - my approach
the (if i>= 15) check). 0xf hex is the same as 15 decimal.
Change 0xf to 0x0, so it'll check if (i >= 0), i.e. at least 0% battery
Code:
.line 4961
:goto_45
const/16 v3, [B]0xf[/B]
if-ge v2, v3, :cond_6d
C) you could also target the assignment of the flag inside the if/else statement.
#assignments of the registers at the beginning of function
Code:
const/4 v0, 0x1 # true
const/4 v1, 0x0 # false
#what happens inside the condition=true block, until the return statement. condition = enough battery
the "#" lines are my comments
Code:
if-ge v2, v3, :cond_6d
#jump to :cond_6d
:cond_6d
move v0, v1 #v0 = v1 , both = FALSE(since v1 was initialize to FALSE)
.line 4961
goto :goto_49
#jump to the :goto_49 tag
:goto_49
move v1, v0 # v1 = v0, both = FALSE
goto :goto_11
#jump to the :goto_11 tag
:goto_11
return v1 # return v1 = FALSE <- result we want
#what happens inside the condition=false block, until the return statement. condition = not enough battery
Code:
if-ge v2, v3, :cond_6d # we don't jump, since condition failed. follow the next line
:goto_49
move v1, v0 # v1 = v0, both = TRUE(since v0 was initialized to TRUE)
goto :goto_11
#jump to the :goto_11 tag
:goto_11
return v1 # return v1 = TRUE <- flash forbidden
you could change v0 to initialize to FALSE as well... not sure about the side effects though
(I thought they enabled ISO selection in the latest firmware anyway?)
for the ISO selection, here's how I did it
the compiled apk already had the values, arrays, setup for the ISO.
Code:
res/xml/camera_preferences.xml:16: <IconListPreference camera:title="@string/pref_camera_iso_title" camera:key="[U][B]pref_camera_iso_key[/B][/U]" camera:defaultValue="@string/pref_camera_iso_default" camera:entryValues="@array/pref_camera_iso_entryvalues" camera:entries="@array/pref_camera_iso_entries" camera:singleIcon="@drawable/oppo_ic_iso" />
they just didn't enable the list preference in the code.
So, I looked at where they initialized that settings page, and add the pref_camera_iso_key into that array.
com/android/camera/Camera.java
Code:
as1 = (new String[] {
"pref_camera_picturesize_key", "pref_camera_time_lapse_key", "pref_camera_sound_key", "pref_camera_smile_key", "pref_camera_recordlocation_key", "pref_camera_guideline_key", "pref_camera_restore_default"
});
I need one new element inside that list
smali change
Code:
- const/4 v0, 0x7
+ const/16 v0, 0x8 #need to increase size of the list from 0x7 to 0x8
new-array v0, v0, [Ljava/lang/String;
@@ -3838,6 +3838,12 @@
const/4 v2, 0x6
+ const-string v3, "pref_camera_iso_key" # put the inserted value before pref_camera_restore_default
+
+ aput-object v3, v0, v2
+
+ const/4 v2, 0x7
+
const-string v3, "pref_camera_restore_default"
aput-object v3, v0, v2
For the timer change:
you want to change this function
Camera.java
Code:
public void onSharedPreferenceChanged()
{
Debugger.d("OppoCamera", "onSharedPreferenceChanged");
if(super.mPaused)
return;
if("[B]on[/B]".equals(mPreferences.getString("pref_camera_time_lapse_key", getString(0x7f0b0177))))
mTimerSnapShotManager.setTime([B]5[/B]);
instead of just one if statement that checks if "on" selected-> 5 second, you want
if "3" -> 3 seconds
if "5" -> 5 seconds
if "10" -> 10 seconds
if "20" -> 20 seconds
(i mean ideally, you want a slider bar on the preferences page that allows you to set any time you want... but that change is extremely difficult, as you need to touch multiple parts of the java class)
therefore, you need two things
smali: duplicate the entire [if statement and mTimerSnapShotManager.setTime()] section, modify "on" and "5" variables accordingly
arrays.xml and other *.xml changes: add in entries for the 3, 5, 10, 20, remove the "on" entry
then you go test... then you find out the app crashes.
you debug, and figure out that the program flashes the "5" icon when 5s left, "4" icon when 4s left..... if there are 20s left, it fails to load the "20" icon (since it doesn't exist), and crashes
it's too much trouble to make your own 6-20.jpg, insert into the package... it's extremely difficult to replace the [load "x" icon when x seconds left] with [somehow display the text "x" when x seconds left, instead of loading an icon]
so, for the icon-loading part, check if it's more than 5. If it is, set the variable to 5, load the 5 icon
Code:
+ add-int/lit8 v2, v0, -0x5
+
+ if-ltz v2, :cond_reset
+
+ const/4 v0, 0x4
+
+ :cond_reset
GREAT!! for the flash check the 'B way' si exactly what I did. I have a basic knowledge of assembly programming (I'm also a C,C# developer) but how the hell did you get the java code? I deodexed the apk with universal deodexer and decompiled with apktool, it's not the right way to do it?
Thanks for the very detailed explaination! It helps me so much!
Tapatalked via Oppo Find 5
badworker said:
GREAT!! for the flash check the 'B way' si exactly what I did. I have a basic knowledge of assembly programming (I'm also a C,C# developer) but how the hell did you get the java code? I deodexed the apk with universal deodexer and decompiled with apktool, it's not the right way to do it?
Thanks for the very detailed explaination! It helps me so much!
Tapatalked via Oppo Find 5
Click to expand...
Click to collapse
there are smali -> java source code decompilers. typcially, they don't give you a clean source code that actually compiles (some stuff fails to decompile properly), but it's good enough to read (better than reading smali)
(after doing deodex + apktool decompile)i use d2j-dex2jar to convert from smali-> jar
then either decompile-jad or jd-gui to convert from jar-> java source code. Sometimes, one of the tool fails to convert and I'll have to use the other
other decompilers: androguard (haven't tried this one yet)
with the source code, you can
1) read it, and make changes correspondingly in smali (this is what I do)
2) try to make the entire thing compilable, and then make modifications in java source code
3) make relevant parts of it compilable (easier than (2), make changes, compare the diffs in smali, merge the diffs into the original smali
I haven't tried steps 2, 3. those two steps are probably useful if you are making major changes(more than 10 lines)
Any chance that i can use the Oppo Camera ona Rom like Illusion?
Bump. Is this dead also?
Sent from my Find 5 using Tapatalk
killerskincanoe said:
Bump. Is this dead also?
Sent from my Find 5 using Tapatalk
Click to expand...
Click to collapse
probably
still have my Find 5, but not really using it... haven't kept up with the latest CM/ColorOS releases, so this apk probably doesn't work on the new releases
If the new APKs don't contain these features, do it yourself? I've posted how to do this hack in smali...
I will be compiling all my mods and other folks mods in this thread!!
[Guide How-to] Verizon Note 4 Remove CD Installer & ASEC
This removes the annoying CD installer that pops up when you plug into your computer and your phone will go straight to MTP.
Enjoy!!
Remove CD Installer Download: http://d-h.st/Wm7
Just flash with TWRP
[Guide How-to] Verizon Note 4 Enable Native Call Recording
Smali edit for InCallUI.apk:
com/android/services/telephony/common/PhoneFeature.smali
Add the lines that are highlighted in RED
Code:
const-string v3, "CscFeature_VoiceCall_ConfigRecording"
invoke-virtual {v0, v3}, Lcom/sec/android/app/CscFeature;->getString(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
[COLOR="Red"]const-string v0, "RecordingAllowed"[/COLOR]
.line 1693
sget-object v3, Lcom/android/services/telephony/common/PhoneFeature;->mFeatureList:Ljava/util/HashMap;
const-string v6, "voice_call_recording"
const-string v7, "RecordingAllowed"
const-string v3, "CscFeature_VoiceCall_ConfigRecording"
invoke-virtual {v0, v3}, Lcom/sec/android/app/CscFeature;->getString(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v0, "RecordingAllowed"
.line 1693
sget-object v3, Lcom/android/services/telephony/common/PhoneFeature;->mFeatureList:Ljava/util/HashMap;
const-string v6, "voice_call_recording"
const-string v7, "RecordingAllowed"
For those not capable of doing smali edits just flash this via TWRP. Enable Call Recording
[Guide How-to] Remove Lockscreen Carrier
This removes the lockscreen carrier text.
Keyguard.apk smali edit:
smali/com/android/keyguard/CarrierText.smali:
Change if-nez to if-eqz in the indicated edit in BLUE:
Code:
.method private static concatenate(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
.locals 5
.param p0, "plmn" # Ljava/lang/CharSequence;
.param p1, "spn" # Ljava/lang/CharSequence;
.prologue
const/4 v2, 0x1
const/4 v3, 0x0
.line 310
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v4
[COLOR="Blue"]if-eqz[/COLOR] v4, :cond_1
move v0, v2
For those of you not capable of smali edit's, just flash this via TWRP Remove Lock Screen Carrier Text
[Guide How-to] Remove Safe Volume Warning
This removes the safe volume warning that pops up when you turn up the volume beyond a certain point
This mod requires modifying framework.jar
Edit smali/android/media/AudioService.smali:
Changes are in .method private checkSafeMediaVolume(III)Z
, new lines are in BLUE:
Code:
iget-object v6, p0, Landroid/media/AudioService;->mSafeMediaVolumeState:Ljava/lang/Integer;
invoke-virtual {v6}, Ljava/lang/Integer;->intValue()I
move-result v6
[COLOR="Blue"]goto :goto_td[/COLOR]
if-ne v6, v7, :cond_4
Code:
goto :goto_1
.line 6873
.end local v0 # "e":Ljava/lang/Exception;
.end local v1 # "pm":Landroid/os/PowerManager;
.end local v3 # "wl":Landroid/os/PowerManager$WakeLock;
[COLOR="Blue"]:goto_td[/COLOR]
:cond_4
monitor-exit v5
:try_end_3
.catchall {:try_start_3 .. :try_end_3} :catchall_0
goto :goto_0
.end method
For those not capable of smali edit's just flash this in TWRP Remove Safe Volume Warning
[Guide How-To] Enable Call & MSG Blocking
This enables call and msg blocking natively.
Simple CSC edit.
system/csc/feature.xml edit
Must be inserted BEFORE
</FeatureSet>
</SamsungMobileFeature>
(** please note that feature.xml can be overwritten so this may not stick if using a third party software like Xposed)
Code:
<CscFeature_Setting_EnableMenuBlockCallMsg>TRUE</CscFeature_Setting_EnableMenuBlockCallMsg>
For those of you not capable of this edit, just flash this with TWRP Native Call & Message Block
[Guide How-to] Replace Recents with Menu
Keylayout edits:
system/usr/keylayout/Generic.kl
Change key 254 from APP_SWITCH to MENU
key 254 MENU
Download: Generic.kl
Now Recent Apps capacitive key is Menu (single-press) and Search (long-press).
However, we have now lost access to recent apps via a hardware key.
[Guide How-to] VZW Note 4 4 Way Reboot Power Menu EPM
This will work with Odex or Deodexed Rom. To see the 4 way Menu you must hit restart on the Primary Menu!!!
First grab your Deodexed android.policy.jar from system/framework
Decompile it with APKTOOL. Look in smali\com\android\internal\policy\impl\
Find GlobalActions$SinglePressAction.smali and open with NotePad++
Look for this:
Code:
.class abstract Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.super Ljava/lang/Object;
.source "GlobalActions.java"
# interfaces
.implements Lcom/android/internal/policy/impl/GlobalActions$Action;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/android/internal/policy/impl/GlobalActions;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# instance fields
.field public customAction:I
.field public isKnoxCustom:Z
.field private final mIcon:Landroid/graphics/drawable/Drawable;
.field private final mIconResId:I
.field mLayoutId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method protected constructor <init>(II)V
.locals 2
.param p1, "iconResId" # I
.param p2, "messageResId" # I
Add in the Red Text to look like this:
Code:
.class abstract Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.super Ljava/lang/Object;
.source "GlobalActions.java"
# interfaces
.implements Lcom/android/internal/policy/impl/GlobalActions$Action;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/android/internal/policy/impl/GlobalActions;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
[COLOR="Red"]# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;[/COLOR]
# instance fields
.field public customAction:I
.field public isKnoxCustom:Z
.field private final mIcon:Landroid/graphics/drawable/Drawable;
.field private final mIconResId:I
.field mLayoutId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
[COLOR="Red"].method static constructor <clinit>()V
.locals 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reboot"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Hot Boot"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Download"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method[/COLOR]
.method protected constructor <init>(II)V
.locals 2
.param p1, "iconResId" # I
.param p2, "messageResId" # I
Save file and look for GlobalActions.smali in the same folder.
Find this:
Code:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mPowerOff:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1126
new-instance v3, Lcom/android/internal/policy/impl/GlobalActions$8;
const-string v2, "VZW"
sget-object v4, Lcom/android/internal/policy/impl/GlobalActions;->mSalesCode:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_3
const v2, 0x1080b2d
:goto_2
const v4, 0x10401cf
move-object/from16 v0, p0
invoke-direct {v3, v0, v2, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1164
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
Change the red text to look like this:
Code:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mPowerOff:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1126
new-instance v3, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];
const-string v2, "VZW"
sget-object v4, Lcom/android/internal/policy/impl/GlobalActions;->mSalesCode:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_3
const v2, 0x1080b2d
:goto_2
const v4, 0x10401cf
move-object/from16 v0, p0
invoke-direct {v3, v0, v2, v4}, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1164
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
Save file.
Add the 3 smali files in this zip to the same folder: Smali-Files-Zip
Now recompile. That's it.
For those of you not able to edit smali. Here is a zip flashable with TWRP. VZW Note 4 4 Way EPM Menu
To see the 4 way Menu you must hit restart on the Primary Menu!!!
Enjoy!!!
Framework Mods- Note 4 Native WiFi Tether, All Rotations, Safe Media Volume Disabled, Dreams enabled, Battery Critical Warnings lowered to 1%.
Here is the download: Framework Mods
Here is the download to return to stock: Stock Framework
Enjoy!!!
[Guide How-to] Remove NFC notification icon in status bar
First grab your Features.xml from /system/csc/
Open with Notepad++ and look for following text:
Code:
<!-- NFC -->
<CscFeature_NFC_SetSecureEventType>ISIS</CscFeature_NFC_SetSecureEventType>
<CscFeature_NFC_StatusBarIconType>Vzw</CscFeature_NFC_StatusBarIconType>
<CscFeature_SmartcardSvc_SetAccessControlType>GPAC, MODE1</CscFeature_SmartcardSvc_SetAccessControlType>
<CscFeature_SmartcardSvc_HideTerminalCapability>eSE</CscFeature_SmartcardSvc_HideTerminalCapability>
<CscFeature_NFC_CardModeRoutingTypeForUicc>ROUTE_ON_WHEN_SCREEN_UNLOCK</CscFeature_NFC_CardModeRoutingTypeForUicc>
<CscFeature_NFC_EnableSecurityPromptPopup>all</CscFeature_NFC_EnableSecurityPromptPopup>
<CscFeature_NFC_EnableInvalidTagPopup>true</CscFeature_NFC_EnableInvalidTagPopup>
<CscFeature_NFC_ConfigAdvancedSettings>Disable</CscFeature_NFC_ConfigAdvancedSettings>
<CscFeature_NFC_DefaultCardModeConfig>DH:UICC</CscFeature_NFC_DefaultCardModeConfig>
Change the red text to look like this:
Code:
<!-- NFC -->
<CscFeature_NFC_SetSecureEventType>ISIS</CscFeature_NFC_SetSecureEventType>
<CscFeature_NFC_StatusBarIconType>[COLOR="Red"]none[/COLOR]</CscFeature_NFC_StatusBarIconType>
<CscFeature_SmartcardSvc_SetAccessControlType>GPAC, MODE1</CscFeature_SmartcardSvc_SetAccessControlType>
<CscFeature_SmartcardSvc_HideTerminalCapability>eSE</CscFeature_SmartcardSvc_HideTerminalCapability>
<CscFeature_NFC_CardModeRoutingTypeForUicc>ROUTE_ON_WHEN_SCREEN_UNLOCK</CscFeature_NFC_CardModeRoutingTypeForUicc>
<CscFeature_NFC_EnableSecurityPromptPopup>all</CscFeature_NFC_EnableSecurityPromptPopup>
<CscFeature_NFC_EnableInvalidTagPopup>true</CscFeature_NFC_EnableInvalidTagPopup>
<CscFeature_NFC_ConfigAdvancedSettings>Disable</CscFeature_NFC_ConfigAdvancedSettings>
<CscFeature_NFC_DefaultCardModeConfig>DH:UICC</CscFeature_NFC_DefaultCardModeConfig>
Save file and copy back to /system/csc, reboot and boom its gone!!!
Enjoy!!
[Guide How-to] Enable Private Mode with a deodexed Rom and SecureStorage=false
First thing you need to do is grab PersonalPageService.apk from system/priv-app
Decompile with APKTOOL
Find PersonalPageService\smali\com\samsung\android\personalpage\service\util\SecureProperties.smali open with Notepad++
Find the follow code:
Code:
.method public constructor <init>(Landroid/content/Context;)V
.locals 2
.param p1, "context" # Landroid/content/Context;
.prologue
const/4 v1, 0x1
.line 61
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 54
const/4 v0, 0x0
iput-object v0, p0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->mImpl:Lcom/samsung/android/personalpage/service/util/SecureProperties$PropertiesImpl;
.line 63
invoke-static {}, Landroid/os/Debug;->isProductShip()I
move-result v0
if-nez v0, :cond_3
.line 64
invoke-static {}, Lcom/sec/android/securestorage/SecureStorage;->isSupported()Z
move-result v0
if-nez v0, :cond_2
.line 65
const/4 v0, 0x0
sput-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
.line 72
:goto_0
sget-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
if-eqz v0, :cond_0
Replace the items in Red like this:
Code:
.method public constructor <init>(Landroid/content/Context;)V
.locals 2
.param p1, "context" # Landroid/content/Context;
.prologue
const/4 v1, 0x1
.line 61
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 54
const/4 v0, 0x0
iput-object v0, p0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->mImpl:Lcom/samsung/android/personalpage/service/util/SecureProperties$PropertiesImpl;
.line 63
invoke-static {}, Landroid/os/Debug;->isProductShip()I
move-result v0
[COLOR="Red"]if-nez v0, :cond_0[/COLOR]
.line 64
invoke-static {}, Lcom/sec/android/securestorage/SecureStorage;->isSupported()Z
move-result v0
[COLOR="Red"]if-nez v0, :cond_0[/COLOR]
.line 65
const/4 v0, 0x0
sput-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
.line 72
:goto_0
sget-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
if-eqz v0, :cond_0
Save file and compile apk. Push to system/priv-app
For those not capable of changing smali files here is a flashable zip: PersonalPageService.apk
Enjoy!!!
[Guide How-To] Enable Lockscreen Rotation
First grab Keyguard.apk from system/priv-app
Decompile with APKTOOL.
Open smali file smali/com/android/keyguard/KeyguardViewManager.smali
Look for the following:
Code:
.method private shouldEnableScreenRotation()Z
.locals 3
.prologue
const/4 v1, 0x0
.line 249
iget-object v2, p0, Lcom/android/keyguard/KeyguardViewManager;->mContext:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object v0
.line 250
.local v0, "res":Landroid/content/res/Resources;
const-string v2, "lockscreen.rot_override"
invoke-static {v2, v1}, Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
move-result v2
Replace the Red text to look like this:
Code:
Code:
.method private shouldEnableScreenRotation()Z
.locals 3
.prologue
[COLOR="Red"]const/4 v1, 0x1[/COLOR]
.line 249
iget-object v2, p0, Lcom/android/keyguard/KeyguardViewManager;->mContext:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object v0
.line 250
.local v0, "res":Landroid/content/res/Resources;
const-string v2, "lockscreen.rot_override"
invoke-static {v2, v1}, Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
move-result v2
Compile and push to system/priv-app
For those that are unable to edit smali here is a flashable zip: LockSceen Rotation
Enjoy!!
[Guide How-to] Disable Screen Wake Plugged/Unplugged
First grab your services.jar from system/framework and decompile with APKTOOL
Find smali\com\android\server\power\PowerManagerService .smali and open PowerManagerService with Notepad++
Look for the following:
Code:
.method private shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
.locals 4
.param p1, "wasPowered" # Z
.param p2, "oldPlugType" # I
.param p3, "dockedOnWirelessCharger" # Z
.prologue
const/4 v1, 0x1
const/4 v0, 0x0
.line 2216
iget-boolean v2, p0, Lcom/android/server/power/PowerManagerService;->mWakeUpWhenPluggedOrUnpluggedConfig:Z
if-nez v2, :cond_1
Change to Red text to look like this:
Code:
.method private shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
.locals 4
.param p1, "wasPowered" # Z
.param p2, "oldPlugType" # I
.param p3, "dockedOnWirelessCharger" # Z
.prologue
[COLOR="Red"]const/4 v1, 0x0[/COLOR]
const/4 v0, 0x0
.line 2216
iget-boolean v2, p0, Lcom/android/server/power/PowerManagerService;->mWakeUpWhenPluggedOrUnpluggedConfig:Z
if-nez v2, :cond_1
That's it. Compile and push to system/framework
For those of you not capable of editing smali files here is a flashable zip: Disable Screen Wake Plug/unpluged
Enjoy!!!
[Guide How-to] Bluetooth Scan Dialog Removal
First grab your SecSettings.apk from system/priv-app and decompile with APKTOOL
Find smali/com/android/settings/Bluetooth/BluetoothScanDialog.smali
Look for the follow in .method private initialize()V method:
Code:
.line 79
new-instance v4, Lcom/android/settings/bluetooth/BluetoothScanDialog$3;
invoke-direct {v4, p0, v0}, Lcom/android/settings/bluetooth/BluetoothScanDialog$3;-><init>(Lcom/android/settings/bluetooth/BluetoothScanDialog;Landroid/app/AlertDialog;)V
invoke-virtual {v0, v4}, Landroid/app/Dialog;->setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V
.line 86
[COLOR="Red"]invoke-virtual {v0}, Landroid/app/Dialog;->show()V[/COLOR]
.line 87
return-void
.end method
Delete the text in Red, save file and compile. That's it. push to system/priv-app
Enjoy!!!
Flashlight Toggle & Battery Stats Toggle Mod Flashable-Settings-About Phone-Status-OFFICIAL Zip Updated 12-3-2014
Here is the flashable Flashlight Toggle Mod: VZW Flash Light Battery Stats Toggle Mod-Official Status
YOU MUST WAIT AT LEAST 5-10 MINS AFTER FLASHING FOR THE MOD TO WORK.
Some of you might also have to add "Flashlight" to your settings DB via SQLite. To see the toggle.
1) Download sqlite editor app. I got it from here.
2) Open the app and give it root permissions. It should populate a list.
3) Scroll and Tap the "Settings Storage"
4) Tap "Settings.db"
5) Tap "System"
6) Scroll down until you find "notification_panel_active_app_list", tap to highlight it. I noticed its a little hard to get it highlighted because it seems to want to highlight the one under it. So you might have to tap the one right above it to get it highlighted. Make sure its the notification_panel_active_app_list, and I also updated my notification_panel_active_app_list_reset NOT the notification_panel_default_active_app_list. I picked the wrong one the first time and it didnt work.
7) Once it is highlighted tap the phones menu button.
8) Tap "Edit Record"
9) You'll see a list of all the toggles that are currently enabled to show in notification area.
10) At the bottom of the list or anywhere else in the list add ; and the words Flashlight and Battery then another ;. So it will look like this at the end. ;TouchSensitivity;Flashlight;Battery; Then press Save.
11) Reboot and you should have a Flashlight and a Battery Stats toggle now. You can now use the edit feature and move it anywhere you want in the list of toggles.
This might also have a positive side effect of the following:
When you go to Settings-About Phone-Status it might say OFFICIAL!!!
Enjoy!!!
Enable Tab view in Settings
First grab your SecSettings.apk from system/priv-app
Decompile with APKTOOL and open res.values/bools with Notepad++
look for the following 2 lines:
Code:
<bool name="settings_list">false</bool>
<bool name="settings_grid">true</bool>
Change them to look like this:
Code:
<bool name="settings_list">[COLOR="Red"]true[/COLOR]</bool>
<bool name="settings_grid">[COLOR="Red"]false[/COLOR]</bool>
That's it. Compile and push to System/priv-app
Enjoy!!
How to enable Flashlight operation with Volume
First grab your SecSettings.apk from system/priv-app and decompile with APKTOOL.
Look in res/xml for display_settings_2014.xml and open with Notepad++
Add the following line in Red. When you are done look in settings-Display and you will see Torch Light options menu
Code:
<CheckBoxPreference android:title="@string/led_indicator_settings" android:key="key_simple_led_indicator_settings" android:summary="@string/led_indicator_settings_summary" android:widgetLayout="@touchwiz:layout/preference_widget_twcheckbox" />
[COLOR="Red"]<PreferenceScreen android:title="@string/torchlight_settings" android:key="torchlight" android:fragment="com.android.settings.torchlight.TorchlightSettings" />[/COLOR]
<ListPreference android:persistent="false" android:entries="@array/touch_key_light_entries" android:title="@string/touch_key_light" android:key="touch_key_light" android:summary="@string/touch_key_light_summary" android:widgetLayout="@layout/round_more_icon" android:entryValues="@array/touch_key_light_values" />
Compile and push to system/priv-app
That's it.
Enjoy!!!!
How to Enable add Apps Ops to Settings.
First grab SecSettings.apk from system/priv-app and decompile with APKTOOL
Get gridlist_settings_headers.xml from res/xml and edit with Notepad++
Look for:
Code:
<header android:icon="@drawable/ic_setting_grid_powersaving" android:id="@id/power_saving" android:title="@string/power_saving_mode_title_k" android:fragment="com.android.settings.powersavingmode.MenuPowerSavingModeSettings" />
and add right below it the following:
Code:
<header android:icon="@drawable/ic_settings_applicationpermissions" android:title="@string/app_ops_settings" android:fragment="com.android.settings.applications.AppOpsSummary" />
Save file and compile. That's it.
Push to system/priv-app
Enjoy!!!
Thanks EMSpilot looking forward to the list!
EMSpilot said:
I will be compiling all my mods and other folks mods in this thread!!
Verizon Note 4 Dev Phone Only Remove CD Installer & ASEC
This removes the annoying CD installer that pops up when you plug into your computer and your phone will go straight to MTP.
Enjoy!!
Remove CD Installer Download: http://d-h.st/Wm7
Just flash with TWRP
Click to expand...
Click to collapse
Great start!! Thanks. Hopefully many more will appear.
Works perfectly -- thanks!
Added a few new ones today!! Enjoy!!
Added a few new mods today!!!
Enjoy!!!
EMSpilot said:
Added a few new mods today!!!
Enjoy!!!
Click to expand...
Click to collapse
Thanks for the new mods, going to flash a few in a moment. as for the recents menu switcher, can something like gravitybox be used to restore the recents to a long press of the home button? or is this mod going to prevent that?
*nevermind im stupid and realized i could just do it myself. yes it does work that way*
EMSpilot said:
Added a few new mods today!!!
Enjoy!!!
Click to expand...
Click to collapse
Thanks man, good work.
@EMSpilot, thanks so much for posting these mods/guides. I just want to mention that, with respect to the guide to replace Recents with Menu, that you can leave that button alone and get the menu on pretty much any app by long-pressing the Recents button; and you can set your Home button to go to Search on long-press, without any mods. That way, you get to keep your Recents hardware key function.
By the way, I had a Note 3 where the Menu button was where that Recents button now is, and I have to admit the change in button configuration took some getting used to.
I will be doing recents to menu button as soon as i get my developer edition!!!
oneandroidnut said:
I will be doing recents to menu button as soon as i get my developer edition!!!
Click to expand...
Click to collapse
Same here.
Hey guys,
Can you give me more info on how to edit the generic.kl file to switch out the recent apps button to the menu button? I SuperSU installed, and the phone is rooted, but when trying to save the file it always errors out. I am using ES file explorer with the included ES note editor.
Nice work EMS Thank!!
Polishzx said:
Hey guys,
Can you give me more info on how to edit the generic.kl file to switch out the recent apps button to the menu button? I SuperSU installed, and the phone is rooted, but when trying to save the file it always errors out. I am using ES file explorer with the included ES note editor.
Click to expand...
Click to collapse
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
EMSpilot said:
I will be compiling all my mods and other folks mods in this thread!!
[Verizon Note 4 Enable Native Call Recording
Thank you for the mod. I installed the zip with TWRP and rebooted the phone. On the dial screen, the former "+" button is now a "Record" button. When not on a call, it is grayed out, and when a call is initiated, it becomes black / active. When pressed, shows press, but nothing happens. Seems to do nothing in Native mode.
When I try to use TWRecord from xposed (made for a Note 3) nothing works, When I try Wanam (through drop down mwnu, button was switched back to "+"), I get a "can't record while a media search is running" popup. I look through running apps but can find no applicable app to be responsible for a media search. Have I done something wrong?
Once native call recording is enabled, do I need to install an app to manage the recording, or is there an internal app that will do so? What directory do the recordings go in if managed natively? What might be running a media search and how do I stop it?
Couldn't figure it out -- I must have unbloated the wrong things. Used a TWRP restore and now it works fine. Thank you very much!
Thank you very much for your patience and help in advance.
Click to expand...
Click to collapse
EMSpilot said:
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
Click to expand...
Click to collapse
WOW... I can't believe I missed that. Thank you! The tweaks are fantastic. :good:
EMSpilot said:
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
Click to expand...
Click to collapse
Hi,
Thank you for the bunch of downloads to modify the phone!
I saw that you mentioned a way you found to not show the phone was rooted..
Would you be able to post up a download to show normal as your phone shows now?
Thank you for your help,
Bryan
Official Status
trapperjohn said:
Hi,
Thank you for the bunch of downloads to modify the phone!
I saw that you mentioned a way you found to not show the phone was rooted..
Would you be able to post up a download to show normal as your phone shows now?
Thank you for your help,
Bryan
Click to expand...
Click to collapse
I will not be posting this mod until I have fully tested it.
Thanks
EMSpilot said:
I will not be posting this mod until I have fully tested it.
Thanks
Click to expand...
Click to collapse
Ok do you think it will be awhile would like to have it b4 I get my N4 so I can do it right in the beginning.
Not trying to rush at all but thus is a big deal showing normal if needing to send it back for warranty.
Thank you for your help,
Bryan
EMSpilot said:
I will not be posting this mod until I have fully tested it.
Thanks
Click to expand...
Click to collapse
Probably for the best, haha. Curious, from what you've tested so far, does this avoid tripping Knox as well, effectively leaving your device under warranty in the event of a hardware failure? That's my only hang-up with rooting this, is that Samsung kills your warranty. Which I totally get for software, but if my power or home button stops working in a couple months, I'd like to be able to have it fixed...
Thanks for all of your work!
Any ideas how to disable the warning when Fingerprint scanning is enabled for the lockscreen? If I screw up, I'd like to just try again, but at the moment, the phone insists on forcing me to click "ok" first, reminding me that I only have 4 more attempts before I have to enter the backup password.
-Thanks
was asked to make this statement,sorry for the English ,it's Google translator
result http://forum.xda-developers.com/goo.../mod-3-power-menu-stock-5-0-1-deodex-t2997128
for made this, need 5.0.1 (deodex) http://forum.xda-developers.com/goo...-deodex-5-0-1-app-priv-app-framework-t2994027
for decompile im use ApkTools200RC3m http://d-h.st/26rF
part 1
decompile framework-res.apk
open \framework-res\res\values\arrays.xml
looking for <item>power</item> immediately below this line inserted
Code:
<item>reboot</item>
<item>recovery</item>
then immediately open strings.xml and add at the end
Code:
<string name="reboot_recovery">Recovery</string>
same thing in the folder values-ru (or similar for your country)
Code:
<string name="reboot_recovery">Рекавери</string>
example:
values-ru (for Russia)
values-it (for Italy)
and etc....
from arhive framework add files
compile ,then assembled renamed framework222-res.apk and decompile again (that would be assigned id)
take away C:\ApkTools200RC3m\framework222-res\res\values\public.xml in the main that
(replaced the one that is there on this)
open public.xml in the editor (we'll be here to watch the assigned id)
collect ...
part 2
decompile android.policy.jar
from arhive policy add files
open GlobalActions.smali
paste below this line 20: Lcom/android/internal/policy/impl/GlobalActions$MyAdapter;,
the following:
Code:
Lcom/android/internal/policy/impl/GlobalActions$RebootAction;,
Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;,
paste below this line 35: .field private static final GLOBAL_ACTION_KEY_POWER:Ljava/lang/String; = "power"
the following:
Code:
.field private static final GLOBAL_ACTION_KEY_REBOOT:Ljava/lang/String; = "reboot"
.field private static final GLOBAL_ACTION_KEY_RECOVERY:Ljava/lang/String; = "recovery"
and delete this
.field private static final GLOBAL_ACTION_KEY_SETTINGS:Ljava/lang/String; = "settings"
field line 1026:
const-string v0, "airplane"
and replace the code from .line 275 to .line 276
Code:
:cond_3
const-string v0, "airplane"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
at
Code:
:cond_3
const-string v0, "reboot"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
.line 276
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
now find
const-string v0, "settings"
and replace the code from .line 290 to .line 292
Code:
:cond_7
const-string v0, "settings"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_8
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getSettingsAction()Lcom/android/internal/policy/impl/GlobalActions$Action;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
at
Code:
:cond_7
const-string v0, "recovery"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto/16 :goto_3
put the necessary files
give already moded GlobalActions.smali for that would compare if that
thanks for the tut
Thanks for the tutorial!
jermaine151 said:
Thanks for the tutorial! Where do I put the ID's in GlobalActions$RebootAction.smali?
Code:
.line 367
const v0, 0x1080766
const v1, 0x10403c7
Click to expand...
Click to collapse
GlobalActions$RebootRecovery = is responsible for the overload during recovery
GlobalActions$RebootAction = for reboot
they need to check out icon's id and name id
id in public.xml from framework-res
GlobalActions$RebootAction
.line 367
const v0, 0x1080766 this icon reboot <public type="drawable" name="ic_reboot" id="0x01080766" />
const v1, 0x10403c7 its <public type="string" name="factorytest_reboot" id="0x010403c7" />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GlobalActions$RebootRecovery
.line 367
const v0, 0x1080767 this icon recovery <public type="drawable" name="ic_recovery" id="0x01080767" />
const v1, 0x10406c5 its <public type="string" name="reboot_recovery" id="0x010406c5" />
excellent job man!! thanks :good:
garynych said:
GlobalActions$RebootRecovery = is responsible for the overload during recovery
GlobalActions$RebootAction = for reboot
they need to check out icon's id and name id
id in public.xml from framework-res
GlobalActions$RebootAction
.line 367
const v0, 0x1080766 this icon reboot <public type="drawable" name="ic_reboot" id="0x01080766" />
const v1, 0x10403c7 its <public type="string" name="factorytest_reboot" id="0x010403c7" />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GlobalActions$RebootRecovery
.line 367
const v0, 0x1080767 this icon recovery <public type="drawable" name="ic_recovery" id="0x01080767" />
const v1, 0x10406c5 its <public type="string" name="reboot_recovery" id="0x010406c5" />
Click to expand...
Click to collapse
Thanks Gary! I appreciate it!
garynych said:
was asked to make this statement,sorry for the English ,it's Google translator
result http://forum.xda-developers.com/goo.../mod-3-power-menu-stock-5-0-1-deodex-t2997128
for made this, need 5.0.1 (deodex) http://forum.xda-developers.com/goo...-deodex-5-0-1-app-priv-app-framework-t2994027
for decompile im use ApkTools200RC3m http://d-h.st/26rF
part 1
decompile framework-res.apk
open \framework-res\res\values\arrays.xml
looking for <item>power</item> immediately below this line inserted
Code:
<item>reboot</item>
<item>recovery</item>
then immediately open strings.xml and add at the end
Code:
<string name="reboot_recovery">Recovery</string>
same thing in the folder values-ru (or similar for your country)
Code:
<string name="reboot_recovery">Рекавери</string>
example:
values-ru (for Russia)
values-it (for Italy)
and etc....
from arhive framework add files
compile ,then assembled renamed framework222-res.apk and decompile again (that would be assigned id)
take away C:\ApkTools200RC3m\framework222-res\res\values\public.xml in the main that
(replaced the one that is there on this)
open public.xml in the editor (we'll be here to watch the assigned id)
collect ...
part 2
decompile android.policy.jar
from arhive policy add files
open GlobalActions.smali
paste below this line 20: Lcom/android/internal/policy/impl/GlobalActions$MyAdapter;,
the following:
Code:
Lcom/android/internal/policy/impl/GlobalActions$RebootAction;,
Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;,
paste below this line 35: .field private static final GLOBAL_ACTION_KEY_POWER:Ljava/lang/String; = "power"
the following:
Code:
.field private static final GLOBAL_ACTION_KEY_REBOOT:Ljava/lang/String; = "reboot"
.field private static final GLOBAL_ACTION_KEY_RECOVERY:Ljava/lang/String; = "recovery"
and delete this
.field private static final GLOBAL_ACTION_KEY_SETTINGS:Ljava/lang/String; = "settings"
field line 1026:
const-string v0, "airplane"
and replace the code from .line 275 to .line 276
Code:
:cond_3
const-string v0, "airplane"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
at
Code:
:cond_3
const-string v0, "reboot"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
.line 276
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
now find
const-string v0, "settings"
and replace the code from .line 290 to .line 292
Code:
:cond_7
const-string v0, "settings"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_8
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getSettingsAction()Lcom/android/internal/policy/impl/GlobalActions$Action;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
at
Code:
:cond_7
const-string v0, "recovery"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto/16 :goto_3
put the necessary files
give already moded GlobalActions.smali for that would compare if that
Click to expand...
Click to collapse
aweome!!
I wander if works add a bootloader and make it a 4 way :laugh:... will try that on Moto G 3 way, and if all good a 4 way :fingers-crossed:...
tks for share...
baybutcher27 said:
I wander if works add a bootloader and make it a 4 way :laugh:
Click to expand...
Click to collapse
Add Safe Mode and make it 5 Way.
Thank you for this tutorial, after deodexing and some minor changes works fine on my Moto G running GPe 5.0.1 [emoji106]
{
"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"
}
▪◼ Tapatalk ♦ Moto G ◼▪
Problem with Nexus 6 that I dont understand...
The menu works perfect but the mod breaks the ability to tether! Strange?
I have a log cat here of the tether fail errors if you want to look at it: http://pastebin.com/Nhesq4sV
Maybe you can help us figure it out for Nexus 6.
Hey there,
first off, I am neither an experienced android-developer in any way nor am I able to support any questions regarding to this tutorial. Im new to this stuff, but kinda good in figuring stuff out, and I made it work. All Props go out to venkat kamesh, a guy over in aSony-Forum, who did a great job in implementing a "Show/Hide Brightness Slider"-Feature; one of the features I wait for the most when it comes to cm13.- The static slider is useless to me, cause I use the "cm hidden slider", this feature where you just swype over the status bar to adjust brigthness.
This workflow was reproducable on 2 international m8 devices running cm13 from Jan. 25, besides the Team M8 Kernel. In the following I will fullquote the original developer, with red comments in brackets on the spots where something differs to the cm13 m8 version of the guide.
As I said, Im not very experienced, and dont really understand everything what is happening there (especially regarding security when it comes to private/protected methods and stuff), so please be kind and feel free to optimize my work as much as you want/can
venkat kamesh said:
Hello guys
Happy new Year for first
This is my first tut in This new year 2016
All you need is Deodexed SystemUI.apk and Settings.apk
1. Decompile SystemUI.apk
2. Open SystemUI.apk/smali/com/android/systemui/qs/QSPanel.smali
3. Find this code (just look for the method name, for me the method was protected, not private)
Code:
.field private mBrightnessPaddingTop:I
Below that add this code
Code:
.field private mBrightnessSliderEnabled:Z
4. Search for this Method
Code:
.method private setDetailRecord(Lcom/android/systemui/qs/QSPanel$Record;)V
and above that method add this complete method
Code:
.method private isBrightnessSliderEnabled()I
.locals 4
const/4 v3, 0x0
iget-object v0, p0, Lcom/android/systemui/qs/QSPanel;->mContext:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v1, "brightness_slider_show"
const/4 v2, 0x1
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-eqz v0, :cond_0
const/4 v3, 0x1
:cond_0
iput-boolean v3, p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessSliderEnabled:Z
return v3
.end method
5. Search for this method (just look for the method name, for me the method was protected, not private)
Code:
.method private showDetail(ZLcom/android/systemui/qs/QSPanel$Record;)V
Above that method, add this method (for me, there already was a method called "showBrightnessSlider", but I wasnt able to get it to work with the default one, so here, you have to delete the whole existing "showBrightnessSlider" method and paste the new one. Also, the guide states a private method here, but as the following steps include an invoke-virtual, we have to change it to protected)
Code:
.method private [COLOR="red"](protected)[/COLOR] showBrightnessSlider()Z
.locals 5
const/16 v3, 0x8
const/4 v2, 0x0
const v1, 0x7f10012e (for me, as there already was a method called "showBrightnessSlider", I didnt use this hex value here, but instead looked my own actual id up in SystemUI:/res/value/public, then search for "brightness_slider" and use this id)
invoke-direct {p0}, Lcom/android/systemui/qs/QSPanel;->isBrightnessSliderEnabled()I
move-result v4
invoke-virtual {p0, v1}, Lcom/android/systemui/qs/QSPanel;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Lcom/android/systemui/settings/ToggleSlider;
if-eqz v4, :cond_0
iget-boolean v1, p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessSliderEnabled:Z
if-eqz v1, :cond_0
iget-object v1, p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessView:Landroid/view/View;
invoke-virtual {v1, v2}, Landroid/view/View;->setVisibility(I)V
invoke-virtual {v0, v2}, Lcom/android/systemui/settings/ToggleSlider;->setVisibility(I)V
:goto_0
invoke-virtual {p0}, Lcom/android/systemui/qs/QSPanel;->updateResources()V
iget-boolean v1, p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessSliderEnabled:Z
return v1
:cond_0
iget-object v1, p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessView:Landroid/view/View;
invoke-virtual {v1, v3}, Landroid/view/View;->setVisibility(I)V
invoke-virtual {v0, v3}, Lcom/android/systemui/settings/ToggleSlider;->setVisibility(I)V
goto :goto_0
.end method
6. Now Look for this Code (for me the whole code from step 6 was already there, so dont change anything here)
Code:
if-eqz p1, :[COLOR="red"]cond_3[/COLOR]
.line 216
iget-object [COLOR="Red"]v2[/COLOR], p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessController:Lcom/android/systemui/settings/BrightnessController;
Add the code above the .line 216 ( this .line 216 will not be same with all devices ) (as stated above, the here included invoke was already there for me, but with a virtual invoke; but I didnt change a thing here)
Code:
invoke-direct [COLOR="red"][/COLOR]{p0}, Lcom/android/systemui/qs/QSPanel;->showBrightnessSlider()Z
move-result [COLOR="red"]v2[/COLOR]
if-eqz [COLOR="red"]v2[/COLOR], :[COLOR="red"]cond_3[/COLOR]
Finally it looks like
Code:
if-eqz p1, [COLOR="blue"]:cond_3[/COLOR]
[COLOR="Red"] invoke-direct (invoke-virtual){p0}, Lcom/android/systemui/qs/QSPanel;->showBrightnessSlider()Z
move-result [COLOR="blue"]v2[/COLOR]
if-eqz [COLOR="blue"]v2[/COLOR], [COLOR="blue"]:cond_3[/COLOR][/COLOR]
.line 216
iget-object [COLOR="Blue"]v2[/COLOR], p0, Lcom/android/systemui/qs/QSPanel;->mBrightnessController:Lcom/android/systemui/settings/BrightnessController;
After adding that
replace this Public id
<public type="id" name="brightness_slider" id="0x7f10012e" />
6. Now compile the SystemUI.apk and sign it and replace
Now time to add in the settings look for post #2
Click to expand...
Click to collapse
venkat kamesh said:
Welcome to easy part on adding the option to hide/show in settings
Method 1
1. Decompile the settings.apk
2. Download this View attachment 3617395 and merge to your settings
3. Add the below code to your settings ( i had added to my own settings ) and your wish
Code:
<PreferenceScreen android:title="Statusbar Mod" android:key="statusmod" android:fragment="com.android.settings.rz.Statusmod" />
4. Compile it and Decompile and open
Settings.apk/smali/com/android/settings/rz/Statusmod.smali
5. Compare the Public ID and replace it and recompile
6. God you did man,,, now replace and have fun
Method 2 (actually, this method worked like a charm for me, didnt even had to download his file merge the settings)
1. Decompile the Settings.apk
2. Download this View attachment 3606026 and merge to your settings
3. Add the below code to your settings ( i had added to my own settings.xml )
you can add in settings.apk/res/xml/Dispaly_settings.xml
HTML:
<com.android.settings.cyanogenmod.SystemSettingSwitchPreference android:title="Brightness Slider" android:key="brightness_slider_show" android:defaultValue="0" android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden" />
and then compile/sign and replace your settings
OR
Try download this ROM Control application (View attachment 3616872 ) where you can Easily control
All you is just install and have fun
Thanks to @daxgirl for the app source
now have fun guys
Thanks to cyanogenmod
Dont Forget to mention me if you used my work
that feels me happy
Click to expand...
Click to collapse
And for the noobies like me: If you dont know anything about compiling/decompiling apks, get a can of coffee and make yourself ready to learn, I had fun debugging all this stuff and get this running, and I think now I know a little bit more, and you also will!
Some keywords for you, so you can spare yourself the googling (the parts I as a beginner struggled with): use apktools for de-/compiling, remember to download and install your frameworks from your phone, and for "signing", you have to copy the META-INF folder and the AndroidManifest.xml from the compiled old apk to the compiled new apk (with something like 7zip).
Have fun with it