Related
Swipe To Clear Notification
Working on O1
HERE IS THE LINK
http://forum.xda-developers.com/showthread.php?t=1483193
THANX Tohansip87
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.
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!
I was working on swipe to remove notifications mod for the past three months and now finally have it working. This tutorial is for all those who have a problem compiling it.
Special thanks to hansip87 and spacecaker for helping me out. The original thread by hansip is here.
This is for ddkq8 but should work with any firmware.
For compiling the right way check the second post. I have attached all the files that have been edited in this guide in the second post. You can use them to compare.
hansip87 said:
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.
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
Click to expand...
Click to collapse
Now lets start the mod.
1. Editing SystemUI.apk
1.1 Editing res/anim
We are registering anim object here, so swipe animation can be done.
Create an anim folder (if it does 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="-50.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="50.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
Save both files.
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
Now some problems arise if you do not assign the correct id for a anim file. So to prevent it we make the use of apktool.
Recompile your apk after step 1.2
Decompile again the resulting apk.
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 :
Inside /res/values/public.xml, you'll find something like this (at the end of the file):
Code:
<resources>
.
.
.
<public type="anim" name="slide_out_left_basic" id="0x7f0c0000" />
<public type="anim" name="slide_out_right_basic" id="0x7f0c0001" />
</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, 0x7f0a
and
Code:
.line 51
const v1, 0x7f0a0001
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.
Put it in the folder smali/com/android/systemui/statusbar/
*MOST IMPORTANT AND DIFFICULT PART*
1.6 Edit smali/com/android/systemui/statusbar/StatusBarService.smali
This is the file that generate NotificationView. 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 {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
Insert the bold code below the line
"invoke-virtual {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v9"
Code:
check-cast v9, Lcom/android/systemui/statusbar/LatestItemContainer;
.local v9, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_1
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_1
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v7, p1
invoke-direct {v0, v1, v7}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v9
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
.line 581
:cond_1
Also insert the following bold code :
Code:
const v1, 0x7f090024
[B]invoke-virtual {v9, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B]
move-result-object v1
move-object v0, v1
check-cast v0, Landroid/view/ViewGroup;
So it should look something like this :
Code:
invoke-virtual {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v9
[I][B]check-cast v9, Lcom/android/systemui/statusbar/LatestItemContainer;
.local v9, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_1
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_1
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v7, p1
invoke-direct {v0, v1, v7}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v9
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
.line 581
:cond_1[/B][/I]
const v1, 0x7f090024
[I][B] invoke-virtual {v9, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B][/I]
move-result-object v1
move-object v0, v1
check-cast v0, Landroid/view/ViewGroup;
Bold is the inserted code.
Now we are done editing the systemui files. Lets move on to framework.jar
2. Editing framework.jar
2.1 editing smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
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 = 0xe[/B]
.field static final TRANSACTION_onNotificationClick:I = 0x9
.field static final TRANSACTION_onNotificationError:I = 0xa
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 it 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_15a[/B]
Find and replace this code (it is at the end of the file):
Code:
.line 183
const/4 v0, 0x1
goto/16 :goto_7
: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
Change it to :
Code:
.line 183
const/4 v0, 0x1
goto/16 :goto_7
[B]
.line 187
.end local v1 #_arg0:Ljava/lang/String;
.end local v2 #_arg1:Ljava/lang/String;
.end local v3 #_arg2:I
.end local v4 #_arg3:I
.end local v5 #_arg4:I
.end local v6 #_arg5:Ljava/lang/String;
:sswitch_132
const-string v0, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {p2, v0}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
.line 188
invoke-virtual {p0}, Lcom/android/internal/statusbar/IStatusBarService$Stub;->onClearAllNotifications()V
.line 189
invoke-virtual {p3}, Landroid/os/Parcel;->writeNoException()V
.line 190
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_140
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_15a
.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_9b
0x9 -> :sswitch_a9
0xa -> :sswitch_e3
0xb -> :sswitch_f1
0xc -> :sswitch_10b
0xd -> :sswitch_132
[B]0xe -> :sswitch_140[/B]
0x5f4e5446 -> :sswitch_8
.end sparse-switch
.end method
2.2 Editing smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
Here are the steps:
Insert these function code to the end of 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
Find this code in the file :
Code:
[B]const/16 v3, 0xc
const/4 v4, 0x0[/B]
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,
Save.
2.3 editing smali/com/android/internal/statusbar/IStatusBarService.smali
Insert this 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
And with this we are done editing the files.
You now have modded the rom that you like to have the swipe to remove notifications.
Cheers..
How to Compile the right way?
1.SystemUI.apk ->
Compile with APK Multi Tool, press y and y twice when asked.
Delete modified files from keep folder, and after that continue compiling.
Copy from original APK the 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 to implement it on your device.
Second ... Thanks
Sent from my GT-S5830 using Tapatalk
wheres the dl link >? lolol
CoolCatGetHome said:
wheres the dl link >? lolol
Click to expand...
Click to collapse
Its a tutorial. There are already some flashable zips out there.
awesome guide !
Bravoo! This is awesome!
Sent from my WAREZ impulses.
Great guide bro
dam tahts a legit guide
yeowwwai said:
Bravoo! This is awesome!
Sent from my WAREZ impulses.
Click to expand...
Click to collapse
abhibnl said:
Great guide bro
Click to expand...
Click to collapse
SiL3nTKiLL said:
dam tahts a legit guide
Click to expand...
Click to collapse
Thanks..
Finally U did it!! Congrats Shaan
devilsking said:
Finally U did it!! Congrats Shaan
Click to expand...
Click to collapse
Yea..
Finally
From the Galaxy to your phone
So who's gonna be the genius to do one for lewa ?
djsky2011 said:
So who's gonna be the genius to do one for lewa ?
Click to expand...
Click to collapse
This guide is specifically for stock roms ...
There will be good amount of smali changes needed for making it for lewa if i am not wrong
Sent from Galaxy Ace which just landed on "MOON"
shaaan said:
I was working on swipe to remove notifications mod for the past three months and now finally have it working. This tutorial is for all those who have a problem compiling it.
Special thanks to hansip87 and spacecaker for helping me out. The original thread by hansip is here.
This is for ddkq8 but should work with any firmware.
For compiling the right way check the second post. I have attached all the files that have been edited in this guide in the second post. You can use them to compare.
Now lets start the mod.
1. Editing SystemUI.apk
1.1 Editing res/anim
We are registering anim object here, so swipe animation can be done.
Create an anim folder (if it does 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="-50.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="50.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
Save both files.
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
Now some problems arise if you do not assign the correct id for a anim file. So to prevent it we make the use of apktool.
Recompile your apk after step 1.2
Decompile again the resulting apk.
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 :
Inside /res/values/public.xml, you'll find something like this (at the end of the file):
Code:
<resources>
.
.
.
<public type="anim" name="slide_out_left_basic" id="0x7f0c0000" />
<public type="anim" name="slide_out_right_basic" id="0x7f0c0001" />
</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, 0x7f0a
and
Code:
.line 51
const v1, 0x7f0a0001
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.
Put it in the folder smali/com/android/systemui/statusbar/
*MOST IMPORTANT AND DIFFICULT PART*
1.6 Edit smali/com/android/systemui/statusbar/StatusBarService.smali
This is the file that generate NotificationView. 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 {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
Insert the bold code below the line
"invoke-virtual {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v9"
Code:
check-cast v9, Lcom/android/systemui/statusbar/LatestItemContainer;
.local v9, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_1
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_1
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v7, p1
invoke-direct {v0, v1, v7}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v9
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
.line 581
:cond_1
Also insert the following bold code :
Code:
const v1, 0x7f090024
[B]invoke-virtual {v9, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B]
move-result-object v1
move-object v0, v1
check-cast v0, Landroid/view/ViewGroup;
So it should look something like this :
Code:
invoke-virtual {v1, v3, p2, v11}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v9
[I][B]check-cast v9, Lcom/android/systemui/statusbar/LatestItemContainer;
.local v9, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_1
move-object/from16 v0, v2
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_1
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v7, p1
invoke-direct {v0, v1, v7}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v9
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
.line 581
:cond_1[/B][/I]
const v1, 0x7f090024
[I][B] invoke-virtual {v9, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B][/I]
move-result-object v1
move-object v0, v1
check-cast v0, Landroid/view/ViewGroup;
Bold is the inserted code.
Now we are done editing the systemui files. Lets move on to framework.jar
2. Editing framework.jar
2.1 editing smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
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 = 0xe[/B]
.field static final TRANSACTION_onNotificationClick:I = 0x9
.field static final TRANSACTION_onNotificationError:I = 0xa
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 it 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_15a[/B]
Find and replace this code (it is at the end of the file):
Code:
.line 183
const/4 v0, 0x1
goto/16 :goto_7
: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
Change it to :
Code:
.line 183
const/4 v0, 0x1
goto/16 :goto_7
[B]
.line 187
.end local v1 #_arg0:Ljava/lang/String;
.end local v2 #_arg1:Ljava/lang/String;
.end local v3 #_arg2:I
.end local v4 #_arg3:I
.end local v5 #_arg4:I
.end local v6 #_arg5:Ljava/lang/String;
:sswitch_132
const-string v0, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {p2, v0}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
.line 188
invoke-virtual {p0}, Lcom/android/internal/statusbar/IStatusBarService$Stub;->onClearAllNotifications()V
.line 189
invoke-virtual {p3}, Landroid/os/Parcel;->writeNoException()V
.line 190
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_140
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_15a
.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_9b
0x9 -> :sswitch_a9
0xa -> :sswitch_e3
0xb -> :sswitch_f1
0xc -> :sswitch_10b
0xd -> :sswitch_132
[B]0xe -> :sswitch_140[/B]
0x5f4e5446 -> :sswitch_8
.end sparse-switch
.end method
2.2 Editing smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
Here are the steps:
Insert these function code to the end of 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
Find this code in the file :
Code:
[B]const/16 v3, 0xc
const/4 v4, 0x0[/B]
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,
Save.
2.3 editing smali/com/android/internal/statusbar/IStatusBarService.smali
Insert this 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
And with this we are done editing the files.
You now have modded the rom that you like to have the swipe to remove notifications.
Cheers..
Click to expand...
Click to collapse
LOL. Too long for a noob like me.
Thx btw.
I'm afraid of deving now 'coz I hard-bricked my ACE once and took it to the service. Guess what? They changed my mainboard for free.
I tried to make it 3 times but I didn't get succes.
So here is a question: Is there somebody who has a lot of time and feels like doing it for me?
I'm on KPO 2.3.3.
(I attached the files which are needed)
Congo shaaan
One could also different values for android:toXDelta="-50.0%p" as they please,if its 100%,then you need to swipe across the full screen,if 50%,half of the screen,and vice versa.
Maybe you should mention that
Prawesome said:
Congo shaaan
One could also different values for android:toXDelta="-50.0%p" as they please,if its 100%,then you need to swipe across the full screen,if 50%,half of the screen,and vice versa.
Maybe you should mention that
Click to expand...
Click to collapse
Lewa's is bugged this way, sliding full screen never happens so you can't clear notifications by swiping.
consegregate said:
Lewa's is bugged this way, sliding full screen never happens so you can't clear notifications by swiping.
Click to expand...
Click to collapse
Never used Lewa
Btw guys,i suggest a value of 40% for Delta
Prawesome said:
Never used Lewa
Btw guys,i suggest a value of 40% for Delta
Click to expand...
Click to collapse
40 for delta..
Lemme try
TeamCooper Developer
TheMyth Developer
WARNING: Use the apks at your own risk!!!
I am not responsible for any bricked devices
You'll need root for this to work
To backup original camera apk
Code:
adb pull /system/app/OppoGallery2.apk
adb pull /system/app/OppoGallery2.odex
To Install (after you backed up the older version):
Download the version, rename it to OppoGallery2.apk
Code:
adb push OppoGallery2.apk /sdcard/
adb shell
su
mount -o remount,rw /system
#remove older version
rm /system/app/OppoGallery2.apk
#if the file below exists
rm /system/app/OppoGallery2.odex
cp /sdcard/OppoGallery2.apk /system/app/
To revert to older version(or stock firmware version)
Code:
adb push OppoGallery2.apk /sdcard/
#if reverting to stock firmware version
adb push OppoGallery2.odex /sdcard/
adb shell
su
mount -o remount,rw /system
cp /sdcard/OppoGallery2.apk /system/app/
#if reverting to stock firmware version
cp /sdcard/OppoGallery2.odex /system/app/
Releases:
v2 - 2013-4-6
v1 - 2013-4-6
Changelog
v2 - 2013-4-6 - Based off the X909EN_13_130328 firmware, svn2611
Code:
Changelog:
- Enabled more values for timer(3, 5, 10, 20)s
- Known bugs:
---- GUI Icons for all timers will have a 5 in upper right corner
---- During countdown, if timeleft > 5s, it'll flash a "5" Icon. If timeleft < 5s, it'll flash the correct Icon (eg 4s left = "4" icon)
Compatibility: should work with any rom
[url=http://d-h.st/knx]Download[/url] | [url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/OppoGallery2.v2.apk]Mirror[/url]
[url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/v2.camera.timer.diff]Smali Code Diffs[/url]
v1 - 2013-4-6 - Based off the X909EN_13_130328 firmware, svn2611
Code:
Changelog:
- Enabled ISO toggle for camera (Settings for them were present, but not enabled)
<string name="pref_camera_iso_title">Select ISO</string>
<string name="pref_camera_iso_entry_auto">AUTO</string>
<string name="pref_camera_iso_entry_isodeblur">ISO Auto(HJR)</string>
<string name="pref_camera_iso_entry_iso100">ISO100</string>
<string name="pref_camera_iso_entry_iso200">ISO200</string>
<string name="pref_camera_iso_entry_iso400">ISO400</string>
<string name="pref_camera_iso_entry_iso800">ISO800</string>
<string name="pref_camera_iso_entry_iso1600">ISO1600</string>
Compatibility: should work with any rom
[url=http://d-h.st/3ER]Download[/url] | [url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/OppoGallery2.v1.apk]Mirror[/url]
[url=http://files.ngvincent.com/android/oppo-find-5/misc/mods/camera/v1.camera.iso.diff]Smali Code Diffs[/url]
Version 1:
I don't know why Oppo didn't enable ISO selection in the camera app
they added the string values and icons, but didn't add the code to display the menu system
The selection of ISO values seem to work: ISO 1600 seems grainer than any other mode... but isn't as grainy as I thought 1600 would be
Great Mod!
Thanks!
Today I was trying to decompile this APK with APK Manager v5. but i get error:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Can you give me any tips? Thanks in advance.
I guess I have to pull res framework?
Update:
I Pulled framework-res.apk, and went with "10.Decompile APK (With Dependences)" using framework-res.apk but still get this error....
NODO-GT said:
Great Mod!
Thanks!
Today I was trying to decompile this APK with APK Manager v5. but i get error:
Can you give me any tips? Thanks in advance.
I guess I have to pull res framework?
Update:
I Pulled framework-res.apk, and went with "10.Decompile APK (With Dependences)" using framework-res.apk but still get this error....
Click to expand...
Click to collapse
I use linux tools... maybe my guide will be a little useful.
don't think I had any problems with apktool
https://git.ngvincent.com/projects/oppo-x909-cm10/wiki/Decompile-apk
EDIT: did you pull framework-res.odex ?
paperWastage said:
I use linux tools... maybe my guide will be a little useful
https://git.ngvincent.com/projects/oppo-x909-cm10/wiki/Decompile-apk
Click to expand...
Click to collapse
I switched APK Manager to APK Tool...
When I decompile, I don't get smali folder... Will keep looking how to decompile this properly.
NODO-GT said:
I switched APK Manager to APK Tool...
When I decompile, I don't get smali folder... Will keep looking how to decompile this properly.
Click to expand...
Click to collapse
the firmware isn't deoxed.... so apktool decompile won't give you the .smali
as I mentioned in my edited post, for the framework, you'll need to copy the .odex as well (and use baksmali to decompile odex to .smail, then use smali to compile .smali to .dex)
same for decompiling any applications
can you please remove the "low battery check" that disable flash if the battery is lower than 20%? Thanks.
badworker said:
can you please remove the "low battery check" that disable flash if the battery is lower than 20%? Thanks.
Click to expand...
Click to collapse
hmm, they changed some stuff since the last time I decompiled their Gallery apk
give me a few hours to reupdate everything
EDIT: here is a build that I haven't tested (I'm using CM10.1-based roms)
this is taken from the latest stock oppo beta rom - X909EN_11_130629_Beta
contains only your requested change. let me know if it works? (same instructions on my original post)
(original file allows flash if battery >= 15%. I've set it to allow flash if battery > 0%)
http://d-h.st/wQT
paperWastage said:
hmm, they changed some stuff since the last time I decompiled their Gallery apk
give me a few hours to reupdate everything
EDIT: here is a build that I haven't tested (I'm using CM10.1-based roms)
this is taken from the latest stock oppo beta rom - X909EN_11_130629_Beta
contains only your requested change. let me know if it works? (same instructions on my original post)
(original file allows flash if battery >= 15%. I've set it to allow flash if battery > 0%)
http://d-h.st/wQT
Click to expand...
Click to collapse
Thanks! I'll give it a try asap.
Btw, I was trying to enable the ISO selection in the newer firmware (>=130531) but they are so different from the 130328 where you made modification. I am able to remove the flash check (with a lot of work, i'm learning ) but when I put your modification at the .smali files (with attenction to the .line and so on) the application force close itself. It's frustrating but i must try and retry till I get it working. So the request is: have you some usefull advices for me?
Thanks again for your work!
Tapatalked via Oppo Find 5
badworker said:
Thanks! I'll give it a try asap.
Btw, I was trying to enable the ISO selection in the newer firmware (>=130531) but they are so different from the 130328 where you made modification. I am able to remove the flash check (with a lot of work, i'm learning ) but when I put your modification at the .smali files (with attenction to the .line and so on) the application force close itself. It's frustrating but i must try and retry till I get it working. So the request is: have you some usefull advices for me?
Thanks again for your work!
Tapatalked via Oppo Find 5
Click to expand...
Click to collapse
smali sucks .... it's hard to apply patches for smali. these guys manage to auto-patch smali code, but usually the target is roughly the same (~android AOSP/AOKP/CM10.1 base with the same code)... if I have time, I'll take a look to see how they organize the smali patcher
you need to understand assembly (smali opcodes), know how to read it, and how java code relates to it
maybe a small tutorial would help: the flash check disabler code . Not sure how you modified the code, but here's how my thought process went
after decompiling to source code, you'll figure out how to solve the problem: have this function return false all the time
you want the function to return false (i.e. flash IS NOT forbidden)
I decide to target that (if i>=15) check (it checks if you have at least 15% battery left)
com/android/camera/Camera.java
Code:
private boolean isForbidFlash()
{
boolean flag = true;
File file = new File("/sys/class/power_supply/battery/capacity");
if(!file.exists())
return false;
FileReader filereader;
int i;
char c;
filereader = new FileReader(file);
char ac[] = new char[3];
filereader.read(ac);
i = Integer.valueOf(String.valueOf(ac).substring(0, 2)).intValue();
if(ac[0] != '1' || ac[1] != '0')
break MISSING_BLOCK_LABEL_98;
c = ac[2];
if(c == '0')
i = 100;
try
{
filereader.close();
}
catch(Exception exception1)
{
try
{
exception1.printStackTrace();
}
catch(Exception exception)
{
exception.printStackTrace();
Log.e("OppoCamera", (new StringBuilder()).append("isForbidFlash: e = ").append(exception).toString());
return false;
}
}
[B]if(i >= 15)[/B]
flag = false;
return flag;
}
smali code equivalent of the function above
Code:
.method private isForbidFlash()Z
.registers 9
.prologue
const/16 v7, 0x30
const/4 v0, 0x1
const/4 v1, 0x0
.line 4942
:try_start_4
new-instance v2, Ljava/io/File;
const-string v3, "/sys/class/power_supply/battery/capacity"
invoke-direct {v2, v3}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 4943
invoke-virtual {v2}, Ljava/io/File;->exists()Z
move-result v3
if-nez v3, :cond_12
.line 4969
:goto_11
return v1
.line 4946
:cond_12
new-instance v3, Ljava/io/FileReader;
invoke-direct {v3, v2}, Ljava/io/FileReader;-><init>(Ljava/io/File;)V
.line 4947
const/4 v2, 0x3
new-array v4, v2, [C
.line 4948
invoke-virtual {v3, v4}, Ljava/io/FileReader;->read([C)I
.line 4950
invoke-static {v4}, Ljava/lang/String;->valueOf([C)Ljava/lang/String;
move-result-object v2
.line 4951
const/4 v5, 0x0
const/4 v6, 0x2
invoke-virtual {v2, v5, v6}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Integer;->intValue()I
move-result v2
.line 4952
const/4 v5, 0x0
aget-char v5, v4, v5
const/16 v6, 0x31
if-ne v5, v6, :cond_42
const/4 v5, 0x1
aget-char v5, v4, v5
if-ne v5, v7, :cond_42
const/4 v5, 0x2
aget-char v4, v4, v5
:try_end_3e
.catch Ljava/lang/Exception; {:try_start_4 .. :try_end_3e} :catch_50
if-ne v4, v7, :cond_42
.line 4953
const/16 v2, 0x64
.line 4956
:cond_42
:try_start_42
invoke-virtual {v3}, Ljava/io/FileReader;->close()V
:try_end_45
.catch Ljava/lang/Exception; {:try_start_42 .. :try_end_45} :catch_4b
.line 4961
:goto_45
const/16 v3, 0xf
if-ge v2, v3, :cond_6d
:goto_49
move v1, v0
goto :goto_11
.line 4957
:catch_4b
move-exception v3
.line 4959
:try_start_4c
invoke-virtual {v3}, Ljava/lang/Exception;->printStackTrace()V
:try_end_4f
.catch Ljava/lang/Exception; {:try_start_4c .. :try_end_4f} :catch_50
goto :goto_45
.line 4963
:catch_50
move-exception v0
.line 4965
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
.line 4966
const-string v2, "OppoCamera"
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "isForbidFlash: e = "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
goto :goto_11
:cond_6d
move v0, v1
.line 4961
goto :goto_49
.end method
if you look at the smali code and walk through/compare it with the java code, you'll see different ways to tackling the problem
A) just simply return v1 (=FALSE) on the first line. side effects: you bypass the try/catch statements, dunno if you'll break anything
B) - my approach
the (if i>= 15) check). 0xf hex is the same as 15 decimal.
Change 0xf to 0x0, so it'll check if (i >= 0), i.e. at least 0% battery
Code:
.line 4961
:goto_45
const/16 v3, [B]0xf[/B]
if-ge v2, v3, :cond_6d
C) you could also target the assignment of the flag inside the if/else statement.
#assignments of the registers at the beginning of function
Code:
const/4 v0, 0x1 # true
const/4 v1, 0x0 # false
#what happens inside the condition=true block, until the return statement. condition = enough battery
the "#" lines are my comments
Code:
if-ge v2, v3, :cond_6d
#jump to :cond_6d
:cond_6d
move v0, v1 #v0 = v1 , both = FALSE(since v1 was initialize to FALSE)
.line 4961
goto :goto_49
#jump to the :goto_49 tag
:goto_49
move v1, v0 # v1 = v0, both = FALSE
goto :goto_11
#jump to the :goto_11 tag
:goto_11
return v1 # return v1 = FALSE <- result we want
#what happens inside the condition=false block, until the return statement. condition = not enough battery
Code:
if-ge v2, v3, :cond_6d # we don't jump, since condition failed. follow the next line
:goto_49
move v1, v0 # v1 = v0, both = TRUE(since v0 was initialized to TRUE)
goto :goto_11
#jump to the :goto_11 tag
:goto_11
return v1 # return v1 = TRUE <- flash forbidden
you could change v0 to initialize to FALSE as well... not sure about the side effects though
(I thought they enabled ISO selection in the latest firmware anyway?)
for the ISO selection, here's how I did it
the compiled apk already had the values, arrays, setup for the ISO.
Code:
res/xml/camera_preferences.xml:16: <IconListPreference camera:title="@string/pref_camera_iso_title" camera:key="[U][B]pref_camera_iso_key[/B][/U]" camera:defaultValue="@string/pref_camera_iso_default" camera:entryValues="@array/pref_camera_iso_entryvalues" camera:entries="@array/pref_camera_iso_entries" camera:singleIcon="@drawable/oppo_ic_iso" />
they just didn't enable the list preference in the code.
So, I looked at where they initialized that settings page, and add the pref_camera_iso_key into that array.
com/android/camera/Camera.java
Code:
as1 = (new String[] {
"pref_camera_picturesize_key", "pref_camera_time_lapse_key", "pref_camera_sound_key", "pref_camera_smile_key", "pref_camera_recordlocation_key", "pref_camera_guideline_key", "pref_camera_restore_default"
});
I need one new element inside that list
smali change
Code:
- const/4 v0, 0x7
+ const/16 v0, 0x8 #need to increase size of the list from 0x7 to 0x8
new-array v0, v0, [Ljava/lang/String;
@@ -3838,6 +3838,12 @@
const/4 v2, 0x6
+ const-string v3, "pref_camera_iso_key" # put the inserted value before pref_camera_restore_default
+
+ aput-object v3, v0, v2
+
+ const/4 v2, 0x7
+
const-string v3, "pref_camera_restore_default"
aput-object v3, v0, v2
For the timer change:
you want to change this function
Camera.java
Code:
public void onSharedPreferenceChanged()
{
Debugger.d("OppoCamera", "onSharedPreferenceChanged");
if(super.mPaused)
return;
if("[B]on[/B]".equals(mPreferences.getString("pref_camera_time_lapse_key", getString(0x7f0b0177))))
mTimerSnapShotManager.setTime([B]5[/B]);
instead of just one if statement that checks if "on" selected-> 5 second, you want
if "3" -> 3 seconds
if "5" -> 5 seconds
if "10" -> 10 seconds
if "20" -> 20 seconds
(i mean ideally, you want a slider bar on the preferences page that allows you to set any time you want... but that change is extremely difficult, as you need to touch multiple parts of the java class)
therefore, you need two things
smali: duplicate the entire [if statement and mTimerSnapShotManager.setTime()] section, modify "on" and "5" variables accordingly
arrays.xml and other *.xml changes: add in entries for the 3, 5, 10, 20, remove the "on" entry
then you go test... then you find out the app crashes.
you debug, and figure out that the program flashes the "5" icon when 5s left, "4" icon when 4s left..... if there are 20s left, it fails to load the "20" icon (since it doesn't exist), and crashes
it's too much trouble to make your own 6-20.jpg, insert into the package... it's extremely difficult to replace the [load "x" icon when x seconds left] with [somehow display the text "x" when x seconds left, instead of loading an icon]
so, for the icon-loading part, check if it's more than 5. If it is, set the variable to 5, load the 5 icon
Code:
+ add-int/lit8 v2, v0, -0x5
+
+ if-ltz v2, :cond_reset
+
+ const/4 v0, 0x4
+
+ :cond_reset
GREAT!! for the flash check the 'B way' si exactly what I did. I have a basic knowledge of assembly programming (I'm also a C,C# developer) but how the hell did you get the java code? I deodexed the apk with universal deodexer and decompiled with apktool, it's not the right way to do it?
Thanks for the very detailed explaination! It helps me so much!
Tapatalked via Oppo Find 5
badworker said:
GREAT!! for the flash check the 'B way' si exactly what I did. I have a basic knowledge of assembly programming (I'm also a C,C# developer) but how the hell did you get the java code? I deodexed the apk with universal deodexer and decompiled with apktool, it's not the right way to do it?
Thanks for the very detailed explaination! It helps me so much!
Tapatalked via Oppo Find 5
Click to expand...
Click to collapse
there are smali -> java source code decompilers. typcially, they don't give you a clean source code that actually compiles (some stuff fails to decompile properly), but it's good enough to read (better than reading smali)
(after doing deodex + apktool decompile)i use d2j-dex2jar to convert from smali-> jar
then either decompile-jad or jd-gui to convert from jar-> java source code. Sometimes, one of the tool fails to convert and I'll have to use the other
other decompilers: androguard (haven't tried this one yet)
with the source code, you can
1) read it, and make changes correspondingly in smali (this is what I do)
2) try to make the entire thing compilable, and then make modifications in java source code
3) make relevant parts of it compilable (easier than (2), make changes, compare the diffs in smali, merge the diffs into the original smali
I haven't tried steps 2, 3. those two steps are probably useful if you are making major changes(more than 10 lines)
Any chance that i can use the Oppo Camera ona Rom like Illusion?
Bump. Is this dead also?
Sent from my Find 5 using Tapatalk
killerskincanoe said:
Bump. Is this dead also?
Sent from my Find 5 using Tapatalk
Click to expand...
Click to collapse
probably
still have my Find 5, but not really using it... haven't kept up with the latest CM/ColorOS releases, so this apk probably doesn't work on the new releases
If the new APKs don't contain these features, do it yourself? I've posted how to do this hack in smali...
I will be compiling all my mods and other folks mods in this thread!!
[Guide How-to] Verizon Note 4 Remove CD Installer & ASEC
This removes the annoying CD installer that pops up when you plug into your computer and your phone will go straight to MTP.
Enjoy!!
Remove CD Installer Download: http://d-h.st/Wm7
Just flash with TWRP
[Guide How-to] Verizon Note 4 Enable Native Call Recording
Smali edit for InCallUI.apk:
com/android/services/telephony/common/PhoneFeature.smali
Add the lines that are highlighted in RED
Code:
const-string v3, "CscFeature_VoiceCall_ConfigRecording"
invoke-virtual {v0, v3}, Lcom/sec/android/app/CscFeature;->getString(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
[COLOR="Red"]const-string v0, "RecordingAllowed"[/COLOR]
.line 1693
sget-object v3, Lcom/android/services/telephony/common/PhoneFeature;->mFeatureList:Ljava/util/HashMap;
const-string v6, "voice_call_recording"
const-string v7, "RecordingAllowed"
const-string v3, "CscFeature_VoiceCall_ConfigRecording"
invoke-virtual {v0, v3}, Lcom/sec/android/app/CscFeature;->getString(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v0, "RecordingAllowed"
.line 1693
sget-object v3, Lcom/android/services/telephony/common/PhoneFeature;->mFeatureList:Ljava/util/HashMap;
const-string v6, "voice_call_recording"
const-string v7, "RecordingAllowed"
For those not capable of doing smali edits just flash this via TWRP. Enable Call Recording
[Guide How-to] Remove Lockscreen Carrier
This removes the lockscreen carrier text.
Keyguard.apk smali edit:
smali/com/android/keyguard/CarrierText.smali:
Change if-nez to if-eqz in the indicated edit in BLUE:
Code:
.method private static concatenate(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
.locals 5
.param p0, "plmn" # Ljava/lang/CharSequence;
.param p1, "spn" # Ljava/lang/CharSequence;
.prologue
const/4 v2, 0x1
const/4 v3, 0x0
.line 310
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v4
[COLOR="Blue"]if-eqz[/COLOR] v4, :cond_1
move v0, v2
For those of you not capable of smali edit's, just flash this via TWRP Remove Lock Screen Carrier Text
[Guide How-to] Remove Safe Volume Warning
This removes the safe volume warning that pops up when you turn up the volume beyond a certain point
This mod requires modifying framework.jar
Edit smali/android/media/AudioService.smali:
Changes are in .method private checkSafeMediaVolume(III)Z
, new lines are in BLUE:
Code:
iget-object v6, p0, Landroid/media/AudioService;->mSafeMediaVolumeState:Ljava/lang/Integer;
invoke-virtual {v6}, Ljava/lang/Integer;->intValue()I
move-result v6
[COLOR="Blue"]goto :goto_td[/COLOR]
if-ne v6, v7, :cond_4
Code:
goto :goto_1
.line 6873
.end local v0 # "e":Ljava/lang/Exception;
.end local v1 # "pm":Landroid/os/PowerManager;
.end local v3 # "wl":Landroid/os/PowerManager$WakeLock;
[COLOR="Blue"]:goto_td[/COLOR]
:cond_4
monitor-exit v5
:try_end_3
.catchall {:try_start_3 .. :try_end_3} :catchall_0
goto :goto_0
.end method
For those not capable of smali edit's just flash this in TWRP Remove Safe Volume Warning
[Guide How-To] Enable Call & MSG Blocking
This enables call and msg blocking natively.
Simple CSC edit.
system/csc/feature.xml edit
Must be inserted BEFORE
</FeatureSet>
</SamsungMobileFeature>
(** please note that feature.xml can be overwritten so this may not stick if using a third party software like Xposed)
Code:
<CscFeature_Setting_EnableMenuBlockCallMsg>TRUE</CscFeature_Setting_EnableMenuBlockCallMsg>
For those of you not capable of this edit, just flash this with TWRP Native Call & Message Block
[Guide How-to] Replace Recents with Menu
Keylayout edits:
system/usr/keylayout/Generic.kl
Change key 254 from APP_SWITCH to MENU
key 254 MENU
Download: Generic.kl
Now Recent Apps capacitive key is Menu (single-press) and Search (long-press).
However, we have now lost access to recent apps via a hardware key.
[Guide How-to] VZW Note 4 4 Way Reboot Power Menu EPM
This will work with Odex or Deodexed Rom. To see the 4 way Menu you must hit restart on the Primary Menu!!!
First grab your Deodexed android.policy.jar from system/framework
Decompile it with APKTOOL. Look in smali\com\android\internal\policy\impl\
Find GlobalActions$SinglePressAction.smali and open with NotePad++
Look for this:
Code:
.class abstract Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.super Ljava/lang/Object;
.source "GlobalActions.java"
# interfaces
.implements Lcom/android/internal/policy/impl/GlobalActions$Action;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/android/internal/policy/impl/GlobalActions;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# instance fields
.field public customAction:I
.field public isKnoxCustom:Z
.field private final mIcon:Landroid/graphics/drawable/Drawable;
.field private final mIconResId:I
.field mLayoutId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method protected constructor <init>(II)V
.locals 2
.param p1, "iconResId" # I
.param p2, "messageResId" # I
Add in the Red Text to look like this:
Code:
.class abstract Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.super Ljava/lang/Object;
.source "GlobalActions.java"
# interfaces
.implements Lcom/android/internal/policy/impl/GlobalActions$Action;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/android/internal/policy/impl/GlobalActions;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
[COLOR="Red"]# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;[/COLOR]
# instance fields
.field public customAction:I
.field public isKnoxCustom:Z
.field private final mIcon:Landroid/graphics/drawable/Drawable;
.field private final mIconResId:I
.field mLayoutId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
[COLOR="Red"].method static constructor <clinit>()V
.locals 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reboot"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Hot Boot"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Download"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method[/COLOR]
.method protected constructor <init>(II)V
.locals 2
.param p1, "iconResId" # I
.param p2, "messageResId" # I
Save file and look for GlobalActions.smali in the same folder.
Find this:
Code:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mPowerOff:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1126
new-instance v3, Lcom/android/internal/policy/impl/GlobalActions$8;
const-string v2, "VZW"
sget-object v4, Lcom/android/internal/policy/impl/GlobalActions;->mSalesCode:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_3
const v2, 0x1080b2d
:goto_2
const v4, 0x10401cf
move-object/from16 v0, p0
invoke-direct {v3, v0, v2, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1164
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
Change the red text to look like this:
Code:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v2, v0, Lcom/android/internal/policy/impl/GlobalActions;->mPowerOff:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1126
new-instance v3, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];
const-string v2, "VZW"
sget-object v4, Lcom/android/internal/policy/impl/GlobalActions;->mSalesCode:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_3
const v2, 0x1080b2d
:goto_2
const v4, 0x10401cf
move-object/from16 v0, p0
invoke-direct {v3, v0, v2, v4}, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
move-object/from16 v0, p0
iput-object v3, v0, Lcom/android/internal/policy/impl/GlobalActions;->mRestart:Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.line 1164
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
Save file.
Add the 3 smali files in this zip to the same folder: Smali-Files-Zip
Now recompile. That's it.
For those of you not able to edit smali. Here is a zip flashable with TWRP. VZW Note 4 4 Way EPM Menu
To see the 4 way Menu you must hit restart on the Primary Menu!!!
Enjoy!!!
Framework Mods- Note 4 Native WiFi Tether, All Rotations, Safe Media Volume Disabled, Dreams enabled, Battery Critical Warnings lowered to 1%.
Here is the download: Framework Mods
Here is the download to return to stock: Stock Framework
Enjoy!!!
[Guide How-to] Remove NFC notification icon in status bar
First grab your Features.xml from /system/csc/
Open with Notepad++ and look for following text:
Code:
<!-- NFC -->
<CscFeature_NFC_SetSecureEventType>ISIS</CscFeature_NFC_SetSecureEventType>
<CscFeature_NFC_StatusBarIconType>Vzw</CscFeature_NFC_StatusBarIconType>
<CscFeature_SmartcardSvc_SetAccessControlType>GPAC, MODE1</CscFeature_SmartcardSvc_SetAccessControlType>
<CscFeature_SmartcardSvc_HideTerminalCapability>eSE</CscFeature_SmartcardSvc_HideTerminalCapability>
<CscFeature_NFC_CardModeRoutingTypeForUicc>ROUTE_ON_WHEN_SCREEN_UNLOCK</CscFeature_NFC_CardModeRoutingTypeForUicc>
<CscFeature_NFC_EnableSecurityPromptPopup>all</CscFeature_NFC_EnableSecurityPromptPopup>
<CscFeature_NFC_EnableInvalidTagPopup>true</CscFeature_NFC_EnableInvalidTagPopup>
<CscFeature_NFC_ConfigAdvancedSettings>Disable</CscFeature_NFC_ConfigAdvancedSettings>
<CscFeature_NFC_DefaultCardModeConfig>DH:UICC</CscFeature_NFC_DefaultCardModeConfig>
Change the red text to look like this:
Code:
<!-- NFC -->
<CscFeature_NFC_SetSecureEventType>ISIS</CscFeature_NFC_SetSecureEventType>
<CscFeature_NFC_StatusBarIconType>[COLOR="Red"]none[/COLOR]</CscFeature_NFC_StatusBarIconType>
<CscFeature_SmartcardSvc_SetAccessControlType>GPAC, MODE1</CscFeature_SmartcardSvc_SetAccessControlType>
<CscFeature_SmartcardSvc_HideTerminalCapability>eSE</CscFeature_SmartcardSvc_HideTerminalCapability>
<CscFeature_NFC_CardModeRoutingTypeForUicc>ROUTE_ON_WHEN_SCREEN_UNLOCK</CscFeature_NFC_CardModeRoutingTypeForUicc>
<CscFeature_NFC_EnableSecurityPromptPopup>all</CscFeature_NFC_EnableSecurityPromptPopup>
<CscFeature_NFC_EnableInvalidTagPopup>true</CscFeature_NFC_EnableInvalidTagPopup>
<CscFeature_NFC_ConfigAdvancedSettings>Disable</CscFeature_NFC_ConfigAdvancedSettings>
<CscFeature_NFC_DefaultCardModeConfig>DH:UICC</CscFeature_NFC_DefaultCardModeConfig>
Save file and copy back to /system/csc, reboot and boom its gone!!!
Enjoy!!
[Guide How-to] Enable Private Mode with a deodexed Rom and SecureStorage=false
First thing you need to do is grab PersonalPageService.apk from system/priv-app
Decompile with APKTOOL
Find PersonalPageService\smali\com\samsung\android\personalpage\service\util\SecureProperties.smali open with Notepad++
Find the follow code:
Code:
.method public constructor <init>(Landroid/content/Context;)V
.locals 2
.param p1, "context" # Landroid/content/Context;
.prologue
const/4 v1, 0x1
.line 61
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 54
const/4 v0, 0x0
iput-object v0, p0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->mImpl:Lcom/samsung/android/personalpage/service/util/SecureProperties$PropertiesImpl;
.line 63
invoke-static {}, Landroid/os/Debug;->isProductShip()I
move-result v0
if-nez v0, :cond_3
.line 64
invoke-static {}, Lcom/sec/android/securestorage/SecureStorage;->isSupported()Z
move-result v0
if-nez v0, :cond_2
.line 65
const/4 v0, 0x0
sput-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
.line 72
:goto_0
sget-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
if-eqz v0, :cond_0
Replace the items in Red like this:
Code:
.method public constructor <init>(Landroid/content/Context;)V
.locals 2
.param p1, "context" # Landroid/content/Context;
.prologue
const/4 v1, 0x1
.line 61
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 54
const/4 v0, 0x0
iput-object v0, p0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->mImpl:Lcom/samsung/android/personalpage/service/util/SecureProperties$PropertiesImpl;
.line 63
invoke-static {}, Landroid/os/Debug;->isProductShip()I
move-result v0
[COLOR="Red"]if-nez v0, :cond_0[/COLOR]
.line 64
invoke-static {}, Lcom/sec/android/securestorage/SecureStorage;->isSupported()Z
move-result v0
[COLOR="Red"]if-nez v0, :cond_0[/COLOR]
.line 65
const/4 v0, 0x0
sput-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
.line 72
:goto_0
sget-boolean v0, Lcom/samsung/android/personalpage/service/util/SecureProperties;->SUPPORT_SECURE_STORAGE_FEATURE:Z
if-eqz v0, :cond_0
Save file and compile apk. Push to system/priv-app
For those not capable of changing smali files here is a flashable zip: PersonalPageService.apk
Enjoy!!!
[Guide How-To] Enable Lockscreen Rotation
First grab Keyguard.apk from system/priv-app
Decompile with APKTOOL.
Open smali file smali/com/android/keyguard/KeyguardViewManager.smali
Look for the following:
Code:
.method private shouldEnableScreenRotation()Z
.locals 3
.prologue
const/4 v1, 0x0
.line 249
iget-object v2, p0, Lcom/android/keyguard/KeyguardViewManager;->mContext:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object v0
.line 250
.local v0, "res":Landroid/content/res/Resources;
const-string v2, "lockscreen.rot_override"
invoke-static {v2, v1}, Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
move-result v2
Replace the Red text to look like this:
Code:
Code:
.method private shouldEnableScreenRotation()Z
.locals 3
.prologue
[COLOR="Red"]const/4 v1, 0x1[/COLOR]
.line 249
iget-object v2, p0, Lcom/android/keyguard/KeyguardViewManager;->mContext:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object v0
.line 250
.local v0, "res":Landroid/content/res/Resources;
const-string v2, "lockscreen.rot_override"
invoke-static {v2, v1}, Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
move-result v2
Compile and push to system/priv-app
For those that are unable to edit smali here is a flashable zip: LockSceen Rotation
Enjoy!!
[Guide How-to] Disable Screen Wake Plugged/Unplugged
First grab your services.jar from system/framework and decompile with APKTOOL
Find smali\com\android\server\power\PowerManagerService .smali and open PowerManagerService with Notepad++
Look for the following:
Code:
.method private shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
.locals 4
.param p1, "wasPowered" # Z
.param p2, "oldPlugType" # I
.param p3, "dockedOnWirelessCharger" # Z
.prologue
const/4 v1, 0x1
const/4 v0, 0x0
.line 2216
iget-boolean v2, p0, Lcom/android/server/power/PowerManagerService;->mWakeUpWhenPluggedOrUnpluggedConfig:Z
if-nez v2, :cond_1
Change to Red text to look like this:
Code:
.method private shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
.locals 4
.param p1, "wasPowered" # Z
.param p2, "oldPlugType" # I
.param p3, "dockedOnWirelessCharger" # Z
.prologue
[COLOR="Red"]const/4 v1, 0x0[/COLOR]
const/4 v0, 0x0
.line 2216
iget-boolean v2, p0, Lcom/android/server/power/PowerManagerService;->mWakeUpWhenPluggedOrUnpluggedConfig:Z
if-nez v2, :cond_1
That's it. Compile and push to system/framework
For those of you not capable of editing smali files here is a flashable zip: Disable Screen Wake Plug/unpluged
Enjoy!!!
[Guide How-to] Bluetooth Scan Dialog Removal
First grab your SecSettings.apk from system/priv-app and decompile with APKTOOL
Find smali/com/android/settings/Bluetooth/BluetoothScanDialog.smali
Look for the follow in .method private initialize()V method:
Code:
.line 79
new-instance v4, Lcom/android/settings/bluetooth/BluetoothScanDialog$3;
invoke-direct {v4, p0, v0}, Lcom/android/settings/bluetooth/BluetoothScanDialog$3;-><init>(Lcom/android/settings/bluetooth/BluetoothScanDialog;Landroid/app/AlertDialog;)V
invoke-virtual {v0, v4}, Landroid/app/Dialog;->setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V
.line 86
[COLOR="Red"]invoke-virtual {v0}, Landroid/app/Dialog;->show()V[/COLOR]
.line 87
return-void
.end method
Delete the text in Red, save file and compile. That's it. push to system/priv-app
Enjoy!!!
Flashlight Toggle & Battery Stats Toggle Mod Flashable-Settings-About Phone-Status-OFFICIAL Zip Updated 12-3-2014
Here is the flashable Flashlight Toggle Mod: VZW Flash Light Battery Stats Toggle Mod-Official Status
YOU MUST WAIT AT LEAST 5-10 MINS AFTER FLASHING FOR THE MOD TO WORK.
Some of you might also have to add "Flashlight" to your settings DB via SQLite. To see the toggle.
1) Download sqlite editor app. I got it from here.
2) Open the app and give it root permissions. It should populate a list.
3) Scroll and Tap the "Settings Storage"
4) Tap "Settings.db"
5) Tap "System"
6) Scroll down until you find "notification_panel_active_app_list", tap to highlight it. I noticed its a little hard to get it highlighted because it seems to want to highlight the one under it. So you might have to tap the one right above it to get it highlighted. Make sure its the notification_panel_active_app_list, and I also updated my notification_panel_active_app_list_reset NOT the notification_panel_default_active_app_list. I picked the wrong one the first time and it didnt work.
7) Once it is highlighted tap the phones menu button.
8) Tap "Edit Record"
9) You'll see a list of all the toggles that are currently enabled to show in notification area.
10) At the bottom of the list or anywhere else in the list add ; and the words Flashlight and Battery then another ;. So it will look like this at the end. ;TouchSensitivity;Flashlight;Battery; Then press Save.
11) Reboot and you should have a Flashlight and a Battery Stats toggle now. You can now use the edit feature and move it anywhere you want in the list of toggles.
This might also have a positive side effect of the following:
When you go to Settings-About Phone-Status it might say OFFICIAL!!!
Enjoy!!!
Enable Tab view in Settings
First grab your SecSettings.apk from system/priv-app
Decompile with APKTOOL and open res.values/bools with Notepad++
look for the following 2 lines:
Code:
<bool name="settings_list">false</bool>
<bool name="settings_grid">true</bool>
Change them to look like this:
Code:
<bool name="settings_list">[COLOR="Red"]true[/COLOR]</bool>
<bool name="settings_grid">[COLOR="Red"]false[/COLOR]</bool>
That's it. Compile and push to System/priv-app
Enjoy!!
How to enable Flashlight operation with Volume
First grab your SecSettings.apk from system/priv-app and decompile with APKTOOL.
Look in res/xml for display_settings_2014.xml and open with Notepad++
Add the following line in Red. When you are done look in settings-Display and you will see Torch Light options menu
Code:
<CheckBoxPreference android:title="@string/led_indicator_settings" android:key="key_simple_led_indicator_settings" android:summary="@string/led_indicator_settings_summary" android:widgetLayout="@touchwiz:layout/preference_widget_twcheckbox" />
[COLOR="Red"]<PreferenceScreen android:title="@string/torchlight_settings" android:key="torchlight" android:fragment="com.android.settings.torchlight.TorchlightSettings" />[/COLOR]
<ListPreference android:persistent="false" android:entries="@array/touch_key_light_entries" android:title="@string/touch_key_light" android:key="touch_key_light" android:summary="@string/touch_key_light_summary" android:widgetLayout="@layout/round_more_icon" android:entryValues="@array/touch_key_light_values" />
Compile and push to system/priv-app
That's it.
Enjoy!!!!
How to Enable add Apps Ops to Settings.
First grab SecSettings.apk from system/priv-app and decompile with APKTOOL
Get gridlist_settings_headers.xml from res/xml and edit with Notepad++
Look for:
Code:
<header android:icon="@drawable/ic_setting_grid_powersaving" android:id="@id/power_saving" android:title="@string/power_saving_mode_title_k" android:fragment="com.android.settings.powersavingmode.MenuPowerSavingModeSettings" />
and add right below it the following:
Code:
<header android:icon="@drawable/ic_settings_applicationpermissions" android:title="@string/app_ops_settings" android:fragment="com.android.settings.applications.AppOpsSummary" />
Save file and compile. That's it.
Push to system/priv-app
Enjoy!!!
Thanks EMSpilot looking forward to the list!
EMSpilot said:
I will be compiling all my mods and other folks mods in this thread!!
Verizon Note 4 Dev Phone Only Remove CD Installer & ASEC
This removes the annoying CD installer that pops up when you plug into your computer and your phone will go straight to MTP.
Enjoy!!
Remove CD Installer Download: http://d-h.st/Wm7
Just flash with TWRP
Click to expand...
Click to collapse
Great start!! Thanks. Hopefully many more will appear.
Works perfectly -- thanks!
Added a few new ones today!! Enjoy!!
Added a few new mods today!!!
Enjoy!!!
EMSpilot said:
Added a few new mods today!!!
Enjoy!!!
Click to expand...
Click to collapse
Thanks for the new mods, going to flash a few in a moment. as for the recents menu switcher, can something like gravitybox be used to restore the recents to a long press of the home button? or is this mod going to prevent that?
*nevermind im stupid and realized i could just do it myself. yes it does work that way*
EMSpilot said:
Added a few new mods today!!!
Enjoy!!!
Click to expand...
Click to collapse
Thanks man, good work.
@EMSpilot, thanks so much for posting these mods/guides. I just want to mention that, with respect to the guide to replace Recents with Menu, that you can leave that button alone and get the menu on pretty much any app by long-pressing the Recents button; and you can set your Home button to go to Search on long-press, without any mods. That way, you get to keep your Recents hardware key function.
By the way, I had a Note 3 where the Menu button was where that Recents button now is, and I have to admit the change in button configuration took some getting used to.
I will be doing recents to menu button as soon as i get my developer edition!!!
oneandroidnut said:
I will be doing recents to menu button as soon as i get my developer edition!!!
Click to expand...
Click to collapse
Same here.
Hey guys,
Can you give me more info on how to edit the generic.kl file to switch out the recent apps button to the menu button? I SuperSU installed, and the phone is rooted, but when trying to save the file it always errors out. I am using ES file explorer with the included ES note editor.
Nice work EMS Thank!!
Polishzx said:
Hey guys,
Can you give me more info on how to edit the generic.kl file to switch out the recent apps button to the menu button? I SuperSU installed, and the phone is rooted, but when trying to save the file it always errors out. I am using ES file explorer with the included ES note editor.
Click to expand...
Click to collapse
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
EMSpilot said:
I will be compiling all my mods and other folks mods in this thread!!
[Verizon Note 4 Enable Native Call Recording
Thank you for the mod. I installed the zip with TWRP and rebooted the phone. On the dial screen, the former "+" button is now a "Record" button. When not on a call, it is grayed out, and when a call is initiated, it becomes black / active. When pressed, shows press, but nothing happens. Seems to do nothing in Native mode.
When I try to use TWRecord from xposed (made for a Note 3) nothing works, When I try Wanam (through drop down mwnu, button was switched back to "+"), I get a "can't record while a media search is running" popup. I look through running apps but can find no applicable app to be responsible for a media search. Have I done something wrong?
Once native call recording is enabled, do I need to install an app to manage the recording, or is there an internal app that will do so? What directory do the recordings go in if managed natively? What might be running a media search and how do I stop it?
Couldn't figure it out -- I must have unbloated the wrong things. Used a TWRP restore and now it works fine. Thank you very much!
Thank you very much for your patience and help in advance.
Click to expand...
Click to collapse
EMSpilot said:
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
Click to expand...
Click to collapse
WOW... I can't believe I missed that. Thank you! The tweaks are fantastic. :good:
EMSpilot said:
I posted a Download in the OP.
Here it is!!
http://d-h.st/vuk
Click to expand...
Click to collapse
Hi,
Thank you for the bunch of downloads to modify the phone!
I saw that you mentioned a way you found to not show the phone was rooted..
Would you be able to post up a download to show normal as your phone shows now?
Thank you for your help,
Bryan
Official Status
trapperjohn said:
Hi,
Thank you for the bunch of downloads to modify the phone!
I saw that you mentioned a way you found to not show the phone was rooted..
Would you be able to post up a download to show normal as your phone shows now?
Thank you for your help,
Bryan
Click to expand...
Click to collapse
I will not be posting this mod until I have fully tested it.
Thanks
EMSpilot said:
I will not be posting this mod until I have fully tested it.
Thanks
Click to expand...
Click to collapse
Ok do you think it will be awhile would like to have it b4 I get my N4 so I can do it right in the beginning.
Not trying to rush at all but thus is a big deal showing normal if needing to send it back for warranty.
Thank you for your help,
Bryan
EMSpilot said:
I will not be posting this mod until I have fully tested it.
Thanks
Click to expand...
Click to collapse
Probably for the best, haha. Curious, from what you've tested so far, does this avoid tripping Knox as well, effectively leaving your device under warranty in the event of a hardware failure? That's my only hang-up with rooting this, is that Samsung kills your warranty. Which I totally get for software, but if my power or home button stops working in a couple months, I'd like to be able to have it fixed...
Thanks for all of your work!
Any ideas how to disable the warning when Fingerprint scanning is enabled for the lockscreen? If I screw up, I'd like to just try again, but at the moment, the phone insists on forcing me to click "ok" first, reminding me that I only have 4 more attempts before I have to enter the backup password.
-Thanks
was asked to make this statement,sorry for the English ,it's Google translator
result http://forum.xda-developers.com/goo.../mod-3-power-menu-stock-5-0-1-deodex-t2997128
for made this, need 5.0.1 (deodex) http://forum.xda-developers.com/goo...-deodex-5-0-1-app-priv-app-framework-t2994027
for decompile im use ApkTools200RC3m http://d-h.st/26rF
part 1
decompile framework-res.apk
open \framework-res\res\values\arrays.xml
looking for <item>power</item> immediately below this line inserted
Code:
<item>reboot</item>
<item>recovery</item>
then immediately open strings.xml and add at the end
Code:
<string name="reboot_recovery">Recovery</string>
same thing in the folder values-ru (or similar for your country)
Code:
<string name="reboot_recovery">Рекавери</string>
example:
values-ru (for Russia)
values-it (for Italy)
and etc....
from arhive framework add files
compile ,then assembled renamed framework222-res.apk and decompile again (that would be assigned id)
take away C:\ApkTools200RC3m\framework222-res\res\values\public.xml in the main that
(replaced the one that is there on this)
open public.xml in the editor (we'll be here to watch the assigned id)
collect ...
part 2
decompile android.policy.jar
from arhive policy add files
open GlobalActions.smali
paste below this line 20: Lcom/android/internal/policy/impl/GlobalActions$MyAdapter;,
the following:
Code:
Lcom/android/internal/policy/impl/GlobalActions$RebootAction;,
Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;,
paste below this line 35: .field private static final GLOBAL_ACTION_KEY_POWER:Ljava/lang/String; = "power"
the following:
Code:
.field private static final GLOBAL_ACTION_KEY_REBOOT:Ljava/lang/String; = "reboot"
.field private static final GLOBAL_ACTION_KEY_RECOVERY:Ljava/lang/String; = "recovery"
and delete this
.field private static final GLOBAL_ACTION_KEY_SETTINGS:Ljava/lang/String; = "settings"
field line 1026:
const-string v0, "airplane"
and replace the code from .line 275 to .line 276
Code:
:cond_3
const-string v0, "airplane"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
at
Code:
:cond_3
const-string v0, "reboot"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
.line 276
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
now find
const-string v0, "settings"
and replace the code from .line 290 to .line 292
Code:
:cond_7
const-string v0, "settings"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_8
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getSettingsAction()Lcom/android/internal/policy/impl/GlobalActions$Action;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
at
Code:
:cond_7
const-string v0, "recovery"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto/16 :goto_3
put the necessary files
give already moded GlobalActions.smali for that would compare if that
thanks for the tut
Thanks for the tutorial!
jermaine151 said:
Thanks for the tutorial! Where do I put the ID's in GlobalActions$RebootAction.smali?
Code:
.line 367
const v0, 0x1080766
const v1, 0x10403c7
Click to expand...
Click to collapse
GlobalActions$RebootRecovery = is responsible for the overload during recovery
GlobalActions$RebootAction = for reboot
they need to check out icon's id and name id
id in public.xml from framework-res
GlobalActions$RebootAction
.line 367
const v0, 0x1080766 this icon reboot <public type="drawable" name="ic_reboot" id="0x01080766" />
const v1, 0x10403c7 its <public type="string" name="factorytest_reboot" id="0x010403c7" />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GlobalActions$RebootRecovery
.line 367
const v0, 0x1080767 this icon recovery <public type="drawable" name="ic_recovery" id="0x01080767" />
const v1, 0x10406c5 its <public type="string" name="reboot_recovery" id="0x010406c5" />
excellent job man!! thanks :good:
garynych said:
GlobalActions$RebootRecovery = is responsible for the overload during recovery
GlobalActions$RebootAction = for reboot
they need to check out icon's id and name id
id in public.xml from framework-res
GlobalActions$RebootAction
.line 367
const v0, 0x1080766 this icon reboot <public type="drawable" name="ic_reboot" id="0x01080766" />
const v1, 0x10403c7 its <public type="string" name="factorytest_reboot" id="0x010403c7" />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GlobalActions$RebootRecovery
.line 367
const v0, 0x1080767 this icon recovery <public type="drawable" name="ic_recovery" id="0x01080767" />
const v1, 0x10406c5 its <public type="string" name="reboot_recovery" id="0x010406c5" />
Click to expand...
Click to collapse
Thanks Gary! I appreciate it!
garynych said:
was asked to make this statement,sorry for the English ,it's Google translator
result http://forum.xda-developers.com/goo.../mod-3-power-menu-stock-5-0-1-deodex-t2997128
for made this, need 5.0.1 (deodex) http://forum.xda-developers.com/goo...-deodex-5-0-1-app-priv-app-framework-t2994027
for decompile im use ApkTools200RC3m http://d-h.st/26rF
part 1
decompile framework-res.apk
open \framework-res\res\values\arrays.xml
looking for <item>power</item> immediately below this line inserted
Code:
<item>reboot</item>
<item>recovery</item>
then immediately open strings.xml and add at the end
Code:
<string name="reboot_recovery">Recovery</string>
same thing in the folder values-ru (or similar for your country)
Code:
<string name="reboot_recovery">Рекавери</string>
example:
values-ru (for Russia)
values-it (for Italy)
and etc....
from arhive framework add files
compile ,then assembled renamed framework222-res.apk and decompile again (that would be assigned id)
take away C:\ApkTools200RC3m\framework222-res\res\values\public.xml in the main that
(replaced the one that is there on this)
open public.xml in the editor (we'll be here to watch the assigned id)
collect ...
part 2
decompile android.policy.jar
from arhive policy add files
open GlobalActions.smali
paste below this line 20: Lcom/android/internal/policy/impl/GlobalActions$MyAdapter;,
the following:
Code:
Lcom/android/internal/policy/impl/GlobalActions$RebootAction;,
Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;,
paste below this line 35: .field private static final GLOBAL_ACTION_KEY_POWER:Ljava/lang/String; = "power"
the following:
Code:
.field private static final GLOBAL_ACTION_KEY_REBOOT:Ljava/lang/String; = "reboot"
.field private static final GLOBAL_ACTION_KEY_RECOVERY:Ljava/lang/String; = "recovery"
and delete this
.field private static final GLOBAL_ACTION_KEY_SETTINGS:Ljava/lang/String; = "settings"
field line 1026:
const-string v0, "airplane"
and replace the code from .line 275 to .line 276
Code:
:cond_3
const-string v0, "airplane"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
at
Code:
:cond_3
const-string v0, "reboot"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_4
.line 276
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootAction;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
now find
const-string v0, "settings"
and replace the code from .line 290 to .line 292
Code:
:cond_7
const-string v0, "settings"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_8
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->getSettingsAction()Lcom/android/internal/policy/impl/GlobalActions$Action;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
at
Code:
:cond_7
const-string v0, "recovery"
invoke-virtual {v0, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2
.line 291
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;
const/4 v2, 0x0
invoke-direct {v1, p0, v2}, Lcom/android/internal/policy/impl/GlobalActions$RebootRecovery;-><init>(Lcom/android/internal/policy/impl/GlobalActions;Lcom/android/internal/policy/impl/GlobalActions$1;)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto/16 :goto_3
put the necessary files
give already moded GlobalActions.smali for that would compare if that
Click to expand...
Click to collapse
aweome!!
I wander if works add a bootloader and make it a 4 way :laugh:... will try that on Moto G 3 way, and if all good a 4 way :fingers-crossed:...
tks for share...
baybutcher27 said:
I wander if works add a bootloader and make it a 4 way :laugh:
Click to expand...
Click to collapse
Add Safe Mode and make it 5 Way.
Thank you for this tutorial, after deodexing and some minor changes works fine on my Moto G running GPe 5.0.1 [emoji106]
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
▪◼ Tapatalk ♦ Moto G ◼▪
Problem with Nexus 6 that I dont understand...
The menu works perfect but the mod breaks the ability to tether! Strange?
I have a log cat here of the tether fail errors if you want to look at it: http://pastebin.com/Nhesq4sV
Maybe you can help us figure it out for Nexus 6.