package Ġes . np atar ino . android . got challenge . characters . presentation . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . util . Pair Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġes . np atar ino . android . got challenge . R Ċ import Ġes . np atar ino . android . got challenge . base . presentation . Recycler List Fragment Ċ import Ġes . np atar ino . android . got challenge . base . presentation . hide View Ċ import Ġes . np atar ino . android . got challenge . base . presentation . non Null Ob serve Ċ import Ġes . np atar ino . android . got challenge . base . presentation . show View Ċ import Ġes . np atar ino . android . got challenge . characters . presentation . model . Go T Character List Ui State Ċ import Ġes . np atar ino . android . got challenge . characters . presentation . view model . Go T Character List ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ list .* Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ Ċ class ĠGo T Character List Fragment Ġ: ĠRe cycler List Fragment < Go T Character ListAdapter >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcharacter ViewModel : ĠGo T Character List ViewModel Ġby Ġshared ViewModel () ĊĠĠĠ Ġprivate Ġval Ġcharacter ListAdapter : ĠGo T Character ListAdapter Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Search Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġcharacter ListAdapter . on Query Character Ġ= Ġ{ Ġquery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter ViewModel . get Character List ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Search Ġ= Ġquery ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcharacter ListAdapter . on Character Selected Ġ= Ġ{ Ġcharacter , Ġiv Background Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGo T Character Detail Activity . startActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Pair ( iv Background Ġas ĠView , ĠIMAGE _ TRANS ITION _ KEY )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcharacter ViewModel . character List Ui State . non Null Ob serve ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGo T Character List Ui State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Content List . hide View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . show View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGo T Character List Ui State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Content List . show View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . hide View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( rv Content List , ĠR . string . loading _ content _ error , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . retry ) Ġ{ Ġcharacter ViewModel . get Character List ( current Search ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGo T Character List Ui State . Data Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Content List . show View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . hide View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter ListAdapter . characters Ġ= Ġit . characters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter ViewModel . get Character List ( it . getString ( QUERY _ EXTRA ) !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Adapter () Ġ= Ġcharacter ListAdapter ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . putString ( QUERY _ EXTRA , Ġcurrent Search ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ EXTRA Ġ= Ġ" query Extra " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIMAGE _ TRANS ITION _ KEY Ġ= Ġ" image " ĊĠĠĠ Ġ} Ċ }