package Ġdog . snow . android re cruit test . feature . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Extras Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġdog . snow . android re cruit test . R Ċ import Ġdog . snow . android re cruit test . Snow Dog App Ċ import Ġdog . snow . android re cruit test . core . extension . observe Ċ import Ġdog . snow . android re cruit test . feature . detail . Details Fragment ViewModel Ċ import Ġdog . snow . android re cruit test . feature . list . adapter . ListAdapter Ċ import Ġdog . snow . android re cruit test . feature . list . model . ListItem Ċ import Ġkotlinx . android . synt hetic . main . layout _ search .* Ċ import Ġkotlinx . android . synt hetic . main . list _ fragment .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠList Fragment Ġ: ĠFragment ( R . layout . list _ fragment ) Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠList Adapter ĊĊĠĠĠ Ġprivate Ġval Ġlist Item ViewModel : ĠList Fragment ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠviewModel Factory )[ List Fragment ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize D agger Dependency () ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize D agger Dependency () Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger List Fragment Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. core Component ( Snow Dog App . core Component ( require Context ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinitialize View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize View () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠList Adapter (:: on Item Click , Ġ:: on Filter Result ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ items . adapter Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġet _ search . add TextChanged Listener ( object Ġ: ĠOn Search Term Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Term Changed ( p 0 : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . filter Items ( p 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Item Click ( list Item : ĠListItem , Ġposition : ĠInt , ĠimageView : ĠImageView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= ĠFragment Navigator Extras ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView Ġto Ġlist Item . album Info . thumbnail Url ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠList Fragment Directions . action List Fragment To Details Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item . photo Info . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item . album Info . thumbnail Url ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action , Ġextras ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Filter Result ( list : ĠList < ListItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty _ view . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ items . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty _ view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ items . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġobserve ( list Item ViewModel . list Fragment View Event , Ġ:: on View Event ) ĊĠĠĠĠĠĠĠ Ġobserve ( list Item ViewModel . list Item , Ġ:: on ListItem Changed ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item ViewModel . fetch Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon ListItem Changed ( list Items : ĠList < ListItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . setData ( list Items ) ĊĊĠĠĠĠĠĠĠ Ġrv _ items . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġempty _ view . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon View Event ( view Event : ĠList Fragment View Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList Fragment View Event . Show ErrorMessage Ġ-> Ġshow Error ( view Event . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( errorMessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠerrorMessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ