package Ġcom . mar vel . mar vel application . characters . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . mar vel . domain . model . Characters Ċ import Ġcom . mar vel . domain . util . Status Ċ import Ġcom . mar vel . mar vel application . characters . Character List ViewModel Ċ import Ġcom . mar vel . mar vel application . characters . Character List ViewModel Factory Ċ import Ġcom . mar vel . mar vel application . databinding . Character List Fragment Binding Ċ import Ġcom . mar vel . mar vel application . util . My Application Ċ import Ġcom . mar vel . mar vel application . util . String Extensions . toast Ċ import Ġjavax . inject . Inject Ċ Ċ /* ĠMain Fragment Ġto Ġload Ġcharacters Ġlist Ġfrom Ġapi Ġand Ġon Ġclick Ġnavigate Ġto Ġdetails Ġscreen Ġ*/ Ċ class ĠCharacter List Fragment Ġ: ĠFragment (), ĠItem ClickListener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġfactory : ĠCharacter List ViewModel Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcharacter Data Adapter : ĠCharacter ListAdapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠCharacter List Fragment Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain ViewModel : ĠCharacter List ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠCharacter List Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity (), Ġfactory )[ Character List ViewModel :: class . java ] ĊĠĠĠĠĠĠĠ Ġcharacter Data Adapter Ġ= ĠCharacter ListAdapter ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . char List . adapter Ġ= Ġcharacter Data Adapter ĊĠĠĠĠĠĠĠ Ġ// Ġobserver Ġcharacters Ġlist Ġand Ġpopulate Ġin Ġre cycler Ġview ĊĠĠĠĠĠĠĠ Ġmain ViewModel . characters List . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ Ġcharacters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Data Adapter . set Items ( characters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ?. toast ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġmain ViewModel . get Characters List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġ( activity ?. application Context Ġas ĠMy Application ). app Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( character : ĠChar acters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter List Fragment Directions . action Character List Fragment To Character Details Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠ Ġ} Ċ }