package Ġcom . mv vm . weather app . ui . search Ċ Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . Nav Directions Ċ import Ġandroidx . navigation . Navigation Ċ Ċ import Ġcom . mv vm . weather app . R Ċ import Ġcom . mv vm . weather app . base . Base Fragment Ċ import Ġcom . mv vm . weather app . data . model . City Model Ċ import Ġcom . mv vm . weather app . databinding . Fragment Search Binding Ċ import Ġcom . mv vm . weather app . ui . Shared Main ViewModel Ċ Ċ class ĠSearch Fragment Ġ: ĠBase Fragment < Fragment Search Binding , ĠShared Main ViewModel >(), ĊĠĠĠ ĠSearch Navigator Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠSearch Adapter ĊĊĠĠĠ Ġoverride Ġval Ġm ViewModel : ĠShared Main ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Res Id (): ĠInt Ġ= ĠR . layout . fragment _ search ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠSearch Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . navigator Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġbinding . search View . setOn Query Text Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . appcompat . widget . Search View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlower Ġ= Ġit . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . find City ( lower . capitalize ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( p 0 : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobserve LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve LiveData () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . sear ched C ities . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Changes ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( city : ĠCity Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . search View . clear Focus () ĊĠĠĠĠĠĠĠ Ġm ViewModel . save F avorites ( city ) ĊĠĠĠĠĠĠĠ Ġm ViewModel . saved Fav . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . getF avorites () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Direction ( Search Fragment Directions . action Search Fragment ToList Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigate Direction ( Search Fragment Directions . action Search Fragment ToList Fragment ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate Direction ( action : ĠNav Directions ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( this . require View ()). navigate ( action ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ