package Ġcom . github . d hav al 2 4 0 4 . weather app . ui . home _ screen Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . github . d hav al 2 4 0 4 . weather app . R Ċ import Ġcom . github . d hav al 2 4 0 4 . weather app . databinding . Fragment Home Binding Ċ import Ġcom . github . d hav al 2 4 0 4 . weather app . room . entity . City Entity Ċ import Ġcom . github . d hav al 2 4 0 4 . weather app . ui . base . Base Fragment Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ /** Ċ Ġ* ĠHome ĠFragment Ġ( List Ġall Ġbookmark Ġcities ) Ċ Ġ* Ċ Ġ* Ġ@ author ĠD hav al ĠP ate l Ċ Ġ* Ġ@ version Ġ 1 . 0 Ċ Ġ* Ġ@ since Ġ 1 5 ĠMay Ġ 2 0 2 1 Ċ Ġ*/ Ċ class ĠHome Fragment Ġ: ĠBase Fragment < Fragment Home Binding >(), ĠHome Navigator Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm ViewModel : ĠHome ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġval Ġm City Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCity Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout () Ġ= ĠR . layout . fragment _ home ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġmenu Ġfor ĠHome ĠFragment ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBind ĠVariables ĊĠĠĠĠĠĠĠ Ġm ViewData Binding . viewModel Ġ= Ġm ViewModel ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠNavigator ĊĠĠĠĠĠĠĠ Ġm ViewModel . set Navigator ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠLive Data ĠObserver ĊĠĠĠĠĠĠĠ Ġset Observer () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠAdapter ĊĠĠĠĠĠĠĠ Ġm ViewData Binding . city RV . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġm ViewData Binding . city RV . set Empty View ( m ViewData Binding . city Empty View ) ĊĠĠĠĠĠĠĠ Ġm ViewData Binding . city RV . adapter Ġ= Ġm City Adapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġcity Ġclick ĊĠĠĠĠĠĠĠ Ġm City Adapter . set City ClickListener Ġ{ Ġcity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Weather Screen ( city ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġcity Ġdelete Ġclick ĊĠĠĠĠĠĠĠ Ġm City Adapter . set City Delete Listener Ġ{ Ġcity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . delete City ( city ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠObserver Ġsearch Ġtext Ġchanges ĊĠĠĠĠĠĠĠ Ġm ViewModel . search Text . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm City Adapter . filter . filter ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠObserver Ġcity Ġchanges ĊĠĠĠĠĠĠĠ Ġm ViewModel . getAll C ities (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġcities Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm City Adapter . refresh ( cities ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApply Ġfilter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . search Text . value ?. let Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm City Adapter . filter . filter ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInf late Ġmenu ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ home , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġmenu Ġitem Ġclicks ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHelp Ġmenu Ġclick ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ help Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . show Help Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetting Ġmenu Ġclick ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ setting Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . show Setting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRedirect Ġto Ġadd Ġcity Ġscreen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġshow Add City Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . show Add City ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRedirect Ġto Ġweather Ġinfo Ġscreen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Weather Screen ( city : ĠCity Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshow City Weather Ġ= ĠHome Fragment Directions . show City Weather ( city ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( show City Weather ) ĊĠĠĠ Ġ} Ċ } Ċ