Related
Hi there, since i'm on Xperia Ray but the devs is not many there, i think i'll post this on Arc's.
My Suspicion is that SE already had embed the Rotation Animation, but apparently turned off now. Why can i say that?
1. In android.policy\com\android\internal\policy\impl\PhoneWindowManager.smali there is a flag called fancy_rotation_anim. The code is like this:
Code:
.line 631
const-string v12, "fancy_rotation_anim"
const/4 v13, 0x0
invoke-static {v8, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v12
if-eqz v12, :cond_f0
const/16 v12, 0x80
:goto_29
iput v12, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I
2. in android.policy\com\android\internal\policy\impl\PhoneWindowManager$MyOrientationListener.smali there's a code like this:
Code:
# virtual methods
.method public onOrientationChanged(I)V
.registers 5
.parameter "rotation"
.prologue
.line 365
:try_start_0
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mWindowManager:Landroid/view/IWindowManager;
const/4 v1, 0x0
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
[B] iget v2, v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I[/B]
invoke-interface {v0, p1, v1, v2}, Landroid/view/IWindowManager;->setRotation(IZI)V
:try_end_c
.catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_c} :catch_d
.line 371
:goto_c
return-void
.line 367
:catch_d
move-exception v0
goto :goto_c
.end method
Now i had a modified Settings.apk to insert Setting$System config named "fancy_rotation_anim" when the Animation is updated. But unfortunately it doesn't do anything. Can any devs that's more experienced than me can investigate this? Thanks
And sorry if this thread has existed before. If yes, please mod close this thread thanks.
cm7 latest version has this fancy rotation animation like ics,i already search all over internet for this thing but they said its not available for gb,just for ics,and i dont know how cm7 has this(really shock me),maybe you can ask cm's dev for an answer,or maybe you can look inside cm7 for little clue on how they do it..
Sent from my LT18i
try this
hey mate try this
change this part
Code:
.line 631
const-string v12, "fancy_rotation_anim"
const/4 v13, 0x0
invoke-static {v8, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v12
[B]if-eqz v12, :cond_f0[/B]
const/16 v12, 0x80
:goto_29
to read this
(remove the part i bolded above)
Code:
.line 631
const-string v12, "fancy_rotation_anim"
const/4 v13, 0x0
invoke-static {v8, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v12
const/16 v12, 0x80
:goto_29
that bypasses the check and (i think) enables the animation (if it is there)
it could cause a crash if the rest of the animation is not there.
if it does crash grab the log output and post it here.
i'll take a look.
rashid.fairus said:
cm7 latest version has this fancy rotation animation like ics,i already search all over internet for this thing but they said its not available for gb,just for ics,and i dont know how cm7 has this(really shock me),maybe you can ask cm's dev for an answer,or maybe you can look inside cm7 for little clue on how they do it..
Sent from my LT18i
Click to expand...
Click to collapse
It uses another libsurfinger and libsurfinger-client which support that type of animation. In SS phone, just copy those libs and it works.
The new Motoblur has it, Sense 3 has it, Samsung has it and CM7 has it. There must be a way to get it. =)
pvyParts said:
hey mate try this
change this part
Code:
.line 631
const-string v12, "fancy_rotation_anim"
const/4 v13, 0x0
invoke-static {v8, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v12
[B]if-eqz v12, :cond_f0[/B]
const/16 v12, 0x80
:goto_29
to read this
(remove the part i bolded above)
Code:
.line 631
const-string v12, "fancy_rotation_anim"
const/4 v13, 0x0
invoke-static {v8, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v12
const/16 v12, 0x80
:goto_29
that bypasses the check and (i think) enables the animation (if it is there)
it could cause a crash if the rest of the animation is not there.
if it does crash grab the log output and post it here.
i'll take a look.
Click to expand...
Click to collapse
Hi, thanks for that. Actually I already tried to alter settings.apk so it store fancy_rotate_anim when animation setting is set. In the logcat the window manager does report that animflags is set to 128 (0x80) like the one set above. But nothing happens.
Sent from my ST18i using XDA App
silveraero said:
It uses another libsurfinger and libsurfinger-client which support that type of animation. In SS phone, just copy those libs and it works.
Click to expand...
Click to collapse
One question, what is SS? Samsung? :-/
Sent from my ST18i using XDA App
Interesting thing I found here regarding Orientation
I grabbed PhoneWindowManager$MyOrientationListener.smali file from HTC android.policy.jar on 2.3.4 and Compared it with Sony SE.. They are mostly Identical but some Lines missing and slightly changed numbers in HTC's file..
In SE its Like This
(Check the BOLD RED Lines..they are missing or changed in HTC's file)
Code:
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/PhoneWindowManager;Landroid/content/Context;)V
.locals 0
.parameter
.parameter "context"
.prologue
.line [B][COLOR="Red"]468[/COLOR][/B]
iput-object p1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
.line [B][COLOR="Red"]469[/COLOR][/B]
invoke-direct {p0, p2}, Landroid/view/WindowOrientationListener;-><init>(Landroid/content/Context;)V
.line [B][COLOR="Red"]470[/COLOR][/B]
return-void
.end method
# virtual methods
.method public onOrientationChanged(I)V
.locals 3
.parameter "rotation"
.prologue
[COLOR="Red"][B].line 477
const-string v0, "WindowManager"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "onOrientationChanged, rotation changed to "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
.line 480[/B][/COLOR]
:try_start_0
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mWindowManager:Landroid/view/IWindowManager;
const/4 v1, 0x0
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget v2, v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I
invoke-interface {v0, p1, v1, v2}, Landroid/view/IWindowManager;->setRotation(IZI)V
:try_end_0
.catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0
.line [B][COLOR="Red"]486[/COLOR][/B]
:goto_0
return-void
.line [B][COLOR="Red"]482[/COLOR][/B]
:catch_0
move-exception v0
goto :goto_0
.end method
NOW CHECK IN HTC's file
Code:
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/PhoneWindowManager;Landroid/content/Context;)V
.locals 0
.parameter
.parameter "context"
.prologue
.line 438
iput-object p1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
.line 439
invoke-direct {p0, p2}, Landroid/view/WindowOrientationListener;-><init>(Landroid/content/Context;)V
.line 440
return-void
.end method
# virtual methods
.method public onOrientationChanged(I)V
.locals 3
.parameter "rotation"
.prologue
.line 447
:try_start_0
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mWindowManager:Landroid/view/IWindowManager;
const/4 v1, 0x0
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget v2, v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I
invoke-interface {v0, p1, v1, v2}, Landroid/view/IWindowManager;->setRotation(IZI)V
:try_end_0
.catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0
.line 453
:goto_0
return-void
.line 449
:catch_0
move-exception v0
goto :goto_0
.end method
I modded the HTC one to fit the SE lines, named it HTCModdedforSE.zip and attached it for testing.. ont have my SE now...
But just incase I attached the whole android.policy.jar file from HTC Sensation.. You can fully replace SE with HTC one without modding.. maybe that works out...
Give it a go..
hansip87 said:
One question, what is SS? Samsung? :-/
Sent from my ST18i using XDA App
Click to expand...
Click to collapse
Yes, a guy there copied from Galaxy Note and it works perfect without problem. Maybe different with SE.
Sent from my X10i using XDA Premium App
@jjdoctor
will try your modded zip and give feedback,maybe SE will get angry with you mate
from my ARC
jjdoctor said:
Interesting thing I found here regarding Orientation
I grabbed PhoneWindowManager$MyOrientationListener.smali file from HTC android.policy.jar on 2.3.4 and Compared it with Sony SE.. They are mostly Identical but some Lines missing and slightly changed numbers in HTC's file..
In SE its Like This
(Check the BOLD RED Lines..they are missing or changed in HTC's file)
Code:
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/PhoneWindowManager;Landroid/content/Context;)V
.locals 0
.parameter
.parameter "context"
.prologue
.line [B][COLOR="Red"]468[/COLOR][/B]
iput-object p1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
.line [B][COLOR="Red"]469[/COLOR][/B]
invoke-direct {p0, p2}, Landroid/view/WindowOrientationListener;-><init>(Landroid/content/Context;)V
.line [B][COLOR="Red"]470[/COLOR][/B]
return-void
.end method
# virtual methods
.method public onOrientationChanged(I)V
.locals 3
.parameter "rotation"
.prologue
[COLOR="Red"][B].line 477
const-string v0, "WindowManager"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "onOrientationChanged, rotation changed to "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
.line 480[/B][/COLOR]
:try_start_0
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mWindowManager:Landroid/view/IWindowManager;
const/4 v1, 0x0
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget v2, v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I
invoke-interface {v0, p1, v1, v2}, Landroid/view/IWindowManager;->setRotation(IZI)V
:try_end_0
.catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0
.line [B][COLOR="Red"]486[/COLOR][/B]
:goto_0
return-void
.line [B][COLOR="Red"]482[/COLOR][/B]
:catch_0
move-exception v0
goto :goto_0
.end method
NOW CHECK IN HTC's file
Code:
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/PhoneWindowManager;Landroid/content/Context;)V
.locals 0
.parameter
.parameter "context"
.prologue
.line 438
iput-object p1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
.line 439
invoke-direct {p0, p2}, Landroid/view/WindowOrientationListener;-><init>(Landroid/content/Context;)V
.line 440
return-void
.end method
# virtual methods
.method public onOrientationChanged(I)V
.locals 3
.parameter "rotation"
.prologue
.line 447
:try_start_0
iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mWindowManager:Landroid/view/IWindowManager;
const/4 v1, 0x0
iget-object v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager$MyOrientationListener;->this$0:Lcom/android/internal/policy/impl/PhoneWindowManager;
iget v2, v2, Lcom/android/internal/policy/impl/PhoneWindowManager;->mFancyRotationAnimation:I
invoke-interface {v0, p1, v1, v2}, Landroid/view/IWindowManager;->setRotation(IZI)V
:try_end_0
.catch Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0
.line 453
:goto_0
return-void
.line 449
:catch_0
move-exception v0
goto :goto_0
.end method
I modded the HTC one to fit the SE lines, named it HTCModdedforSE.zip and attached it for testing.. ont have my SE now...
But just incase I attached the whole android.policy.jar file from HTC Sensation.. You can fully replace SE with HTC one without modding.. maybe that works out...
Give it a go..
Click to expand...
Click to collapse
the line code that SE have is just for logging purpose, nothing essential mate.
hansip87 said:
the line code that SE have is just for logging purpose, nothing essential mate.
Click to expand...
Click to collapse
As i scan all the code, it is actually depends on native function which resides on libsurfaceflinger.so. So no mod can be done about that unless somebody can crack the .so file. Case closed, thanks for the input.
Note: Do at your own risk, I won't take responsibility
Required
Framework.jar
Deodex ROM
Colorey Platlogo
Apktool or other tool to decompile
Instructions:
1) Decompile Your framework.jar
2)Go in /smali/com/android/internal/app/PlatLogoActivity.smali
3)Remove All Lines
4) Add This
Code:
.class public Lcom/android/internal/app/PlatLogoActivity;
.super Landroid/app/Activity;
.source "PlatLogoActivity.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 12
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.registers 7
.parameter "savedInstanceState"
.prologue
.line 16
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 18
new-instance v1, Landroid/content/Intent;
const-string v2, "android.intent.action.MAIN"
invoke-direct {v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
.line 19
.local v1, intent:Landroid/content/Intent;
new-instance v2, Landroid/content/ComponentName;
const-string v3, "com.androidfire.colorey"
const-string v4, "com.androidfire.colorey.PlatLogoActivity"
invoke-direct {v2, v3, v4}, Landroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v1, v2}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
.line 23
:try_start_16
invoke-virtual {p0, v1}, Lcom/android/internal/app/PlatLogoActivity;->startActivity(Landroid/content/Intent;)V
:try_end_19
.catch Landroid/content/ActivityNotFoundException; {:try_start_16 .. :try_end_19} :catch_1d
.line 39
:goto_19
invoke-virtual {p0}, Lcom/android/internal/app/PlatLogoActivity;->finish()V
.line 41
return-void
.line 31
:catch_1d
move-exception v0
.line 35
.local v0, e:Landroid/content/ActivityNotFoundException;
const-string v2, "First install that app iamareebjamal told you to!"
const/4 v3, 0x0
invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v2
invoke-virtual {v2}, Landroid/widget/Toast;->show()V
goto :goto_19
.end method
5)Recompile Push to /system/framework
6)Install ColoreyPlatlogo as Normal App
7)Reboot Your Phone
8)Go to Settings\About Section
9)Click 3.x Times on Android Version Shake Your Phone
Credits:
iamareebjamal
Reserved
Could you give some SS of your work ?
Nice share bro
wanna see first before decompile? try this
>adb shell
>am start -n com.androidfire.colorey/.PlatLogoActivity
Click to expand...
Click to collapse
SHA20 said:
Nice share bro
Click to expand...
Click to collapse
Don't need To Say Anything just press
AndroidFire said:
Don't need To Say Anything just press
Click to expand...
Click to collapse
Ok sir
Note: Do at your own risk, I won't take responsibility
Required
Framework.jar
Deodex ROM
AndroidLPlatlogo
AF-Apk Go Here Click Here
Instructions:
1) Decompile Your framework.jar
2)Go in /smali/com/android/internal/app/PlatLogoActivity.smali
3)Remove All Lines
4) Add This
Code:
.class public Lcom/android/internal/app/PlatLogoActivity;
.super Landroid/app/Activity;
.source "PlatLogoActivity.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 12
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.registers 7
.parameter "savedInstanceState"
.prologue
.line 16
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 18
new-instance v1, Landroid/content/Intent;
const-string v2, "android.intent.action.MAIN"
invoke-direct {v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
.line 19
.local v1, intent:Landroid/content/Intent;
new-instance v2, Landroid/content/ComponentName;
const-string v3, "com.androidfire.l"
const-string v4, "com.androidfire.l.PlatLogoActivity"
invoke-direct {v2, v3, v4}, Landroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v1, v2}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
.line 23
:try_start_16
invoke-virtual {p0, v1}, Lcom/android/internal/app/PlatLogoActivity;->startActivity(Landroid/content/Intent;)V
:try_end_19
.catch Landroid/content/ActivityNotFoundException; {:try_start_16 .. :try_end_19} :catch_1d
.line 39
:goto_19
invoke-virtual {p0}, Lcom/android/internal/app/PlatLogoActivity;->finish()V
.line 41
return-void
.line 31
:catch_1d
move-exception v0
.line 35
.local v0, e:Landroid/content/ActivityNotFoundException;
const-string v2, "First install that app AndroidFire told you to!"
const/4 v3, 0x0
invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v2
invoke-virtual {v2}, Landroid/widget/Toast;->show()V
goto :goto_19
.end method
5)Recompile Push to /system/framework
6)Install AndoidLPlatlogo as Normal App
7)Reboot Your Phone
8)Go to Settings\About Section
9)Click 3.x Times on Android Version
Thanks To IamArrebAjamal for His Eggster Where I Have Get Android L Preview Platlogo
Eggster
Credits: @iamareebjamal @Giupy 99
Some correction, you no need to deodex your rom to apply tgis, I think
Thanks for credits bro :good: nice one
AndroidFire said:
Note: Do at your own risk, I won't take responsibility
Required
Framework.jar
Deodex ROM
AndroidLPlatlogo
AF-Apk Go Here Click Here
Instructions:
1) Decompile Your framework.jar
2)Go in /smali/com/android/internal/app/PlatLogoActivity.smali
3)Remove All Lines
4) Add This
Code:
.class public Lcom/android/internal/app/PlatLogoActivity;
.super Landroid/app/Activity;
.source "PlatLogoActivity.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 12
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.registers 7
.parameter "savedInstanceState"
.prologue
.line 16
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 18
new-instance v1, Landroid/content/Intent;
const-string v2, "android.intent.action.MAIN"
invoke-direct {v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
.line 19
.local v1, intent:Landroid/content/Intent;
new-instance v2, Landroid/content/ComponentName;
const-string v3, "com.androidfire.l"
const-string v4, "com.androidfire.l.PlatLogoActivity"
invoke-direct {v2, v3, v4}, Landroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
invoke-virtual {v1, v2}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
.line 23
:try_start_16
invoke-virtual {p0, v1}, Lcom/android/internal/app/PlatLogoActivity;->startActivity(Landroid/content/Intent;)V
:try_end_19
.catch Landroid/content/ActivityNotFoundException; {:try_start_16 .. :try_end_19} :catch_1d
.line 39
:goto_19
invoke-virtual {p0}, Lcom/android/internal/app/PlatLogoActivity;->finish()V
.line 41
return-void
.line 31
:catch_1d
move-exception v0
.line 35
.local v0, e:Landroid/content/ActivityNotFoundException;
const-string v2, "First install that app AndroidFire told you to!"
const/4 v3, 0x0
invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v2
invoke-virtual {v2}, Landroid/widget/Toast;->show()V
goto :goto_19
.end method
5)Recompile Push to /system/framework
6)Install AndoidLPlatlogo as Normal App
7)Reboot Your Phone
8)Go to Settings\About Section
9)Click 3.x Times on Android Version
Thanks To IamArrebAjamal for His Eggster Where I Have Get Android L Preview Platlogo
Eggster
Credits: @iamareebjamal @Giupy 99
Click to expand...
Click to collapse
is that easter egg ?
It means that if my Settings.apk is KitkatEasterEgg.apk supported, the framework.jar will overwrite the activity?
Today i would like to explain the tut on how these Switch,CheckBox,ListPreferences work
{
"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"
}
Firstly i am not good in explanation
Hope you will surely understand it
Before Going to the main part you should know what switch checkbox and list preferences work
Look at this code
Code:
private boolean mBrightnessSliderEnabled;
private int isBrightnessSliderEnabled()
{
int i = Settings.System.getInt(this.mContext.getContentResolver(), "[COLOR="red"]brightness_slider_enabled[/COLOR]", 1); #key
int j = 0;
if (i != 0) {
j = 1;
}
this.mBrightnessSliderEnabled = j;
return j;
}
private boolean showBrightnessSlider()
{
int i = isBrightnessSliderEnabled();
ToggleSlider localToggleSlider = (ToggleSlider)findViewById(id.brightness_slider);
if ((i != 0) && (this.mBrightnessSliderEnabled))
{
this.mBrightnessView.setVisibility(0);
localToggleSlider.setVisibility(0);
}
for (;;)
{
updateResources();
return this.mBrightnessSliderEnabled;
this.mBrightnessView.setVisibility(8);
localToggleSlider.setVisibility(8);
}
}
public void setListening(boolean paramBoolean)
{
if (this.mListening == paramBoolean) {
return;
}
this.mListening = paramBoolean;
Iterator localIterator = this.mRecords.iterator();
while (localIterator.hasNext())
{
TileRecord localTileRecord = (TileRecord)localIterator.next();
try
{
localTileRecord.tile.setListening(this.mListening);
}
catch (IllegalArgumentException localIllegalArgumentException) {}
}
this.mFooter.setListening(this.mListening);
if (this.mListening) {
refreshAllTiles();
}
if ((paramBoolean) && (showBrightnessSlider()))
{
this.mBrightnessController.registerCallbacks();
return;
}
this.mBrightnessController.unregisterCallbacks();
}
In Smali Look here http://forum.xda-developers.com/cro...es-apps/guide-hide-brightness-slider-t3284141
See here in the above code
In code you will find 0 and 1 ( nothing but true or false / on/off)
and you can see a key in red line ( which receives the 1 or 0 from settings)
So The CheckBox and Switch preference created a boolean 1 or 0 ( nothing but on / off)
Hope you got what i meant
List preference in android persists string. That means that it writes object of string type into the shared preferences.
You need to create 2 string arrays for each list preference.
One for Entries - what is displayed in the dialog as single choice items for user.
and One is for entryValues (what is being written into the preferences). You can from your mod read them as integers or strings using content resolver.
f.e., if your values are 200, 300, 400, android will persist them as strings. But when you restrieve them from database in your systemui smali mod, f.e.,
you can call either getInt (to get them as integers) or getString to get them as strings. Of course strings array like bread, milk, cookies cannot be retrieved as integer.
But a string 200 can be either.
Now time to main part of explanation
So you know that switch and checkbox give same out of valued 1 or 0
How to make it ?
Here i will start with 2 types of codes
Post 2
Look at these 2 xml code which give same result with variation of view
Code:
<SwitchPreference android:title="Brightness Slider" android:key="[COLOR="red"]key_brightness_slider_show[/COLOR]" android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden" />
or
Code:
<CheckBoxPreference android:title="Brightness Slider" android:key="[COLOR="red"]key_brightness_slider_show[/COLOR]" android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden" />
You MUST provide defaultValue for ANY switch preference you create
It writes boolean (true or false) into the shared preferences
We copy it as integer (1 or 0) into the Settings.System database
It mush have a unique key, none of existent in databse.
It must be the same key as you use in your mod for that function. key_brightness_slider_show.
So thea Slider can be either visible or invisible.
Also will checkbox preference. In your mod when you retrieve and integer using ContentResolver you specify the default value (if the key is not found).
You have to specify the same default value here. If in smali it was 0x1,. then in the app it must be android:defaultValue = "true".
android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden"
These will show the below summary when value is 1 you will get summaryOn else off
This is not much mandatory.. its your wish or you can leave it or you can just only define summary
You can also make Dependence of the switch example
Network mod- this contain turn on/off, color, auto hide and more
When you add the dependency code so that when you only get bool 1 you can control other next string
Look below code of strings
Code:
<ListPreference android:persistent="false" android:entries="@array/show_network_traffic_state_entries" android:title="@string/show_network_traffic_state" android:key="[COLOR="red"]network_traffic_state[/COLOR]" android:entryValues="@array/show_network_traffic_state_values" />
<net.margaritov.preference.colorpicker.ColorPickerPreference android:title="@string/network_traffic_color_style" android:key="network_traffic_color" [COLOR="Orange"]android:dependency="[COLOR="Red"]network_traffic_state[/COLOR]" [/COLOR]android:defaultValue="0xffffffff" />
in the above code you can see the dependency
mean, when you turn on the first string
only then next string works
Now its time to go for smali
First create your own xml code
Example look this empty code
Code:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen android:title="New"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
</PreferenceScreen>
save this in any name of your xml (settings.apk/res/xml)
now i like to control Brightness slider
so i will add this to the xml and will look like
Code:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen android:title="New"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<SwitchPreference android:title="Brightness Slider" android:key="key_brightness_slider_show" android:defaultValue="0" android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden"
</PreferenceScreen>
Look here the main part is Key android:key="key_brightness_slider_show" (where i had defined brightness_slider_show in above code )
I think you are clear till now
So time to create a boolean
Lets start with new empty code
This is an Empty code Which or where you can create new Switch or Checkbox preference
The path of the file is Settings.apk/smali/com/android/settings/rz/
and File name was Statusmod.smali
Code:
.class public Lcom/android/settings/rz/Statusmod;
.super Lcom/android/settings/SettingsPreferenceFragment;
.source "Statusmod.java"
# instance fields
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 28
invoke-direct {p0}, Lcom/android/settings/SettingsPreferenceFragment;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 5
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
.line 42
invoke-super {p0, p1}, Lcom/android/settings/SettingsPreferenceFragment;->onCreate(Landroid/os/Bundle;)V
.line 43
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v1
invoke-virtual {v1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
.line 44
.local v0, "resolver":Landroid/content/ContentResolver;
const v1, 0x7f060092 #Xml preference
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->addPreferencesFromResource(I)V
.end method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
.locals 5
.param p1, "preferenceScreen" # Landroid/preference/PreferenceScreen;
.param p2, "preference" # Landroid/preference/Preference;
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.end method
Here i had added a part of Switch settings
Code:
.class public Lcom/android/settings/rz/Statusmod;
.super Lcom/android/settings/SettingsPreferenceFragment;
.source "Statusmod.java"
# instance fields
.field private mENABLE_SLIDER:Landroid/preference/[COLOR="SeaGreen"]SwitchPreference[/COLOR];
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 28
invoke-direct {p0}, Lcom/android/settings/SettingsPreferenceFragment;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 5
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
.line 42
invoke-super {p0, p1}, Lcom/android/settings/SettingsPreferenceFragment;->onCreate(Landroid/os/Bundle;)V
.line 43
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v1
invoke-virtual {v1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
.line 44
.local v0, "resolver":Landroid/content/ContentResolver;
const v1, 0x7f060092 # xml public key
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->addPreferencesFromResource(I)V
.line 46
const-string v1, "key_brightness_slider_show"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];
iput-object v1, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];
.line 47
iget-object v4, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];
const-string v1, "brightness_slider_show"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_0
move v1, v2
:goto_0
invoke-virtual {v4, v1}, Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];->setChecked(Z)V
.line 57
return-void
:cond_0
move v1, v3
.line 47
goto :goto_0
.end method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
.locals 5
.param p1, "preferenceScreen" # Landroid/preference/PreferenceScreen;
.param p2, "preference" # Landroid/preference/Preference;
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 61
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];
if-ne p2, v3, :cond_1
.line 62
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];
invoke-virtual {v3}, Landroid/preference/[COLOR="seagreen"]SwitchPreference[/COLOR];->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "brightness_slider_show"
if-eqz v0, :cond_0
move v1, v2
:cond_0
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_0
return v2
.line 65
:cond_1
invoke-super {p0, p1, p2}, Lcom/android/settings/SettingsPreferenceFragment;->onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
move-result v2
goto :goto_0
.end method
Now you had done with the code
in this you should look for public id
Where you need to match with xml you created above
This is Switch box preference
If you like to change it to Check Box preference then change all Switch to Checkbox ( also in Xml)
As like below Code ( Look for green part of changes)
Code:
.class public Lcom/android/settings/rz/Statusmod;
.super Lcom/android/settings/SettingsPreferenceFragment;
.source "Statusmod.java"
# instance fields
.field private mENABLE_SLIDER:Landroid/preference/CheckBoxPreference;
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 28
invoke-direct {p0}, Lcom/android/settings/SettingsPreferenceFragment;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 5
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
.line 42
invoke-super {p0, p1}, Lcom/android/settings/SettingsPreferenceFragment;->onCreate(Landroid/os/Bundle;)V
.line 43
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v1
invoke-virtual {v1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
.line 44
.local v0, "resolver":Landroid/content/ContentResolver;
const v1, 0x7f060092
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->addPreferencesFromResource(I)V
.line 46
const-string v1, "key_brightness_slider_show"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/CheckBoxPreference;
iput-object v1, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/CheckBoxPreference;
.line 47
iget-object v4, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/CheckBoxPreference;
const-string v1, "brightness_slider_show"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_0
move v1, v2
:goto_0
invoke-virtual {v4, v1}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
.line 57
return-void
:cond_0
move v1, v3
.line 47
goto :goto_0
.end method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
.locals 5
.param p1, "preferenceScreen" # Landroid/preference/PreferenceScreen;
.param p2, "preference" # Landroid/preference/Preference;
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 61
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/CheckBoxPreference;
if-ne p2, v3, :cond_1
.line 62
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/CheckBoxPreference;
invoke-virtual {v3}, Landroid/preference/CheckBoxPreference;->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "brightness_slider_show"
if-eqz v0, :cond_0
move v1, v2
:cond_0
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_0
return v2
.line 65
:cond_1
invoke-super {p0, p1, p2}, Lcom/android/settings/SettingsPreferenceFragment;->onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
move-result v2
goto :goto_0
.end method
If you like to add more in this
Example if you had added new Switch or checkbox
Code:
<PreferenceScreen android:title="New"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<SwitchPreference android:title="Brightness Slider" android:key="brightness_slider_show" android:defaultValue="0" android:summaryOn="Brightness Slider Shown" android:summaryOff="Brightness Slider Hidden"
<CheckBoxPreference android:title="Nothing Bomb" android:key="key_bomb_show" />
</PreferenceScreen>
first define in xml then i code
i will explain in simple
Look for the above code
Look at this boolean ( from above code)
Code:
.field private mENABLE_SLIDER:Landroid/preference/SwitchPreference;
above/Below Add this line
Code:
.field private mENABLE_BOMB:Landroid/preference/CheckBoxPreference; #define boolean
In this method
.method public onCreate(Landroid/os/BundleV
After :goto_0
You need to add this code
Code:
invoke-virtual {v4, v1}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
const-string v1, "key_bomb_show"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/CheckBoxPreference;
iput-object v1, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/CheckBoxPreference;
.line 50
iget-object v4, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/CheckBoxPreference;
const-string v1, "bomb_show"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_1
move v1, v2
:goto_1
After goto :goto_0
Add this Code
Code:
:cond_1
move v1, v3
.line 50
goto :goto_1
In this code when you add more first look cond_? and goto_?
Now look for this method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/PreferenceZ
in that after
.line 65
:cond_1
Add this code
Code:
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/SwitchPreference;
if-ne p2, v3, :cond_2
.line 62
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/SwitchPreference;
invoke-virtual {v3}, Landroid/preference/SwitchPreference;->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "bomb_show"
if-eqz v0, :cond_1
move v1, v2
:cond_1
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_1
return v2
.line 65
:cond_2
and save finally it looks like this
Code:
.class public Lcom/android/settings/rz/Statusmod;
.super Lcom/android/settings/SettingsPreferenceFragment;
.source "Statusmod.java"
# instance fields
.field private mENABLE_SLIDER:Landroid/preference/SwitchPreference;
.field private mENABLE_BOMB:Landroid/preference/CheckBoxPreference;
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 28
invoke-direct {p0}, Lcom/android/settings/SettingsPreferenceFragment;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 5
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
.line 42
invoke-super {p0, p1}, Lcom/android/settings/SettingsPreferenceFragment;->onCreate(Landroid/os/Bundle;)V
.line 43
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v1
invoke-virtual {v1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
.line 44
.local v0, "resolver":Landroid/content/ContentResolver;
const v1, 0x7f060092
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->addPreferencesFromResource(I)V
.line 46
const-string v1, "key_brightness_slider_show"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/SwitchPreference;
iput-object v1, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/SwitchPreference;
.line 47
iget-object v4, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/SwitchPreference;
const-string v1, "brightness_slider_show"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_0
move v1, v2
:goto_0
invoke-virtual {v4, v1}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
const-string v1, "key_bomb_show"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/Statusmod;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/CheckBoxPreference;
iput-object v1, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/CheckBoxPreference;
.line 50
iget-object v4, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/CheckBoxPreference;
const-string v1, "bomb_show"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_1
move v1, v2
:goto_1
invoke-virtual {v4, v1}, Landroid/preference/SwitchPreference;->setChecked(Z)V
.line 57
return-void
:cond_0
move v1, v3
.line 47
goto :goto_0
:cond_1
move v1, v3
.line 50
goto :goto_1
.end method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
.locals 5
.param p1, "preferenceScreen" # Landroid/preference/PreferenceScreen;
.param p2, "preference" # Landroid/preference/Preference;
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 61
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/SwitchPreference;
if-ne p2, v3, :cond_1
.line 62
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_SLIDER:Landroid/preference/SwitchPreference;
invoke-virtual {v3}, Landroid/preference/SwitchPreference;->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "brightness_slider_show"
if-eqz v0, :cond_0
move v1, v2
:cond_0
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_0
return v2
.line 65
:cond_1
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/SwitchPreference;
if-ne p2, v3, :cond_2
.line 62
iget-object v3, p0, Lcom/android/settings/rz/Statusmod;->mENABLE_BOMB:Landroid/preference/SwitchPreference;
invoke-virtual {v3}, Landroid/preference/SwitchPreference;->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/Statusmod;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "bomb_show"
if-eqz v0, :cond_1
move v1, v2
:cond_1
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_1
return v2
.line 65
:cond_2
invoke-super {p0, p1, p2}, Lcom/android/settings/SettingsPreferenceFragment;->onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
move-result v2
goto :goto_0
.end method
and save it compile and done with your settings preferences
This is how to add preferences
If you add more with different smlai name then change the code path and definition
If you got confused look for my guides that will surely help you
post 3
Method 2
which is very simple
no need to work like in 2nd post (this works but not accurate as above )
Download this View attachment Cm_Settings.zip and merge to your settings
while you create a preference in xml define it as this way
Code:
<PreferenceScreen android:title="New"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<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"
<com.android.settings.cyanogenmod.SystemCheckBoxPreference android:title="Nothing Bomb" android:key="bomb_show" />
</PreferenceScreen>
Remember the key code is directly defined ( if you had doubt just start compare)
and done
This is expalantion of these things
It's seems I'm very noob in smali
Lol yeah best guide from @venkat kamesh
Thanks bro works well
learnt to decompile
will learn more bro
sorry bad english
translated
Thanks for your awesome work, bro! This makes it easy to give my ROM a custom feel. There is one bug, the switches always revert back to default every time the page/fragment/etc. is displayed. I have found a way around this and also figured out why it isn't working correctly...but I am not knowledgeable enough in smali to fix it. The issue is that the CM switches don't create a boolean one first instance. They will however control the boolean correctly if it exists.
How I solved:
I put my switches in settings because i'm running 4.4 and don't have rom control. So the path here will be different depending on where you put your switches. If they are in settings like mine you will navigate to /data/data/com.android.settings/shared_prefs/ and open the file com.android.settings_preferences.xml with a root file explorer. You will also need a text editor unless your file explorer has one built in.
Now you have to remember your keys that you used for your switches in your mod
mine are "aokpram_recent," "show_clock," and "stock_battery."
***Note that you have to type them in, I've tried copying and pasting and it will not work.***
Example:
boolean name="show_clock" value="true"
Do this for all of your mod keys and your switches will start working correctly. If I ever figure out a way to make the cmsettings switches generate their own boolean I will post it.
Hello guys here i am presenting you new guide
a small mod from my Krypton rom
this is for both MM and LP
For MM look for post#2
So i will discuss from LP
First you need
android.policy.jar (deodexed)
settings.apk (deodexed)
1. Decompile android.policy.jar
2. open com/android/internal/policy/impl/PhoneWindow.smali
find this method
Code:
.method private getOptionsPanelGravity()I
before that add these methods
Code:
.method private getNavBarColorMod(I)I
.locals 4
const/high16 v2, -0x1000000
move/from16 v1, p1
iget v3, p0, Lcom/android/internal/policy/impl/PhoneWindow;->mStatusBarColor:I
invoke-direct {p0}, Lcom/android/internal/policy/impl/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-eqz v0, :cond_0
or-int v1, v2, v3
:cond_0
return v1
.end method
.method private getNavBarTweak()Z
.locals 3
const/4 v0, -0x1
invoke-virtual {p0}, Lcom/android/internal/policy/impl/PhoneWindow;->getContext()Landroid/content/Context;
move-result-object v1
invoke-virtual {v1}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v1
const-string v2, "navbar_color_mod"
invoke-static {v1, v2, v0}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-nez v1, :cond_0
const/4 v0, 0x0
:goto_0
return v0
:cond_0
const/4 v0, 0x1
goto :goto_0
.end method
3. now from this method
Code:
.method protected generateLayout(Lcom/android/internal/policy/impl/PhoneWindow$DecorView;)Landroid/view/ViewGroup;
look for this code
Code:
invoke-static {}, Landroid/app/ActivityManager;->isHighEndGfx()Z
move-result v25
if-eqz v25, :cond_1a
.line 3479
if-nez v22, :cond_1a
const/16 v25, 0x22
const/16 v26, 0x0
move/from16 v0, v25
move/from16 v1, v26
invoke-virtual {v4, v0, v1}, Landroid/content/res/TypedArray;->getBoolean(IZ)Z
move-result v25
if-eqz v25, :cond_1a
Note this :cond_1a (1a may vary with device may not be same )
in that before
Code:
if-eqz v25, :cond_1a
add this code
Code:
invoke-direct/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-nez v0, :cond_ta
after the same line of
Code:
if-eqz v25, :cond_1a
add this
Code:
:cond_ta
Finally it look like this
Code:
invoke-static {}, Landroid/app/ActivityManager;->isHighEndGfx()Z
move-result v25
if-eqz v25, :cond_1a
.line 3479
if-nez v22, :cond_1a
const/16 v25, 0x22
const/16 v26, 0x0
move/from16 v0, v25
move/from16 v1, v26
invoke-virtual {v4, v0, v1}, Landroid/content/res/TypedArray;->getBoolean(IZ)Z
move-result v25
[COLOR="red"] invoke-direct/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-nez v0, :cond_ta[/COLOR]
if-eqz v25, :cond_1a
[COLOR="Red"] :cond_ta[/COLOR]
4. Now look for this line in same method
Code:
iput v0, v1, Lcom/android/internal/policy/impl/PhoneWindow;->mNavigationBarColor:I
Before that add this code
Code:
invoke-direct {v1, v0}, Lcom/android/internal/policy/impl/PhoneWindow;->getNavBarColorMod(I)I
move-result v0
5. Done.....! save and compile and replace
For settings Go to post #3
Have fun
For MM
First you need
framework.jar (deodexed)
settings.apk (deodexed)
1. Decompile framework.jar
2. open framework.jar/smali/com/android/internal/policy/PhoneWindow.smali
find this method
Code:
.method private getOptionsPanelGravity()I
before that add these methods
Code:
.method private getNavBarColorMod(I)I
.locals 4
const/high16 v2, -0x1000000
move/from16 v1, p1
iget v3, p0, Lcom/android/internal/policy/PhoneWindow;->mStatusBarColor:I
invoke-direct {p0}, Lcom/android/internal/policy/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-eqz v0, :cond_0
or-int v1, v2, v3
:cond_0
return v1
.end method
.method private getNavBarTweak()Z
.locals 3
const/4 v0, -0x1
invoke-virtual {p0}, Lcom/android/internal/policy/PhoneWindow;->getContext()Landroid/content/Context;
move-result-object v1
invoke-virtual {v1}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v1
const-string v2, "navbar_color_mod"
invoke-static {v1, v2, v0}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-nez v1, :cond_0
const/4 v0, 0x0
:goto_0
return v0
:cond_0
const/4 v0, 0x1
goto :goto_0
.end method
3. now from this method
Code:
.method protected generateLayout(Lcom/android/internal/policy/PhoneWindow$DecorView;)Landroid/view/ViewGroup;
look for this code
Code:
invoke-static {}, Landroid/app/ActivityManager;->isHighEndGfx()Z
move-result v21
if-eqz v21, :cond_15
.line 4035
if-nez v19, :cond_15
.line 4036
const/16 v21, 0x22
.line 4037
const/16 v22, 0x0
.line 4035
move/from16 v0, v21
move/from16 v1, v22
invoke-virtual {v3, v0, v1}, Landroid/content/res/TypedArray;->getBoolean(IZ)Z
move-result v21
if-eqz v21, :cond_15
Note this :cond_15 (15 may vary with device may not be same )
in that before
Code:
if-eqz v21, :cond_15
add this code
Code:
invoke-direct/range {p0 .. p0}, Lcom/android/internal/policy/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-nez v0, :cond_ta
after the same line of
Code:
if-eqz v21, :cond_15
add this
Code:
:cond_ta
Finally it look like this
Code:
invoke-static {}, Landroid/app/ActivityManager;->isHighEndGfx()Z
move-result v21
if-eqz v21, :cond_15
.line 4035
if-nez v19, :cond_15
.line 4036
const/16 v21, 0x22
.line 4037
const/16 v22, 0x0
.line 4035
move/from16 v0, v21
move/from16 v1, v22
invoke-virtual {v3, v0, v1}, Landroid/content/res/TypedArray;->getBoolean(IZ)Z
move-result v21
[COLOR="red"] invoke-direct/range {p0 .. p0}, Lcom/android/internal/policy/PhoneWindow;->getNavBarTweak()Z
move-result v0
if-nez v0, :cond_ta[/COLOR]
if-eqz v21, :cond_15
[COLOR="Red"] :cond_ta[/COLOR]
4. Now look for this line in same method
Code:
iput v0, v1, Lcom/android/internal/policy/PhoneWindow;->mNavigationBarColor:I
Before that add this code
Code:
invoke-direct {v1, v0}, Lcom/android/internal/policy/PhoneWindow;->getNavBarColorMod(I)I
move-result v0
5. Done.....! save and compile and replace
For settings Go to post #3
Have fun
Settings for MM and LP
hmm
its time for settings part
i had no time to write a new code..
so try to follow guide from here ( click here )
in that you need to replace
Code:
android:key="[COLOR="Red"]navbar_color_mod[/COLOR]"
or Download this Zip (Click here)
merge to settings
in any part of your xml ( example :- settings.apk/res/xml/display_settings.xml )
add this line
Code:
<com.android.settings.cyanogenmod.SystemSettingSwitchPreference android:title="NavBar Tint" android:key="navbar_color_mod" android:defaultValue="0" android:summaryOn="Enabled" android:summaryOff="Disabled"
Save it and compile and have fun
Credits
xpirt for basic mod
Me for MM and LP krypton rom
Dont forget to Mention me if you use my work
Good luck
Not working on stock rom?-
Black Nav on Homescreen 6.0.1
karrouma said:
Not working on stock rom?-
Click to expand...
Click to collapse
this is for both stock and other roms bro
ReadReadz said:
Black Nav on Homescreen 6.0.1
Click to expand...
Click to collapse
new home doesn't support material
so its black bro
venkat kamesh said:
hmm
its time for settings part
i had no time to write a new code..
so try to follow guide from here ( click here )
in that you need to replace
Code:
android:key="[COLOR="Red"]navbar_color_mod[/COLOR]"
or Download this Zip (Click here)
merge to settings
in any part of your xml ( example :- settings.apk/res/xml/display_settings.xml )
add this line
Code:
<com.android.settings.cyanogenmod.SystemSettingSwitchPreference android:title="NavBar Tint" android:key="navbar_color_mod" android:defaultValue="0" android:summaryOn="Enabled" android:summaryOff="Disabled"
Save it and compile and have fun
Credits
xpirt for basic mod
Me for MM and LP krypton rom
Dont forget to Mention me if you use my work
Good luck
Click to expand...
Click to collapse
Can't glash via recovery. Meta file is missing
how to set defaut tinted without edit settings just edit on android.policy.jar?lolipop 5.1.1
Hey bro,
I'm trying to use this with your SwitchPreferences guide. The toggle switch works, but the nav bar is always tinted, it doesn't change. I've changed all the keys and made sure that my XML is good, but nothing happens.
My XML is like this:
Code:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen android:title="@string/wireless_networks_settings_title"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<PreferenceCategory android:title="@string/rm_ui_navbar_resize_category" />
<com.android.settings.rz.MySeekBarPreference android:title="@string/rm_ui_navbar_resize_portrait" android:key="navigation_bar_height" settings:type="15" />
<com.android.settings.rz.MySeekBarPreference android:title="@string/rm_ui_navbar_resize_landscape" android:key="navigation_bar_width" settings:type="16" />
<PreferenceCategory android:title="@string/rm_ui_navbar_tweak_category" />
<SwitchPreference android:title="@string/rm_ui_navbar_tint_toggle" android:key="key_navbar_color_mod" android:defaultValue="false" android:summaryOn="@string/rm_ui_navbar_tint_toggle_on" android:summaryOff="@string/rm_ui_navbar_tint_toggle_off" />
</PreferenceScreen>
And my smali like so:
Code:
.class public Lcom/android/settings/rz/EnableNavBarTint;
.super Lcom/android/settings/SettingsPreferenceFragment;
.source "EnableNavBarTint.java"
# instance fields
.field private mENABLE_NAV_BAR_TINT:Landroid/preference/SwitchPreference;
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 28
invoke-direct {p0}, Lcom/android/settings/SettingsPreferenceFragment;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 5
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
.line 42
invoke-super {p0, p1}, Lcom/android/settings/SettingsPreferenceFragment;->onCreate(Landroid/os/Bundle;)V
.line 43
invoke-virtual {p0}, Lcom/android/settings/rz/EnableNavBarTint;->getActivity()Landroid/app/Activity;
move-result-object v1
invoke-virtual {v1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
.line 44
.local v0, "resolver":Landroid/content/ContentResolver;
const v1, 0x7f08008a # xml public key
invoke-virtual {p0, v1}, Lcom/android/settings/rz/EnableNavBarTint;->addPreferencesFromResource(I)V
.line 46
const-string v1, "key_navbar_color_mod"
invoke-virtual {p0, v1}, Lcom/android/settings/rz/EnableNavBarTint;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;
move-result-object v1
check-cast v1, Landroid/preference/SwitchPreference;
iput-object v1, p0, Lcom/android/settings/rz/EnableNavBarTint;->mENABLE_NAV_BAR_TINT:Landroid/preference/SwitchPreference;
.line 47
iget-object v4, p0, Lcom/android/settings/rz/EnableNavBarTint;->mENABLE_NAV_BAR_TINT:Landroid/preference/SwitchPreference;
const-string v1, "navbar_color_mod"
invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v1
if-ne v1, v2, :cond_0
move v1, v2
:goto_0
invoke-virtual {v4, v1}, Landroid/preference/SwitchPreference;->setChecked(Z)V
.line 57
return-void
:cond_0
move v1, v3
.line 47
goto :goto_0
.end method
.method public onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
.locals 5
.param p1, "preferenceScreen" # Landroid/preference/PreferenceScreen;
.param p2, "preference" # Landroid/preference/Preference;
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 61
iget-object v3, p0, Lcom/android/settings/rz/EnableNavBarTint;->mENABLE_NAV_BAR_TINT:Landroid/preference/SwitchPreference;
if-ne p2, v3, :cond_1
.line 62
iget-object v3, p0, Lcom/android/settings/rz/EnableNavBarTint;->mENABLE_NAV_BAR_TINT:Landroid/preference/SwitchPreference;
invoke-virtual {v3}, Landroid/preference/SwitchPreference;->isChecked()Z
move-result v0
.line 63
.local v0, "value":Z
invoke-virtual {p0}, Lcom/android/settings/rz/EnableNavBarTint;->getActivity()Landroid/app/Activity;
move-result-object v3
invoke-virtual {v3}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v3
const-string v4, "navbar_color_mod"
if-eqz v0, :cond_0
move v1, v2
:cond_0
invoke-static {v3, v4, v1}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
.line 78
.end local v0 # "value":Z
:goto_0
return v2
.line 65
:cond_1
invoke-super {p0, p1, p2}, Lcom/android/settings/SettingsPreferenceFragment;->onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
move-result v2
goto :goto_0
.end method
Any ideas bro?
Screenshot please. Thanks