package Ġcom . mk software 1 0 1 . notes . features . note List . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . floating action button . Extended Floating ActionButton Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar . Duration Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . mk software 1 0 1 . notes . R Ċ import Ġcom . mk software 1 0 1 . notes . databinding . Fragment Note List Binding Ċ import Ġcom . mk software 1 0 1 . notes . features . note List . ui . communication . notes list item . AddTo F avour ite Failed Ċ import Ġcom . mk software 1 0 1 . notes . features . note List . ui . communication . notes list item . Channels Ċ import Ġcom . mk software 1 0 1 . notes . features . note List . ui . communication . notes list item . Remove From F avour ite Failed Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠNote List Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠNote List ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġfab Interpolator Ġ= ĠAccel erate De cel erate Interpolator () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Binding : ĠFragment Note List Binding ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġchannels : ĠChannels ĊĊĠĠĠ Ġprivate Ġval Ġsn ackbar Callback Ġ= Ġobject Ġ: ĠBase Transient Bottom Bar . Base Callback < Snackbar >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Shown ( sn ackbar : ĠSn ackbar ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Shown ( sn ackbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Fab Up With Animation ( view Binding . fab , Ġsn ackbar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dis missed ( sn ackbar : ĠSn ackbar ?, Ġevent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Dis missed ( sn ackbar , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Fab Down With Animation ( view Binding . fab , Ġsn ackbar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel . set Observer sTo Idle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ note _ list , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġview Binding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġreturn Ġview Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġstart Ob serve Errors () ĊĠĠĠĠĠĠĠ Ġstart Ob serve Success () ĊĠĠĠĠĠĠĠ Ġsetup Swipe To Refresh () ĊĠĠĠĠĠĠĠ Ġsetup Swipe ToDelete () ĊĠĠĠĠĠĠĠ Ġsetup On Fl ing Listener () ĊĠĠĠĠĠĠĠ Ġsetup Com munications Channels () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Com munications Channels () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Error () ĊĠĠĠĠĠĠĠ Ġsetup Output () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Output () Ġ{ ĊĠĠĠĠĠĠĠ Ġchannels . output . observe ( view Lifecycle Owner , Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġchannels . error . observe ( view Lifecycle Owner , Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd To F avour ite Failed Ġ-> Ġshow Snackbar ( R . string . error AddTo F avour ities , ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRemove From F avour ite Failed Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup On Fl ing Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . notes RecyclerView . on Fl ing Listener Ġ= Ġobject Ġ: ĠRecyclerView . On Fl ing Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( velocity X : ĠInt , Ġvelocity Y : ĠInt ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ("[ d ] Ġ$ velocity Y ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( velocity Y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fab . extend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( velocity Y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fab . shrink () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Swipe ToDelete () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( object Ġ: ĠSw ipe ToDelete Callback ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Remove ( view Holder . adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( view Binding . notes RecyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Ob serve Errors () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( view Lifecycle Owner , Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGet Notes List Error Ġ-> Ġshow Snackbar With Retry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRemove Note Error Ġ-> Ġshow Snackbar ( error . message Res Id , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠId le Note Error State Ġ-> Ġ{ Ġ/* ĠNothing Ġto Ġdo Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Ob serve Success () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . success . observe ( view Lifecycle Owner , Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRemove Note Success State Ġ-> Ġshow Snackbar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . success Remove Note , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠId le Note Success State Ġ-> Ġ{ Ġ/* ĠNothing Ġto Ġdo Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Swipe To Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . swipe To Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . swipe To Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Snackbar With Retry () Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( view Binding . root , ĠR . string . error Get Notes List , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( sn ackbar Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . sn ackbar Retry Btn ) Ġ{ ĠviewModel . on Refresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . show () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Snackbar (@ String Res Ġmessage Res Id : ĠInt , Ġ@ Duration Ġduration : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( view Binding . root , Ġmessage Res Id , Ġduration ). add Callback ( sn ackbar Callback ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Fab Up With Animation ( fab : ĠExtended Floating ActionButton , Ġsn ackbar : ĠSn ackbar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( fab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġtranslation Y Ġ- Ġ( sn ackbar ?. view ?. height ?. toFloat () Ġ?: Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate (). translation Y ( delta ). set Interpolator ( fab Interpolator ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Fab Down With Animation ( fab : ĠExtended Floating ActionButton , Ġsn ackbar : ĠSn ackbar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( fab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġtranslation Y Ġ+ Ġ( sn ackbar ?. view ?. height ?. toFloat () Ġ?: Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate (). translation Y ( delta ). set Interpolator ( fab Interpolator ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }