package Ġcom . m re igar . card wallet app . add card Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . m re igar . card wallet app . R Ċ import Ġcom . m re igar . card wallet app . custom view . Card Date Text Watcher Ċ import Ġcom . m re igar . card wallet app . custom view . Card Number Text Watcher Ċ import Ġcom . m re igar . card wallet app . g one Ċ import Ġcom . m re igar . card wallet app . hide Keyboard Ċ import Ġcom . m re igar . card wallet app . visible Ċ import Ġcom . m re igar . data . Error Ċ import Ġcom . m re igar . data . Result Ċ import Ġcom . m re igar . data . Success Ċ import Ġkotlinx . android . synt hetic . main . fragment _ add _ card .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ class ĠAdd Card Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠAdd Card ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ add _ card , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġcard Number Input Layout . edit Text ?. add TextChanged Listener ( Card Number Text Watcher ( card Image )) ĊĠĠĠĠĠĠĠ Ġexpiry Date Input Layout . edit Text ?. add TextChanged Listener ( Card Date Text Watcher ()) ĊĊĠĠĠĠĠĠĠ Ġadd Card Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Card To Wallet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Name Input Layout . edit Text ?. text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number Input Layout . edit Text ?. text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Date Input Layout . edit Text ?. text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcv v Input Layout . edit Text ?. text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscan Card Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( Add Card Fragment Directions . action Scan Card ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . state . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Loader ( it . isLoading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Result ( it . add Card Result ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). current Back Stack Entry ?. saved State Handle ?. get LiveData < Sc anned Card Data >(" sc anned Card Key ") ?. observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġscanned Card Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscanned Card Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number Text . setText ( sc anned Card Data . number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Date Input Layout . edit Text ?. setText ( sc anned Card Data . expiry Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Result ( add Card Result : ĠResult < Boolean > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Card Result ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Card Button . hide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠError Ġ-> ĠSn ackbar . make ( add Card Layout , Ġ" Add Ġcredit Ġcard Ġerror : Ġ${ it . exception . message }", ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Loader ( isLoading : ĠBoolean ) Ġ= Ġif Ġ( isLoading ) Ġadd Card Loader . visible () Ġelse Ġadd Card Loader . g one () Ċ }