package Ġde . r ki . cor on aw arn app . util . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġde . r ki . cor on aw arn app . R Ċ import Ġde . r ki . cor on aw arn app . util . Context Extensions . getColor Compat Ċ import Ġde . r ki . cor on aw arn app . util . Context Extensions . get Drawable Compat Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠOn Ġ[ RecyclerView ] Ġitem Ġswipe Ġlistener Ċ Ġ* Ġ@ param Ġcontext Ġ[ Context ] Ċ Ġ* Ġ@ param Ġon Swipe Ġon Ġswipe Ġcallback . ĠIt Ġpasses Ġitem 's Ġposition Ġand Ġswipe Ġdirection Ċ Ġ* Ċ Ġ* ĠUsage : Ċ Ġ* Ġ``` Ċ Ġ* ĠRecyclerView . on Swipe Item ( Ċ Ġ* ĠĠ Ġcontext Ġ= Ġrequire Context () Ċ Ġ* Ġ) Ġ{ Ġposition , Ġdirection Ġ-> Ċ Ġ* ĠĠ Ġ// ĠDo Ġoperation Ġhere Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠRecyclerView . on Swipe Item ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġon Swipe : Ġ( position : ĠInt , Ġdirection : ĠInt ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠItem Touch Helper ( ĊĠĠĠĠĠĠĠ ĠSw ipe Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). attach To RecyclerView ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRecyclerView Ġitem Ġswipe Ġcallback Ċ Ġ*/ Ċ private Ġclass ĠSw ipe Callback ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġaction : Ġ( position : ĠInt , Ġdirection : ĠInt ) Ġ-> ĠUnit Ċ ) Ġ: ĠItem Touch Helper . Simple Callback ( ĊĠĠĠĠ 0 , ĊĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġicon Ġ= Ġcontext . get Drawable Compat ( R . drawable . ic _ delete ) !! ĊĠĠĠ Ġprivate Ġval Ġicon Margin Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . swipe _ icon _ margin ) ĊĠĠĠ Ġprivate Ġval Ġradius Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . radius _ card ). toFloat () ĊĠĠĠ Ġprivate Ġval Ġbackground Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcontext . getColor Compat ( R . color . swipe Delete BackgroundColor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclear Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġxfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . CLEAR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠ Ġ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction ( view Holder . adapter Position , Ġdirection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Child Draw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġd Y : ĠFloat , ĊĠĠĠĠĠĠĠ Ġaction State : ĠInt , ĊĠĠĠĠĠĠĠ Ġis Currently Active : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Child Draw ( canvas , Ġre cyclerView , ĠviewHolder , Ġd X , Ġd Y , Ġaction State , Ġis Currently Active ) ĊĊĠĠĠĠĠĠĠ Ġval ĠitemView : ĠView Ġ= ĠviewHolder . item View ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSw ip ing Ġto Ġthe Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd X Ġ> Ġ 0 Ġ-> Ġon Swipe Right ( item View , Ġd X , Ġcanvas ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSw ip ing Ġto Ġthe Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd X Ġ< Ġ 0 Ġ-> Ġon Swipe Left ( item View , Ġd X , Ġcanvas ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠView Ġis Ġun Sw ip ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcanvas . draw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder . is Mov able ()) Ġreturn ĠviewHolder . movement Flags ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . get Movement Flags ( re cyclerView , ĠviewHolder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Swipe Left ( ĊĠĠĠĠĠĠĠ ĠitemView : ĠView , ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġbackground ĊĠĠĠĠĠĠĠ Ġval Ġbackground Width Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item View . right Ġ+ Ġd X . toInt () Ġ- ĠBACK GROUND _ COR NER _ OFFSET ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . left . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrec F Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Width , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( rec F , Ġradius , Ġradius , Ġbackground Paint ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġright Ġicon ĊĠĠĠĠĠĠĠ Ġval Ġitem Height Ġ= ĠitemView . height ĊĠĠĠĠĠĠĠ Ġval Ġicon Height Ġ= Ġicon . intrinsic Height ĊĠĠĠĠĠĠĠ Ġval Ġicon Width Ġ= Ġicon . intrinsic Width ĊĊĠĠĠĠĠĠĠ Ġval Ġicon Top Ġ= ĠitemView . top Ġ+ Ġ( item Height Ġ- Ġicon Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġicon Left Ġ= ĠitemView . right Ġ- Ġicon Margin Ġ- Ġicon Width ĊĠĠĠĠĠĠĠ Ġval Ġicon Right Ġ= ĠitemView . right Ġ- Ġicon Margin ĊĠĠĠĠĠĠĠ Ġval Ġicon Bottom Ġ= Ġicon Top Ġ+ Ġicon Height ĊĠĠĠĠĠĠĠ Ġicon . setBounds ( icon Left , Ġicon Top , Ġicon Right , Ġicon Bottom ) ĊĠĠĠĠĠĠĠ Ġicon . draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Swipe Right ( ĊĠĠĠĠĠĠĠ ĠitemView : ĠView , ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġbackground ĊĠĠĠĠĠĠĠ Ġval Ġbackground Width Ġ= Ġmin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item View . left Ġ+ Ġd X . toInt () Ġ+ ĠBACK GROUND _ COR NER _ OFFSET ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrec F Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . left . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Width , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( rec F , Ġradius , Ġradius , Ġbackground Paint ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġleft Ġicon ĊĠĠĠĠĠĠĠ Ġval Ġitem Height Ġ= ĠitemView . height ĊĠĠĠĠĠĠĠ Ġval Ġicon Height Ġ= Ġicon . intrinsic Height ĊĠĠĠĠĠĠĠ Ġval Ġicon Width Ġ= Ġicon . intrinsic Width ĊĊĠĠĠĠĠĠĠ Ġval Ġicon Top Ġ= ĠitemView . top Ġ+ Ġ( item Height Ġ- Ġicon Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġicon Left Ġ= ĠitemView . left Ġ+ Ġicon Margin ĊĠĠĠĠĠĠĠ Ġval Ġicon Right Ġ= ĠitemView . left Ġ+ Ġicon Margin Ġ+ Ġicon Width ĊĠĠĠĠĠĠĠ Ġval Ġicon Bottom Ġ= Ġicon Top Ġ+ Ġicon Height ĊĠĠĠĠĠĠĠ Ġicon . setBounds ( icon Left , Ġicon Top , Ġicon Right , Ġicon Bottom ) ĊĠĠĠĠĠĠĠ Ġicon . draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBACK GROUND _ COR NER _ OFFSET Ġ= Ġ 2 0 ĊĠĠĠ Ġ} Ċ } Ċ