package Ġcom . example . kd me ud in he iro . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . kd me ud in he iro . R Ċ import Ġcom . example . kd me ud in he iro . adapter . Adapter B ills List Ċ import Ġcom . example . kd me ud in he iro . bottom Sheet . Bottom Sheet B ills Ċ import Ġcom . example . kd me ud in he iro . bottom Sheet . Bottom Sheet Tips Ċ import Ġcom . example . kd me ud in he iro . databinding . B ills Fragment Binding Ċ import Ġcom . example . kd me ud in he iro . enums . Keys Shared Ċ import Ġcom . example . kd me ud in he iro . enums . Tip Type Ċ import Ġcom . example . kd me ud in he iro . model . B ills Model Ċ import Ġcom . example . kd me ud in he iro . utils . Dialog To Filter Ċ import Ġcom . example . kd me ud in he iro . utils . feedback Ċ import Ġcom . example . kd me ud in he iro . viewModel . B ills ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjava . util .* Ċ Ċ @ Android EntryPoint Ċ class ĠB ills Fragment Ġ: ĠFragment ( R . layout . b ills _ fragment ) Ġ{ ĊĠĠĠ Ġ// var Ġgoes Ġhere ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠB ills ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠB ills Fragment Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserId : ĠString ĊĠĠĠ Ġprivate Ġvar Ġadapter Ġ= ĠAdapter B ills List () Ġ{ Ġbill Ġ-> ĊĠĠĠĠĠĠĠ ĠBottom Sheet B ills ( require View (), Ġbill ). load Bottom Bill () Ġ{ Ġbill From Cb , Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler For Dialog Response ( bill From Cb , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( B ills ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠLoad ViewModel And s Observer s () ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠB ills Fragment Binding . bind ( view ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġbinding . re cyclerView Id No XML ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġload Binding () ĊĠĠĠĠĠĠĠ Ġcheck User () ĊĠĠĠĠĠĠĠ Ġsearch Bill () ĊĠĠĠĠĠĠĠ Ġfilter By Validate () ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġload Binding () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . float Button Add Bill . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet B ills ( require View (), Ġnull ). load Bottom Bill () Ġ{ Ġbill , Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbill . id _ user Ġ= ĠuserId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Bill ( bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll B ills ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . About . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Tips ( require View ()). load Tip () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLoad ViewModel And s Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . bill List . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Arrow Down . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv No B ills . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Add Bill Hint . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Animation . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView Id No XML . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . refresh ( it . to Mutable List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView Id No XML . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Animation . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Arrow Down . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Add Bill Hint . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv No B ills . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . bill List . observe ( view Lifecycle Owner , Ġ{ Ġadapter . refresh ( it . to Mutable List ()) Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . copy Bill List . observe ( view Lifecycle Owner , Ġ{ Ġadapter . refresh ( it . to Mutable List ()) Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . error _ to _ call _ b ills , ĠR . color . failure ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . add Response . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ add _ success , ĠR . color . success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ add _ failure , ĠR . color . failure ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . edit Response . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ edit _ success , ĠR . color . success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ edit _ success , ĠR . color . success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . delete Response . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ delete _ success , ĠR . color . success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ delete _ failure , ĠR . color . failure ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandler For Dialog Response ( bill From Cb : ĠB ills Model , Ġtype : ĠInt ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . edit Bill ( bill From Cb ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll B ills ( userId ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Bill ( bill From Cb ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll B ills ( userId ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . validation _ registration _ failure , ĠR . color . failure ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . edit Bill ( bill From Cb ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll B ills ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback ( require View (), ĠR . string . bill _ paid _ success , ĠR . color . success ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠviewModel . getAll B ills ( userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠB ills Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck User () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm SharedPreferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). get SharedPreferences ( Keys Shared . APP . key , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ ĠuserId Ġ= Ġm SharedPreferences . getString ( Keys Shared . USER ID . key , Ġ""). toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( userId . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( require Activity (), ĠLogin Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . getAll B ills ( userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch Bill () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . textField Search . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ?. length !! Ġ>= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . filter Bill ( it . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . filter Bill ( it . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter By Validate (){ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠCalendar . getInstance () ĊĊĠĠĠĠĠĠĠ Ġbinding . button Filter . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog To Filter . dialog To Filter ( require Context ()) Ġ{ Ġmap Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash ToList Ġ= Ġmap ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgetList Position Ġ= Ġhash ToList ?. get ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getList Position Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . filter Bill ( it . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . filter Pay ( date . time , ĠgetList Position !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }