Swipe to remove notification on Samsung Galaxy Gio (DXKT8 - Baseband)

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 ?

  1. have android tool on your pc, in this tutorial we need apktool, smali-baksmali and android-sdk
  2. you must have backup of your system, in this case SystemUI.apk dan framework.jar
  3. know how to use apktool, smali-baksmali and adb command

Result 

SS
Swipe Notification
 *Sorry cannot show you the swipe event cause cannot take screenshot while swiping

Lets Begin 

  1. 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.
  2. 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

    • <?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>

    • 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)

  3. Update SystemUI Smali File
    • decompile SystemUI.apk with APKTool
    • navigate to /res/value/ open public.xml look at the end off file

      public.xml
    • 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/ 

  4. 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

    •     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

    •     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;

    • save it and compile it, merge it with with SystemUI.apk place on different folder cause it finish now.

  5. 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

    • .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

    • find this code, or maybe you can find it at line 572, change it so it look like below code

    • .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

    • open and edit IStatusBarService$Stub$Proxy.smali, insert below function at bottom of file

    • .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

    • find this code on above function

    • 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
      the bold one must same with IStatusBarService$Stub.smali line 43, TRANSACTION_onNotificatioError
    • open and edit IStatusBarService.smali and insert below function at bottom of file

    • .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

  6. 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.
  7. hope this tutorial can help you and if you have problem you can ask me i will glad to help you

Download

If you don't like  the progress and wanna the result then you can download it here : Swipe
your 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 :)
Swipe to remove notification on Samsung Galaxy Gio (DXKT8 - Baseband) | AS | 5