Related
Hi there, I want to share this tutorial for implementing Swipe-to-Remove Notification feature found in CyanogenMod to stock ROM (Gingerbread or earlier ROM). Sure it will be available on ICS but for those who like to add one to their custom ROM here's how Currently i don't know to whom should i give credit to, if anybody knows please post below and i'll add the link for the original modder. Thanks to:
1. like-p for help showing me what files to be edited
2. LeoMar75 for some info on how to control Stub switch case
This mod is based on Sony Ericsson Xperia Ray, so take care when adding to another device, some code might be different though so no direct copy paste, please learn some of the line first.
PS: For Froyo mod, please follow Jason-EX here
Requirement:
1. decompiled Framework.jar with Baksmali manager
2. decompiled SystemUI.apk with APK Multi Tool
3. Some Basic understanding about editing xml file and smali code.
4. WinMerge or other comparison tool (to better editing and comparing with my sample file)
5. Backup the framework.jar and SystemUI.apk first!
Files to be edited:
in SystemUI.apk
res/anim/
res/layout/status_bar_latest_event.xml
res/values/public.xml
smali/com/android/systemui/statusbar/LatestItemContainer$1.smali
smali/com/android/systemui/statusbar/LatestItemContainer.smali
smali/com/android/systemui/statusbar/StatusBarService$7.smali (or depends on your numbering, could be $8 or larger)
smali/com/android/systemui/statusbar/StatusBarService.smali
in framework.jar:
smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
smali/com/android/internal/statusbar/IStatusBarService.smali
UPDATE: This is the additional guide for other device when editing StatusBarService.smali. See here:
1. HTC based
2. Samsung based
Alright, let's mod one by one
1. Editing SystemUI.apk
1.1 Editing res/anim
We are registering anim object here, so swipe animation can be done.
Create folder anim (if not exists yet) inside /res folder
Create 2 file named slide_out_left_basic.xml and slide_out_right_basic.xml inside res/anim folder
for slide_out_left_basic.xml, edit the file and fill with this
Code:
<?xml version="1.0" encoding="utf-8"?>
<translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="0.0" android:toXDelta="-100.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
for slide_out_right_basic.xml, edit the file and fill with this
Code:
<?xml version="1.0" encoding="utf-8"?>
<translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="0.0" android:toXDelta="100.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
Save both
Update: Mirko ddd (&shoman94 have pointed that out before but i have no idea where to change, sorry mate) have given me the tip to improve the gesture. read his post here Thanks mate, both of you!
1.2 Editing res/layout/status_bar_latest_event.xml
We are replacing LinearLayout object used in StatusBar with LatestItemContainer here, so notification can be removed. We handle the Styling first by editing this .xml first. Here are the steps:
Change the code from Original code to this (change the bold one)
Code:
<?xml version="1.0" encoding="utf-8"?>
<[B]com.android.systemui.statusbar.LatestItemContainer [/B]android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="65.0sp"
xmlns:android="http://schemas.android.com/apk/res/android">
<com.android.systemui.statusbar.LatestItemView android:id="@id/content" android:background="@android:drawable/status_bar_item_background" android:paddingRight="6.0sp" android:focusable="true" android:clickable="true" android:layout_width="fill_parent" android:layout_height="64.0sp" android:shadowColor="#ff000000" android:shadowDx="0.0" android:shadowDy="1.0" android:shadowRadius="2.0" />
<View android:background="@drawable/divider_horizontal_light_opaque" android:layout_width="fill_parent" android:layout_height="wrap_content" />
<[B]/com.android.systemui.statusbar.LatestItemContainer[/B]>
Save
1.3 Editing res/values/public.xml
This one is for registering anim file that we made on step 1.1 to be available publicly and to be recognized in .smali program. Here are the steps:
Recompile your apk after putting anim file into /res folder
Decompile again the resulting apk
Inside /res/values/public.xml, you'll found something like this:
Code:
<resources>
.
.
.
[B]
<public type="anim" name="slide_out_left_basic" id="0x7f0c0000" />
<public type="anim" name="slide_out_right_basic" id="0x7f0c0001" />
[/B]
</resources>
[*]Remember the ID for both anim lines. This will be applied again on the step 1.4
1.4 Adding smali/com/android/systemui/statusbar/LatestItemContainer$1.smali and smali/com/android/systemui/statusbar/LatestItemContainer.smali
This is the class of LatestItemContainer that will be used to handle the notification list instead of LatestItemView. Here are the steps:
Please download from the attachment
insert the files inside to mentioned folder above
Inside LatestItemContainer$1.smali, there's an id that references the anim from step1.2. please edit it if you have different id for anim left or anim from previous step.
Code:
.line 53
:cond_0
const/high16 v1, [B]0x7f0c[/B]
and
Code:
.line 51
const v1, [B]0x7f0c0001[/B]
1.5 Add smali/com/android/systemui/statusbar/StatusBarService$7.smali (or depends on your existing framework numbering, could be $8 or larger)
This is additional function for StatusBarService to handle onClearNotification function. Here are the steps:
Extract the StatusBarService$7.smali from attachment
If StatusBarService$7.smali does not exist before, just place it inside, if not, skip this step.
If StatusBarService$7.smali exists, Please rename the file to StatusBarService$8.smali (or whatever higher number that is unused) and rename all the line inside the file from
Code:
StatusBarService$7
to
Code:
StatusBarService$8
1.6 Edit smali/com/android/systemui/statusbar/StatusBarService.smali
UPDATE: This is the additional guide for other device when editing StatusBarService.smali. See here:
1. Generic java readout
2. HTC based
3. Samsung based
This is the file that generate NotificationView. Please take care of the changes here more carefully because there might be some differences between vendors in this file. Here are the steps:
Open StatusBarService.smali and find this function
Code:
.method makeNotificationView(Lcom/android/internal/statusbar/StatusBarNotification;Landroid/view/ViewGroup;)[Landroid/view/View;
Find this code in the makeNotificationView function body:
Code:
invoke-virtual {v0, v1, v2, v3}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v18
const v4, 0x7f0b0014
move-object/from16 v0, v18
move v1, v4
invoke-virtual {v0, v1}, Landroid/view/View;->findViewById(I)Landroid/view/View;
move-result-object v10
Insert the bold code below between the existing code:
Code:
invoke-virtual {v0, v1, v2, v3}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v18
[B] check-cast v18, Lcom/android/systemui/statusbar/LatestItemContainer;
.line 516
.local v18, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v16
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_swno
move-object/from16 v0, v16
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_swno
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v2, p1
invoke-direct {v0, v1, v2}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v18
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
:cond_swno[/B]
const v4, 0x7f0b0014
move-object/from16 v0, v18
move v1, v4
[B] invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B]
move-result-object v10
Once again, change
Code:
StatusBarService$7
to
Code:
StatusBarService$8
line if you happened to have StatusBarService$8.smali as the result of renaming on the previous step.
IMPORTANT LOGIC TO BE UNDERSTOOD: This step tells the function to:
1. cast the already made View Object to LatestItemContainer instead of using LatestView class.
2. Filter if the Notification is removable or not
3. the LatestItemContainer object (v18) is assigned with onSwipeCallback(new StatusBarService$7)
Change the following (still on the same function body):
Code:
move v1, v4
invoke-virtual {v0, v1}, Landroid/view/View;->setDrawingCacheEnabled(Z)V
.line 542
const/4 v4, 0x3
to
Code:
move v1, v4
[B] invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setDrawingCacheEnabled(Z)V
[/B]
.line 542
const/4 v4, 0x3
Please note:
StatusBarService.smali might be different between vendor, so please adapt with your .smali to implement the above coding.
2. Editing framework.jar
2.1 editing smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
Here are the steps:
Add this code on variable declaration part inside the file
Code:
.field static final TRANSACTION_onClearAllNotifications:I = 0xb
[B].field static final TRANSACTION_onNotificationClear:I = 0xc[/B]
.field static final TRANSACTION_onNotificationClick:I = 0x9
.field static final TRANSACTION_onNotificationError:I = 0xa
If the 0xc is already used on another static value, you must change it so it remains unique.
Find this code:
Code:
.method public onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.registers 14
.parameter "code"
.parameter "data"
.parameter "reply"
.parameter "flags"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 39
sparse-switch p1, :sswitch_data_124
change to
Code:
.method public onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.registers 14
.parameter "code"
.parameter "data"
.parameter "reply"
.parameter "flags"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 39
[B]sparse-switch p1, :sswitch_data_13e[/B]
Insert/replace this code (it is at the end of the file):
Code:
.line 176
const/4 v0, 0x1
goto/16 :goto_7
.line 39
:sswitch_data_124
.sparse-switch
0x1 -> :sswitch_f
0x2 -> :sswitch_1c
0x3 -> :sswitch_29
0x4 -> :sswitch_42
0x5 -> :sswitch_5f
0x6 -> :sswitch_7b
0x7 -> :sswitch_8d
0x8 -> :sswitch_c7
0x9 -> :sswitch_d5
0xa -> :sswitch_ef
0xb -> :sswitch_116
0x5f4e5446 -> :sswitch_8
.end sparse-switch
to
Code:
[B]
.line 176
const/4 v0, 0x1
goto/16 :goto_7
.end local v1 #_arg0:Ljava/lang/String;
.end local v2 #_arg1:Ljava/lang/String;
.end local v3 #_arg2:I
:sswitch_124
const-string v0, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {p2, v0}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
.line 177
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v1
.line 178
.restart local v1 #_arg0:Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v2
.line 179
.restart local v2 #_arg1:Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v3
.line 180
.restart local v3 #_arg2:I
invoke-virtual {p0, v1, v2, v3}, Lcom/android/internal/statusbar/IStatusBarService$Stub;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.line 181
invoke-virtual {p3}, Landroid/os/Parcel;->writeNoException()V
.line 182
const/4 v0, 0x1
goto/16 :goto_7[/B]
.line 39
:sswitch_data_13e
.sparse-switch
0x1 -> :sswitch_f
0x2 -> :sswitch_1c
0x3 -> :sswitch_29
0x4 -> :sswitch_42
0x5 -> :sswitch_5f
0x6 -> :sswitch_7b
0x7 -> :sswitch_8d
0x8 -> :sswitch_c7
0x9 -> :sswitch_d5
0xa -> :sswitch_ef
0xb -> :sswitch_116
[B]0xc -> :sswitch_124[/B]
0x5f4e5446 -> :sswitch_8
.end sparse-switch
it's important to note this
Code:
[B]0xc -> :sswitch_124[/B]
If you rename the static at the previous steps, please change the 0xc accordingly.
2.2 Editing smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
Here are the steps:
Insert these function code to the file:
Code:
.method public onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.registers 9
.parameter "pkg"
.parameter "tag"
.parameter "id"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 359
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
move-result-object v0
.line 360
.local v0, _data:Landroid/os/Parcel;
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
move-result-object v1
.line 362
.local v1, _reply:Landroid/os/Parcel;
:try_start_8
const-string v2, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {v0, v2}, Landroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
.line 363
invoke-virtual {v0, p1}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
.line 364
invoke-virtual {v0, p2}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
.line 365
invoke-virtual {v0, p3}, Landroid/os/Parcel;->writeInt(I)V
.line 366
iget-object v2, p0, Lcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->mRemote:Landroid/os/IBinder;
const/16 v3, 0xa
const/4 v4, 0x0
invoke-interface {v2, v3, v0, v1, v4}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.line 367
invoke-virtual {v1}, Landroid/os/Parcel;->readException()V
:try_end_21
.catchall {:try_start_8 .. :try_end_21} :catchall_28
.line 370
invoke-virtual {v1}, Landroid/os/Parcel;->recycle()V
.line 371
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
.line 373
return-void
.line 370
:catchall_28
move-exception v2
invoke-virtual {v1}, Landroid/os/Parcel;->recycle()V
.line 371
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
throw v2
.end method
Please inspect the code for this part:
Code:
[B]const/16 v3, 0xa[/B]
const/4 v4, 0x0
invoke-interface {v2, v3, v0, v1, v4}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
The bold one must match on one of the switch case value at the end of IStatusBarService$Stub.smali,
in my phone actually the valid one is the TRANSACTION_onNotificationError (0xa) so if your NotificationError is not 0xa but 0xb for example, please change the bold one to 0xb
Save
2.3 editing smali/com/android/internal/statusbar/IStatusBarService.smali
Insert this function code to the file. Here are the steps:
Insert these function code to the file:
Code:
.method public abstract onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.end method
Save
There you have it AFAIK, the files that you need to take care more than others are:
1. smali/com/android/systemui/statusbar/StatusBarService.smali
2. res/values/public.xml
The rest can be applied from the attachment below directly. Ok that's all, after you are done, compile both SystemUI.apk and Framework.jar.
How to Compile the right way?
1. SystemUI.apk ->
Compile with APK Multi Tool, press y and y twice with all the requested input,
delete modified file from keep folder, and after that continue compiling.
Copy from original APK the META-INF and AndroidManifest.xml to the unsignedSystemUI.apk
rename unsignedSystemUI.apk to signedSystemUI.apk
select Zipalign from APK Multi Tool to optimize apk.
Rename to SystemUI.apk (move the original one just in case)
2. framework.jar ->
Smali inside Baksmali Manager
Replace classes.dex inside framework.jar with the generated one.
and apply on your phone.
Hope this helps you (programmer ofc, not end user ) to implement on your device.
G'day!
Mate, thank you so much for this - I have been trying to figure it out for our ROM for weeks LOL I'm going to give it a try this evening and I'll let you know if I get it! Thanks again
Dunc001 said:
Mate, thank you so much for this - I have been trying to figure it out for our ROM for weeks LOL I'm going to give it a try this evening and I'll let you know if I get it! Thanks again
Click to expand...
Click to collapse
Ok let me know mate
ill try it on my SGY
Looks fun! great post
tommytomatoe said:
Looks fun! great post
Click to expand...
Click to collapse
Updated step, to give you some warning about StatusBarService$7 naming convention
definitely gonna give this a try!!
great akaka.try it soon.
did u know how to port ICS layout to stock rom? can u write a tut?
this will be great!!
nvt992 said:
great akaka.try it soon.
did u know how to port have ICS layout to stock rom? can u write a tut?
this will be great!!
Click to expand...
Click to collapse
What layout? Do you mean ICS launcher layout or..?
no.see my attach
nvt992 said:
no.see my attach
Click to expand...
Click to collapse
Well do you have the original link? First, i know nothing about that, so i should learn first. and secondly, it's more about theme editing, so i think it's more about editing XML inside SystemUI.apk rather than coding a .smali like above. Thirdly, the shortcut for setting in ICS IMHO is not as efficient as Power Widget Status Bar.
hansip87 said:
Well do you have the original link? First, i know nothing about that, so i should learn first. and secondly, it's more about theme editing, so i think it's more about editing XML inside SystemUI.apk rather than coding a .smali like above. Thirdly, the shortcut for setting in ICS IMHO is not as efficient as Power Widget Status Bar.
Click to expand...
Click to collapse
this is for cm7
patch http://forum.xda-developers.com/showthread.php?t=1324924
or original theme
http://forum.xda-developers.com/showthread.php?t=1334922
hope u can do it
nvt992 said:
this is for cm7
patch http://forum.xda-developers.com/showthread.php?t=1324924
or original theme
http://forum.xda-developers.com/showthread.php?t=1334922
hope u can do it
Click to expand...
Click to collapse
Well ok thanks but don't count on me ok because i am currently researching for 2G/3G toggle button for PowerWidget, this one is not that high on my list, but you never know..
ok thank you
where can i get Baksmali manager?
lasmaty07 said:
where can i get Baksmali manager?
Click to expand...
Click to collapse
Check back later mate, just uploading right now because of on the original link, it's dead. I'll upload it for us all to share
EDIT: Uploaded. Click Baksmali Manager link on the first page to download. APK Multi Tool can be found on the same parent thread (Hacking General)
Done, but get this error when recompiling .apk
Code:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\me\Desktop\folder>apktool.bat b -f -d out
I: Smaling...
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: [email protected]
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.buildFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.Androlib.buildSourcesSmali(Unknown Source)
at brut.androlib.Androlib.buildSources(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.apktool.Main.cmdBuild(Unknown Source)
at brut.apktool.Main.main(Unknown Source)
Tried to do it manually like this and using apk multitool, but same error in log.
even tried to compile just after decompiling but that's no help.. same error
Any help?
jaggyjags said:
Done, but get this error when recompiling .apk
Code:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\me\Desktop\folder>apktool.bat b -f -d out
I: Smaling...
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: [email protected]
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.buildFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.Androlib.buildSourcesSmali(Unknown Source)
at brut.androlib.Androlib.buildSources(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.apktool.Main.cmdBuild(Unknown Source)
at brut.apktool.Main.main(Unknown Source)
Tried to do it manually like this and using apk multitool, but same error in log.
even tried to compile just after decompiling but that's no help.. same error
Any help?
Click to expand...
Click to collapse
APKTools is a bit outdated and i'm afraid some incompatibilites with Google SDK might be the source of the problem. search APK Multi Tools and use that one instead with SDK release 16 and up.
Hello, and thanks for the how-to!
Sadly I couldn't get it to work on my phone (Motorola Atrix 2). Some of the smali files were pretty different... I tried my best but there were definitely moments when I wasn't sure if I was doing the correct thing... SystemUI won't compile.
Hi, all. Seems the statusbarservice.smali is very different from each other. So to help you all, this is the java code that should give you a better understanding. Please read here https://github.com/nadlabak/android...m/android/server/status/StatusBarService.java
Sent from my ST18i using XDA App
This is a guide on how to enable unlimited apps on the traybar. This is for devs or users who want to do the mod themselves and include in their custom or own rom.
Tools:
1. apktools/smali/baksmali
2. 7zip
3. notepad++
4. knowledge of using the above tools and decompiling and recompiling.
Guide:
Part I: Editing services.jar
1. Decompile services.jar and edit MultiWindowManagerService.smali located in com/android/server/am folder. Search for the following code and insert the one with ++ highlighted in red (dont include the ++ just the goto :cond_10). Note that cond_10 may be different for your version so look for "const/4 v0, 0x1" below, above it is your "cond_xx" and edit the "goto :cond_10" like "goto :cond_xx".
Code:
.method public isSupportApp(Ljava/lang/String;)Z
.registers 3
.parameter "packageName"
.prologue
.line 410
[COLOR="Red"]++goto :cond_10[/COLOR]
iget-object v0, p0, Lcom/android/server/am/MultiWindowManagerService;->mSupportAppList:Ljava/util/ArrayList;
invoke-virtual {v0, p1}, Ljava/util/ArrayList;->contains(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_10
const-string v0, "android"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_12
.line 411
[COLOR="Red"]:cond_10[/COLOR]
const/4 v0, 0x1
.line 414
:goto_11
return v0
:cond_12
const/4 v0, 0x0
goto :goto_11
.end method
2. Recompile.
Part II: Editing SystemUI.apk
1. Decompile SystemUI.apk and edit MiniModeAppsPanel.smali located in com/android/systemui/statusbar folder. Search for "CATEGORY_MULTIWINDOW_LAUNCHER". Just delete the line with "--" highlighted in blue and add the line with "++" highlighted in red. Make sure that the v7 in "const-string v7" is the same as the v7 in "sget-object v7". It could be v11 or v22 or whatever so make sure to edit the "const-string vx" with the correct vx value in "const-string vx".
Code:
[COLOR="Red"]++const-string v7, "android.intent.category.LAUNCHER"[/COLOR]
[COLOR="Blue"]--sget-object v7, Lcom/android/systemui/multiwindow/MultiWindowReflector$Intent;->CATEGORY_MULTIWINDOW_LAUNCHER:Ljava/lang/String;[/COLOR]
2. Recompile.
Part III: Push the edited services.jar and SystemUI.apk to your tablet and reboot.
Awesome dude!! Thanks!
worked perfectly for the new 8013!!
http://d-h.st/YRJ
selective disable?
In general this is really awesome and I really appreciate the options this gives me, but there are some apps where I wish this was either disabled or the overlay button was in another spot. Being right over the enter key on my keyboard or near a button in a game tends to cause some grief for me. Any suggestions?
Edit: Found the answer. Lol. http://forum.xda-developers.com/showthread.php?t=2136313
How to auto-hide mobile signal icons for empty SIM slots on MTK6589 devices
Introduction
Many users using only one SIM card tend to get fed up with the mobile signal
icon that's always displayed for empty SIM slot in the status bar. This how-to will show you
how to smali hack the SystemUI to make these icons auto-hide - according to presence
of a SIM card in a SIM slots. This is a clean solution - since it will dynamically reflect
which sim slot is in use and which is not. If both SIM slots are used, both icons will be visible.
For devs: It took me several hours to figure out how this could be achieved,
so please, if you decide to use this how-to to include the mod in your custom roms,
I expect you to give proper credits. Thanks in advance.
The guide does not cover things like deodexing/decompiling/compiling/odexing jars and apks.
It expects you already are familiar with these processes.
There are already many guides for those out there.
Solution
1) Decompile SystemUI.apk
2) Open smali/com/android/systemui/statusbar/SignalClusterViewGemini.smali
3) search for "apply" method
Code:
# virtual methods
.method public apply()V
4) Make note of constants defined at the beginning of the method.
We will need 0x0, 0x1, and 0x8 later.
v5 = 0x0 - ID for SIM Slot 1
v9 = 0x1 - ID for SIM Slot 2
v6 = 0x8 - constant used to set visibility of a view (0x8 == View.GONE)
Code:
.prologue
const/4 v11, 0x4
const/4 v10, 0x0
const/4 v9, 0x1
const/16 v6, 0x8
const/4 v5, 0x0
5) Search for first occurence of isSimInserted method call in "apply" method
Code:
.line 421
.local v3, state:I
invoke-direct {p0, v5}, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->isSimInserted(I)Z // v5 == 0x0 which is SIM Slot #1
move-result v4
if-eqz v4, :cond_1f
v5 constant which value ix 0x0 is used - this means it checks for SIM presense in Slot 1
As you can see, if a return value of isSimInserted method is equal to zero (if-eqz v4...)
this means that the SIM for tested Slot is not inserted and code execution jumps to label :cond_1f
(label name might be different in your case)
6) Search for label name we found in the previous step to locate the start
of the code section for this label cond_1f in my case) Should look similat to this
Code:
.line 452
.end local v0 #id:I
.end local v1 #resId:Lcom/mediatek/systemui/ext/IconIdWrapper;
.end local v2 #simColorId:I
:cond_1f
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mSignalNetworkType:Landroid/widget/ImageView;
7) Now add these lines before iget-object v4, p0 (start on new line, right after :cond_1f)
Code:
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mMobileGroup:Landroid/view/ViewGroup;
invoke-virtual {v4, v6}, Landroid/view/ViewGroup;->setVisibility(I)V
This will reference the ViewGroup containing the signal icon for SIM Slot 1 and set it's visibility to 0x8 (View.GONE)
Make sure you use the correct parameter in setVisibility Call. In my case it's v6 (its value is 0x8)
8) Now search for next occurrence of isSimInserted call in "apply" method - this time for SIM Slot 2
Code:
.line 546
.restart local v3 #state:I
invoke-direct {p0, v9}, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->isSimInserted(I)Z // v9 == 0x1 which is SIM Slot #2
move-result v4
if-eqz v4, :cond_2f
v9 constant which value ix 0x1 is used - this means it checks for SIM presense in Slot 2
As you can see, if a return value of isSimInserted method is equal to zero (if-eqz v4...)
this means that the SIM for tested Slot is not inserted and code execution jumps to label :cond_2f
(label name might be different in your case)
9) Search for label name we found in the previous step to locate the start
of the code section for this label cond_2f in my case) Should look similar to this
Code:
.line 578
.end local v0 #id:I
.end local v1 #resId:Lcom/mediatek/systemui/ext/IconIdWrapper;
.end local v2 #simColorId:I
:cond_2f
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mSignalNetworkTypeGemini:Landroid/widget/ImageView;
10) Now add these lines before iget-object v4, p0 (start on new line, right after :cond_2f)
Code:
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mMobileGroupGemini:Landroid/view/ViewGroup;
invoke-virtual {v4, v6}, Landroid/view/ViewGroup;->setVisibility(I)V
This will reference the ViewGroup containing the signal icon for SIM Slot 2 and set it's visibility to 0x8 (View.GONE)
Make sure you use the correct parameter in setVisibility Call. In my case it's v6 (its value is 0x8)
11) Recompile SystemUI and push it to phone. Done.
EDITED:............
Hi i changed the smali but it didn`t work...I got the same names and files in smali as you on your screenshots.
When I`m pasting the lines from your post should I delete the old ones?
Thank u very very much.. This was what I needed.. Really thanku...
Oops.. Got one problem.. After doing every thing as u said.. Zipaligned... And flashed.. And then SystemUI is FCing....
Can u plz plz reply A.S.A.P.
Plz..
Sent from my Micromax A116i using XDA Premium 4 mobile app
If there are FCs you probably did something wrong. Logcat would tell you exactly where and why it FCs so it'll help you to pinpoint where your issue is.
C3C076 said:
If there are FCs you probably did something wrong. Logcat would tell you exactly where and why it FCs so it'll help you to pinpoint where your issue is.
Click to expand...
Click to collapse
It worked.. Thank you very much..
Gravity Box was causing problems.. I disabled it. And all done...:thumbup:
Sent from my Micromax A116i using XDA Premium 4 mobile app
---------- Post added at 04:59 PM ---------- Previous post was at 04:57 PM ----------
sebcio2804 said:
Hi i changed the smali but it didn`t work...I got the same names and files in smali as you on your screenshots.
When I`m pasting the lines from your post should I delete the old ones?
Click to expand...
Click to collapse
No.. Just do as mentioned.. It worked for me..
Sent from my Micromax A116i using XDA Premium 4 mobile app
C3C076 said:
How to auto-hide mobile signal icons for empty SIM slots on MTK6589 devices
Introduction
Many users using only one SIM card tend to get fed up with the mobile signal
icon that's always displayed for empty SIM slot in the status bar. This how-to will show you
how to smali hack the SystemUI to make these icons auto-hide - according to presence
of a SIM card in a SIM slots. This is a clean solution - since it will dynamically reflect
which sim slot is in use and which is not. If both SIM slots are used, both icons will be visible.
For devs: It took me several hours to figure out how this could be achieved,
so please, if you decide to use this how-to to include the mod in your custom roms,
I expect you to give proper credits. Thanks in advance.
The guide does not cover things like deodexing/decompiling/compiling/odexing jars and apks.
It expects you already are familiar with these processes.
There are already many guides for those out there.
Solution
1) Decompile SystemUI.apk
2) Open smali/com/android/systemui/statusbar/SignalClusterViewGemini.smali
3) search for "apply" method
Code:
# virtual methods
.method public apply()V
4) Make note of constants defined at the beginning of the method.
We will need 0x0, 0x1, and 0x8 later.
v5 = 0x0 - ID for SIM Slot 1
v9 = 0x1 - ID for SIM Slot 2
v6 = 0x8 - constant used to set visibility of a view (0x8 == View.GONE)
Code:
.prologue
const/4 v11, 0x4
const/4 v10, 0x0
const/4 v9, 0x1
const/16 v6, 0x8
const/4 v5, 0x0
5) Search for first occurence of isSimInserted method call in "apply" method
Code:
.line 421
.local v3, state:I
invoke-direct {p0, v5}, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->isSimInserted(I)Z // v5 == 0x0 which is SIM Slot #1
move-result v4
if-eqz v4, :cond_1f
v5 constant which value ix 0x0 is used - this means it checks for SIM presense in Slot 1
As you can see, if a return value of isSimInserted method is equal to zero (if-eqz v4...)
this means that the SIM for tested Slot is not inserted and code execution jumps to label :cond_1f
(label name might be different in your case)
6) Search for label name we found in the previous step to locate the start
of the code section for this label cond_1f in my case) Should look similat to this
Code:
.line 452
.end local v0 #id:I
.end local v1 #resId:Lcom/mediatek/systemui/ext/IconIdWrapper;
.end local v2 #simColorId:I
:cond_1f
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mSignalNetworkType:Landroid/widget/ImageView;
7) Now add these lines before iget-object v4, p0 (start on new line, right after :cond_1f)
Code:
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mMobileGroup:Landroid/view/ViewGroup;
invoke-virtual {v4, v6}, Landroid/view/ViewGroup;->setVisibility(I)V
This will reference the ViewGroup containing the signal icon for SIM Slot 1 and set it's visibility to 0x8 (View.GONE)
Make sure you use the correct parameter in setVisibility Call. In my case it's v6 (its value is 0x8)
8) Now search for next occurrence of isSimInserted call in "apply" method - this time for SIM Slot 2
Code:
.line 546
.restart local v3 #state:I
invoke-direct {p0, v9}, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->isSimInserted(I)Z // v9 == 0x1 which is SIM Slot #2
move-result v4
if-eqz v4, :cond_2f
v9 constant which value ix 0x1 is used - this means it checks for SIM presense in Slot 2
As you can see, if a return value of isSimInserted method is equal to zero (if-eqz v4...)
this means that the SIM for tested Slot is not inserted and code execution jumps to label :cond_2f
(label name might be different in your case)
9) Search for label name we found in the previous step to locate the start
of the code section for this label cond_2f in my case) Should look similar to this
Code:
.line 578
.end local v0 #id:I
.end local v1 #resId:Lcom/mediatek/systemui/ext/IconIdWrapper;
.end local v2 #simColorId:I
:cond_2f
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mSignalNetworkTypeGemini:Landroid/widget/ImageView;
10) Now add these lines before iget-object v4, p0 (start on new line, right after :cond_2f)
Code:
iget-object v4, p0, Lcom/android/systemui/statusbar/SignalClusterViewGemini;->mMobileGroupGemini:Landroid/view/ViewGroup;
invoke-virtual {v4, v6}, Landroid/view/ViewGroup;->setVisibility(I)V
This will reference the ViewGroup containing the signal icon for SIM Slot 2 and set it's visibility to 0x8 (View.GONE)
Make sure you use the correct parameter in setVisibility Call. In my case it's v6 (its value is 0x8)
11) Recompile SystemUI and push it to phone. Done.
Click to expand...
Click to collapse
Hello ,
I'm using AOSP Lollipop ROM on my redmi note 3 pro (dual sim) , using both sim. but the problem is there is only 1 signal bar icon for sim , doesn't matter if you use 1 SIM ,2 sim or no sim at all . Signal bar icon on status bar remains only 1. ROM developer who modified it is not helping at all to remove it.
Can you please help in how to unhide and show both sim card signal strength icon ?
Have posted same ques in this thread please see - http://forum.xda-developers.com/general/general/how-to-2-signal-bars-dual-sim-status-t3366574
There is no guide/tutorial/apk on the web to do all this for Lewa OS, searched a lot, so I decided to do this myself.
This tutorial will do/add/change these things in LewaOS PIM.apk (SMS)
1. 5 lines to write sms
2. Enter key on main keyboard
3. Replaced smiley texts [no nose - in smiley]
4. Default sms per thread=5000 instead of 500
5. Default mms per thread=500 instead of 50
6. Can send sms to 200 people now instead of 20
7. No sms to mms conversion, default was limited to 8 sms
Required Knowledge:
1. Notepad++
2. Apk compiling and decompiling (I use APK-Multi-Toolv1.0.10 for this)
3. Compression tool (like winrar, 7zip)
Steps:
Setting Up Environment (for noobs):
1. Get Apk-Multi-Tool from here or here and set it up/extract in any drive, C, D, whatever.
2. Run ‘Setup.bat’ and press 3 to setup directories.
3. Get framework-res.apk and PIM.apk of LewaOS and place them in folder ‘other’ and ‘place-apk-here-for-modding’, respectively.
4. Again press 2->enter->1->enter (wait) ->any key->any key to install ‘framework-res.apk’
5. Close cmd (setup.bat) or press 00->enter to exit.
6. Run ‘Script.bat’, press enter.
7. To set current project, enter 24 and select PIM.apk by pressing 1
8. Switch Decompile mod by entering 26 so it decompiles sources and resources files.
9. Press 9 to decompile.
10. Now navigate to ‘projects/PIM.apk’ folder.
Moding:
RES PART (XML)
1.
Open 'res\values\arrays.xml'
And delete all the noses -
2.
Open ‘res\xml\mms_config.xml’
change
Code:
<int name="defaultSMSMessagesPerThread">[COLOR="Red"]500[/COLOR]</int>
<int name="defaultMMSMessagesPerThread">[COLOR="Red"]50[/COLOR]</int>
<int name="recipientLimit">[COLOR="Red"]20[/COLOR]</int>
<int name="smsToMmsTextThreshold">[COLOR="Red"]8[/COLOR]</int>
To
Code:
<int name="defaultSMSMessagesPerThread">[COLOR="Blue"]5000[/COLOR]</int>
<int name="defaultMMSMessagesPerThread">[COLOR="Blue"]500[/COLOR]</int>
<int name="recipientLimit">[COLOR="Blue"]200[/COLOR]</int>
<int name="smsToMmsTextThreshold">[COLOR="Blue"]800[/COLOR]</int>
3.
Go to ‘res\layout\destk_message_main.xml’
find '|textShortMessage' and delete it
find ‘android:maxLines=’ in the same line and change value to 5
4.
Go to ‘res\layout\mms_compose_edit.xml’
Do the same
SMALI PART
Go to ‘smali\com\lewa\PIM\mms\ui\ComposeMessageActivity.smali’
Find ‘.method public onEditorAction’
Look for
Code:
.method public onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z
.locals 6
.parameter "v"
.parameter "actionId"
.parameter "event"
.prologue
const/4 v0, 0x0
const/4 v5, 0x0
const v4, 0x7f0d032a
const v3, 0x7f0d030d
const v2, 0x1010355
.line [COLOR="SeaGreen"]5511[/COLOR]
[COLOR="Red"]if-eqz p3, :cond_4[/COLOR]
and paste the following (text in blue, including .line x), just below ‘if-eqz p3, :cond_4’
Code:
[COLOR="Blue"] [COLOR="Red"].line x[/COLOR]
iget-boolean v3, p0, Lcom/android/mms/ui/ComposeMessageActivity;->mIsHardKeyboardOpen:Z
if-nez v3, :cond_1
iget v3, p0, Lcom/android/mms/ui/ComposeMessageActivity;->mInputMethod:I
const/16 v4, 0x50
if-ne v3, v4, :cond_1[/COLOR]
Edit the .line x according to the previous value (5511 in this case) and the entry should NOT get repeated, or PIM.apk will force close.
To check this, edit .line x according to previous value and search the edited number, if you get more than one results, edit it again, keep doing this,
Eg: because of previous entry of 5511 here we will edit .line x to .line 5512 and search 5512, if we get 2 or more results, we will further edit it to 5513 and again search.
So, now it should look like this
BEFORE:
Code:
[COLOR="Red"]
.method public onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z
.locals 6
.parameter "v"
.parameter "actionId"
.parameter "event"
.prologue
const/4 v0, 0x0
const/4 v5, 0x0
const v4, 0x7f0d032a
const v3, 0x7f0d030d
const v2, 0x1010355
.line [COLOR="SeaGreen"]5511[/COLOR]
if-eqz p3, :cond_4
.line 5514
invoke-virtual {p3}, Landroid/view/KeyEvent;->isShiftPressed()Z
move-result v1
if-nez v1, :cond_0
.line 5521
invoke-virtual {p3}, Landroid/view/KeyEvent;->getAction()I
move-result v1
if-nez v1, :cond_1
[/COLOR]
AFTER
Code:
[COLOR="Red"]
.method public onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z
.locals 6
.parameter "v"
.parameter "actionId"
.parameter "event"
.prologue
const/4 v0, 0x0
const/4 v5, 0x0
const v4, 0x7f0d032a
const v3, 0x7f0d030d
const v2, 0x1010355
.line [COLOR="SeaGreen"]5511[/COLOR]
if-eqz p3, :cond_4
[COLOR="Blue"].line 5512
iget-boolean v3, p0, Lcom/android/mms/ui/ComposeMessageActivity;->mIsHardKeyboardOpen:Z
if-nez v3, :cond_1
iget v3, p0, Lcom/android/mms/ui/ComposeMessageActivity;->mInputMethod:I
const/16 v4, 0x50
if-ne v3, v4, :cond_1[/COLOR]
.line 5514
invoke-virtual {p3}, Landroid/view/KeyEvent;->isShiftPressed()Z
move-result v1
if-nez v1, :cond_0
.line 5521
invoke-virtual {p3}, Landroid/view/KeyEvent;->getAction()I
move-result v1
if-nez v1, :cond_1
[/COLOR]
Save everything.
Compiling back:
1.To compile back, press 11 and enter, say no by pressing n.
2.Go back to ‘place-apk-here-for-modding’ and find ‘unsignedPIM.apk’
3.Open ‘unsignedPIM.apk’ and ‘PIM.apk’ using a compression tool (I use 7zip/winrar)
4.And drag and drop everything except ‘res’ and ‘classes.dex’ from PIM.apk to unsignedPIM.apk
5.Rename unsignedPIM.apk to PIM.apk and flash in recovery or push it in system with proper permissions.
For Canvas Music (should work for Canvas 2 and other ported roms too), here is the modded PIM.apk (extract the .rar archive and flash the ‘Lewa-moddedPIM.zip’ in recovery.
Now press THANX please.
My Work:
Mods For Lg L3 E405 Dual
Micromax Canvas Music Kernel Development Thread
How to mod lewa os PIM.apk (sms)
Multi Boot MTK Devices
Custom recoveries for Canvas Music A88 and Canvas 2 A110
Micromax Canvas Music Custom Rom's Patches
MT6577 Auto Focus Fix
Works on lewa os Micromax A110
Sent from my Micromax A110 using xda app-developers app
3 Way Reboot Option Guide
All information, follow these instructions !
{
"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"
}
Why do you need ?
* Reboot : Normal Reboot
* Hot Boot : Closes every service and app and does a quick reboot = you don't see the LG reboot logo = it jumps straight to the bootanimation = this is very fast reboot.
* Recovery : Reboot into recovery mode.
Required tools
* Java
* SDK
* Notepad ++ ( Or another application )
* Deodexed Framework
* Winrar or 7Zip or Winzip
* Baksmali/Smali Manager
* Download the "Required files"
* Extract the "android.policy.jar" from your rom /system/framework/
PART 1
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
* Open GlobalActions.smali with notepad++ and change the following lines after that close and save the changes.
- Required line
Code:
1125 .line 339
1126 iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
1127
1128 new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
1129
1130 const v2, 0x202042c
1131
1132 const v3, 0x20b0013
1133
1134 invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
1135
1136 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- New Line
Code:
1125 .line 339
1126 iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
1127
1128 new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
1129
1130 const v2, 0x202042c
1131
1132 const v3, 0x20b0013
1133
1134 invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
1135
1136 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
PART 2
* Navigate to ....\classout\com\android\internal\policy\impl\GlobalActions$SinglePressAction.smali
* Open GlobalActions$SinglePressAction.smaliwith notepad++ and add the following lines after that close and save the changes.
- Lines to add before line "# instance fields"
Code:
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
-Lines to add after line "# direct methods"
Code:
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x3
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, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method
PART 3
Trick
xdabbeb said:
Here's a slightly modified version that I've been using for a while. It just removes Download (shutdownthread doesn't support it), uses "setprop ctl.restart zygote" as the shell restart command (better method imo and doesn't require busybox), and renames the options to what I preferred.
Click to expand...
Click to collapse
* Open GlobalActions$99.smali with notepad++ and add the following lines after that close and save the changes.
Org line
Code:
const-string v2, "Restart Method"
Modified line
Code:
const-string v2, "Own Rom Name"
* Compile clasess.dex file ( Baksmali/Smali Tool )
* Open your "android.policy.jar" with winrar and drag the new "classes.dex" file into the "android.policy.jar"and replace the original "classes.dex".
* You can do this with a File explorer ( With root permissions or before you build your rom. )
Thanks @kahvitahra and @civato and @_JKay_ and @xdabbeb original guide and Required files
Main Thread update big thanks @xdabbeb
* Update Required files and Baksmali Smali Tool
Delete
Update KK :good:
pendroz said:
Update KK :good:
Click to expand...
Click to collapse
do you have a guide also for stock KK (on odexed rom)?
Teşekkürler bunun saf G2 kitkat için olanı varmı acaba odex uzantılılar için?
@pendroz
Is this the same for all carriers' firmwares?
Does only framework.jar need to be deodexed or the whole framework folder?
Do we compile all 3 files in required folder into classes.dex?
Sorry for all of the questions. Cheers & teşekkürler!
AyDee said:
@pendroz
Is this the same for all carriers' firmwares?
Does only framework.jar need to be deodexed or the whole framework folder?
Do we compile all 3 files in required folder into classes.dex?
Sorry for all of the questions. Cheers & teşekkürler!
Click to expand...
Click to collapse
The same for all variants :good:
Do we compile all 3 files in required folder into classes.dex?
- Yes ( only android.policy jar ) To edit the specified line
Thanks!
(Yes I meant to say android.policy.jar, not framework.jar )
Edit: On CloudyStock 1.2 I found that the lines you need to change in part 1 are a little different-
from:
Code:
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
to:
Code:
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Sorry to double post but when I go to compile classes.dex I get this:
Code:
C:\...\G2\jar file decompile and compiler>java -Xmx512M -jar smal
i.jar classout -o classes.dex
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[42,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,11] mismat
ched input 'p1' expecting END_METHOD_DIRECTIVE
classout\com\android\internal\policy\impl\GlobalActions$99.smali[0,0] 17039360 c
annot fit into a short
classout\com\android\internal\policy\impl\GlobalActions$99.smali[80,4] mismatche
d tree node: I_STATEMENT_FORMAT11n expecting I_CATCHES
classout\com\android\internal\policy\impl\GlobalActions$99.smali[84,4] mismatche
d tree node: I_STATEMENT_FORMAT11x expecting I_FIELDS
(as I mentioned, I am trying this with the deodexed android.policy.jar from CloudyStock)
Am I doing something wrong?
AyDee said:
Sorry to double post but when I go to compile the jar I get this:
Code:
C:\...\G2\jar file decompile and compiler>java -Xmx512M -jar smal
i.jar classout -o classes.dex
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[42,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,11] mismat
ched input 'p1' expecting END_METHOD_DIRECTIVE
classout\com\android\internal\policy\impl\GlobalActions$99.smali[0,0] 17039360 c
annot fit into a short
classout\com\android\internal\policy\impl\GlobalActions$99.smali[80,4] mismatche
d tree node: I_STATEMENT_FORMAT11n expecting I_CATCHES
classout\com\android\internal\policy\impl\GlobalActions$99.smali[84,4] mismatche
d tree node: I_STATEMENT_FORMAT11x expecting I_FIELDS
Am I doing something wrong?
Click to expand...
Click to collapse
Which version use baksmali/smali tool ?
pendroz said:
Which version use baksmali/smali tool ?
Click to expand...
Click to collapse
I was using a different tool, started over using yours and all went well. Thanks again.:good::good:
Nice mod, thank you
Can use it on g pro2 ported roms?
Sent from my LG-D802 using Tapatalk
this cannot be used on odexed stock KK?
ahmed534 said:
this cannot be used on odexed stock KK?
Click to expand...
Click to collapse
Just a little guidance
http://forum.xda-developers.com/galaxy-s2/themes-apps/how-to-manually-deodex-odex-t1208320
for 4.2.2 they are same steps?
these are the lines I found :
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/ObjectZ
Click to expand...
Click to collapse
SHould I change them to :
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/ObjectZ
Click to expand...
Click to collapse
2) there is no GlobalActions$99.smali !!!
am using kitkat
ahmed534 said:
these are the lines I found :
SHould I change them to :
2) there is no GlobalActions$99.smali !!!
am using kitkat
Click to expand...
Click to collapse
Read the steps carefully
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
pendroz said:
Read the steps carefully
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
Click to expand...
Click to collapse
ohh thks mate ! and sry I was misken and was looking into another folder (from another tutorial) :s
I need a break I think XD
@pendroz
can you made a flashable zip file pls
this guide is very very good but hard for me