/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠMust afa ĠO zh an . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ package Ġcom . github . must af ao zh an . ccc . android . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġcom . github . must af ao zh an . base mob . adapter . Base VB RecyclerView Adapter Ċ import Ġcom . github . must af ao zh an . base mob . bottom sheet . Base V BB ottom Sheet Dialog Fragment Ċ import Ġcom . github . must af ao zh an . ccc . android . ui . Calculator Fragment . Companion . CHANGE _ BASE _ EVENT Ċ import Ġcom . github . must af ao zh an . ccc . android . util . setBackground ByName Ċ import Ġcom . github . must af ao zh an . ccc . android . util . set Navigation Result Ċ import Ġcom . github . must af ao zh an . ccc . android . util . visible If Ċ import Ġcom . github . must af ao zh an . ccc . client . model . Currency Ċ import Ġcom . github . must af ao zh an . ccc . client . view model . bar . Bar Effect Ċ import Ġcom . github . must af ao zh an . ccc . client . view model . bar . Bar Event Ċ import Ġcom . github . must af ao zh an . ccc . client . view model . bar . Bar ViewModel Ċ import Ġcom . github . must af ao zh an . log mob . ker mit Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġmust af ao zh an . github . com . my currencies . R Ċ import Ġmust af ao zh an . github . com . my currencies . databinding . Bottom Sheet Bar Binding Ċ import Ġmust af ao zh an . github . com . my currencies . databinding . Item Bar Binding Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠBar Bottom Sheet Ġ: ĊĠĠĠ ĠBase V BB ottom Sheet Dialog Fragment < Bottom Sheet Bar Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbar ViewModel : ĠBar ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbar Adapter : ĠBar Adapter ĊĊĠĠĠ Ġoverride Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠBottom Sheet Bar Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġker mit . d Ġ{ Ġ" Bar Bottom Sheet Ġon View Created " Ġ} ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠĠĠĠĠ Ġobserve States () ĊĠĠĠĠĠĠĠ Ġobserve Effect () ĊĠĠĠĠĠĠĠ Ġset Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġbar Adapter Ġ= ĠBar Adapter ( bar ViewModel . event ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView Bar . adapter Ġ= Ġbar Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve States () Ġ= Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠ Ġbar ViewModel . state . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar Adapter . submit List ( currency List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading View . visible If ( loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Bar . visible If ( en ough Currency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt No En ough Currency . visible If (! en ough Currency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Select . visible If (! en ough Currency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Effect () Ġ= Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠ Ġbar ViewModel . effect . collect Ġ{ Ġview Effect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġker mit . d Ġ{ Ġ" Bar Bottom Sheet Ġobserve Effect Ġ${ view Effect :: class . simple Name }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBar Effect . Change Base Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . calculator Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Effect . new Base , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHANGE _ BASE _ EVENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBar Effect . Open C urrencies Ġ-> Ġnavigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bar Bottom Sheet , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBar Bottom Sheet Directions . action Bar Bottom Sheet To C urrencies Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listeners () Ġ= Ġbinding . btn Select . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġbar ViewModel . event . on Select Click () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBar Adapter ( ĊĠĠĠ Ġprivate Ġval Ġbar Event : ĠBar Event Ċ ) Ġ: ĠBase VB RecyclerView Adapter < Currency , ĠItem Bar Binding >( Calculator Differ ()) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ) Ġ= ĠCalculator VB ViewHolder ( ĊĠĠĠĠĠĠĠ ĠItem Bar Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinner Ġclass ĠCalculator VB ViewHolder ( item Binding : ĠItem Bar Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase VB ViewHolder < Currency , ĠItem Bar Binding >( item Binding ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Bind ( item : ĠCurrency ) Ġ= Ġwith ( item Binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Icon . setBackground ByName ( item . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Setting Item . text Ġ= Ġitem . get Variables One Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . setOnClickListener Ġ{ Ġbar Event . on Item Click ( item ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCalculator Differ Ġ: ĠDiff Util . Item Callback < Currency >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠCurrency , Ġnew Item : ĠCurrency ) Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠCurrency , Ġnew Item : ĠCurrency ) Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ