Overview
After experiment for about 3 weeks try and try again finally i am success implement it on my stock rom. so if you wanna try to implement it on you stock rom you can read this tutorial, or if you lazy you can download it for this site, but in raw file cause i don't know how to include it on zip file for flashing. But remember this tutorial just only for S5660DXKT8 only and i don't responsible if you brick your phone.this tutorial is continuation of this article
What you have to do ?
- have android tool on your pc, in this tutorial we need apktool, smali-baksmali and android-sdk
- you must have backup of your system, in this case SystemUI.apk dan framework.jar
- know how to use apktool, smali-baksmali and adb command
Result
Swipe Notification |
Lets Begin
- First you have to pull 2 file from your phone, use adb command to pull it. /system/app/SystemUI.apk and /system/framework/framework.jar make backup of this 2 file cause you will update this 2 file.
- Update SystemUI.apk
- decompile SystemUI.apk using APKTool
- navigate to /res/
- create new folder named anim, navigate to /res/anim/
- create 2 file named slide_out_left_basic.xml and slide_out_right_basic.xml
- edit those 2 file file with below code.
slide_out_left_basic.xml<?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" />
slide_out_right_basic.xml<?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" />
- open and edit /res/layout/status_bar_latest_event.xml, change the bold one
- now save all change and compile your half way SystemUI.apk (lets call SystemUI-part1.apk). merge the result with your copy original SystemUI.apk. leave SystemUI-part1.apk put it on somewhere place in your CPU, now you working with new SystemUI.apk the merging result (i hope you get my point)
- Update SystemUI Smali File
- decompile SystemUI.apk with APKTool
- navigate to /res/value/ open public.xml look at the end off file
- remember those 2 ids
- download LatestItemContainer.smali and LatestItemContainer$1.smali. insert those file to folder /smali/com/android/systemui/statusbar/ open LatestItemContainer$1.smali there is an id references the anim from previous step please edit it if you have different id from public.xml
.line 53 :cond_0 const/high16 v1, 0x7f0a
and
.line 51 const v1, 0x7f0a0001
- download StatusBarService$7.smali. insert to /smali/com/android/systemui/statusbar/
- Update SystemUI - StatusBarService.smali
- navigate to /smali/com/android/systemui/statusbar/. open StatusBarService.smali and find below code
.method makeNotificationView(Lcom/android/internal/statusbar/StatusBarNotification;Landroid/view/ViewGroup;)[Landroid/view/View;
- on line 3149 add below code
- also insert the following bold code
- save it and compile it, merge it with with SystemUI.apk place on different folder cause it finish now.
- Update framework.jar
- decompile framework.jar with smali program
- navigate to /smali/com/android/internal/statusbar/
- open and edit IStatusBarService$Stub.smali, add below code
variable declaration.field static final TRANSACTION_onClearAllNotifications:I = 0xd .field static final TRANSACTION_onNotificationClear:I = 0xe .field static final TRANSACTION_onNotificationClick:I = 0xb .field static final TRANSACTION_onNotificationError:I = 0xc
- find this code, or maybe you can find it at line 134, change the code on line 148 so it look like below code
- find this code, or maybe you can find it at line 572, change it so it look like below code
- open and edit IStatusBarService$Stub$Proxy.smali, insert below function at bottom of file
- find this code on above function
- open and edit IStatusBarService.smali and insert below function at bottom of file
- Finish compile and merge all, copy it to your Samsung Galaxy Gio. this mod based on Samsung Galaxy Gio S5660DXKT8. and i think is not fit with other model so you must adjust it if you wanna use on other model.
- hope this tutorial can help you and if you have problem you can ask me i will glad to help you
<?xml version="1.0" encoding="utf-8"?> <com.android.systemui.statusbar.LatestItemContainer 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" /> </com.android.systemui.statusbar.LatestItemContainer>
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
const v1, 0x7f090024 invoke-virtual {v9, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View; move-result-object v1 move-object v0, v1 check-cast v0, Landroid/view/ViewGroup;
.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_15a
.line 183 const/4 v0, 0x1 goto/16 :goto_7 .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 loca.line 183 const/4 v0, 0x1 goto/16 :goto_7 .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 .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 0xe -> :sswitch_140 0x5f4e5446 -> :sswitch_8 .end sparse-switch .end method
.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, 0xc 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
const/16 v3, 0xc const/4 v4, 0x0 invoke-interface {v2, v3, v0, v1, v4}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Zthe bold one must same with IStatusBarService$Stub.smali line 43, TRANSACTION_onNotificatioError
.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
Download
If you don't like the progress and wanna the result then you can download it here : Swipeyour ROM must be stock rom with S5660DXKT8 baseband.
password : andylah
if you wanna apply this, you must be using adb command cause i don't know how to create flashable update.zip right now :)