package Ġcom . s iz ik su . ui . view . users Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . s iz ik su . ui . R Ċ import Ġcom . s iz ik su . ui . common . observe Ċ import Ġcom . s iz ik su . ui . common . show Snackbar Ċ import Ġcom . s iz ik su . ui . di . USERS _ VIEW _ MODEL Ċ import Ġkotlinx . android . synt hetic . main . fragment _ users . progress Bar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ users . re cyclerView Ċ import Ġkotlinx . android . synt hetic . main . fragment _ users . toolbar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ users . users Fragment Ċ import Ġorg . k oin . android . ext . android . get Ċ Ċ class ĠUsers Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠUsers ViewModel Contract Ġby Ġlazy Ġ{ ĠViewModel Providers . of ( this , Ġget ( USERS _ VIEW _ MODEL )). get ( Users ViewModel :: class . java ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠUsers Recycler Contract . Adapter ĊĠĠĠ Ġprivate Ġvar Ġis First Run Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ users , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Users () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis First Run Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠviewModel . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġ( activity Ġas ĠAppCompatActivity ). set Support ActionBar ( toolbar ) Ġ} ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠUsers Recycler Adapter ( activity Ġas ĠContext , ĠUsers Recycler Manager ()) ĊĠĠĠĠĠĠĠ Ġadapter . setOn ItemClickListener Ġ{ Ġview , ĠuserId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . find Nav Controller (). navigate ( Users Fragment Directions . to User ( userId )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter . get Adapter () ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġadapter . get LayoutManager () ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . users LiveData ) Ġ{ Ġusers Ġ-> Ġadapter . show Items ( users ) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . error LiveData ) Ġ{ Ġmessage Ġ-> Ġshow Snackbar ( users Fragment , Ġmessage Ġ?: ĠgetString ( R . string . error _ unknown )) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . progress LiveData ) Ġ{ Ġvalue Ġ-> Ġvalue ?. let Ġ{ Ġif Ġ( it ) ĠprogressBar . visibility Ġ= ĠView . VISIBLE Ġelse ĠprogressBar . visibility Ġ= ĠView . GONE Ġ} Ġ} ĊĠĠĠ Ġ} Ċ } Ċ