package Ġcom . example . shop assistant . feature . sell Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . view . get Ċ import Ġcom . example . shop assistant . R Ċ import Ġcom . example . shop assistant . common .* Ċ import Ġcom . example . shop assistant . data . clo th . Clo th Ċ import Ġcom . example . shop assistant . data . commod ity . Com mod ity Ċ import Ġcom . example . shop assistant . databinding . Fragment Sell Binding Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel ĊĊ Ċ class ĠS ell Fragment Ġ: ĠShop Assistant Fragment (), ĠOn Item EventListener < Com mod ity >, ĊĠĠĠ ĠClo th Chooser Dialog . On Clo th EventListener , ĠText Watcher Ġ{ ĊĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Sell Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠS ell ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcommod ity Chooser Dialog : ĠCom mod ity Chooser Dialog ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclo th Chooser Dialog : ĠClo th Chooser Dialog ĊĠĠĠ Ġprivate Ġvar Ġclo th : ĠClo th ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcommod ity : ĠCom mod ity ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Sell Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĊĠĠĠĠĠĠĠ Ġbinding . tv Clo th Chooser . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Com mod ity Chooser . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommod ity Chooser Dialog . show ( child FragmentManager , Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Clo th Chooser . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclo th Chooser Dialog . show ( child FragmentManager , Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . progress Bar LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Indicator ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . commod ities LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommod ity Chooser Dialog Ġ= ĠCom mod ity Chooser Dialog ( it , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . clo thes LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclo th Chooser Dialog Ġ= ĠClo th Chooser Dialog ( it , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Clo th Chooser . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . rg Pay Way . setOn Checked ChangeListener Ġ{ Ġ_, Ġi Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġbinding . rb Loan . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout De bt Info . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout De bt Info . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . et Pay Amount . edit Text ?. add TextChanged Listener ( this ) ĊĊĊĠĠĠĠĠĠĠ Ġbinding . btn Confirm . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Fields Validation () Ġ&& Ġcommod ity Ġ!= Ġnull Ġ&& Ġclo th Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeter Ġ= Ġbinding . et Meter . edit Text ?. text . toString (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpay Amount Ġ= Ġbinding . et Pay Amount . edit Text ?. text . toString (). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpay Way Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . rg Pay Way . checked RadioButton Id Ġ== Ġbinding . rb Cash . id ) ĠP AY _ WAY _ C ASH Ġelse ĠP AY _ WAY _ LO AN ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Sell ( meter , Ġpay Amount , Ġpay Way , Ġget Date (), Ġclo th !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . sell Response LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġit . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Fields () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item CL ick ( item : ĠCom mod ity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Com mod ity Chooser . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġthis . commod ity Ġ= Ġitem ĊĠĠĠĠĠĠĠ ĠviewModel . get Clo thes ( item . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġclick On Clo th ( clo th : ĠClo th ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Clo th Chooser . text Ġ= Ġ"${ clo th . name } Ġ Ġ${ clo th . color }" ĊĠĠĠĠĠĠĠ Ġthis . clo th Ġ= Ġclo th ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Formatted Price . text Ġ= Ġ"${ decimal Formatter ( p 0 . toString (). toInt ()) } ĠØª ÙĪ Ùħ Ø§ÙĨ " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Fields () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Com mod ity Chooser . text Ġ= Ġresources . getString ( R . string . commod ity ) ĊĠĠĠĠĠĠĠ Ġbinding . tv Clo th Chooser . text Ġ= Ġresources . getString ( R . string . color _ and _ design ) ĊĠĠĠĠĠĠĠ Ġbinding . rg Pay Way . check ( 0 ) ĊĠĠĠĠĠĠĠ Ġbinding . et Meter . edit Text ?. text ?. clear () ĊĠĠĠĠĠĠĠ Ġbinding . et Pay Amount . edit Text ?. text ?. clear () ĊĠĠĠĠĠĠĠ Ġclo th Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcommod ity Ġ= Ġnull ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Fields Validation (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar ĠisValid Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( commod ity Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View (), Ġ" Ø¬ ÙĨ Ø³ ĠÙ¾ Ø§Ø± Ú Ĩ Ùĩ ĠÙĪ Ø§Ø± Ø¯ ĠÙĨ Ø´ Ø¯ Ùĩ !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Transient Bottom Bar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( clo th Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View (), Ġ" Ø· Ø± ØŃ ĠÙ¾ Ø§Ø± Ú Ĩ Ùĩ ĠÙĪ Ø§Ø± Ø¯ ĠÙĨ Ø´ Ø¯ Ùĩ !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Transient Bottom Bar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( binding . et Meter . edit Text !!. text . toString (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . et Meter . error Ġ= Ġ" Ùħ ØªØ± Ø§ Ú ĺ ĠÙ¾ Ø§Ø± Ú Ĩ Ùĩ ĠÙĪ Ø§Ø± Ø¯ ĠÙĨ Ø´ Ø¯ Ùĩ !" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( binding . et Pay Amount . edit Text !!. text . toString (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . et Pay Amount . error Ġ= Ġ" Ùħ Ø¨ ÙĦ Øº ĠÙ¾ Ø± Ø¯ Ø§Ø ® Øª ÛĮ ĠÙĪ Ø§Ø± Ø¯ ĠÙĨ Ø´ Ø¯ Ùĩ !" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠisValid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġclear Fields () ĊĠĠĠ Ġ} Ċ Ċ }