package Ġcom . example . android on kotlin . view Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . android on kotlin . R Ċ import Ġcom . example . android on kotlin . databinding . Fragment Main Binding Ċ import Ġcom . example . android on kotlin . model . Weather Ċ import Ġcom . example . android on kotlin . view model . AppState Ċ import Ġcom . example . android on kotlin . view model . Main ViewModel Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ Ċ class ĠMain Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Main Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Main Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Main ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . get LiveData (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġrender Data ( it ) Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . get Weather From Local Source () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Data ( app State : ĠApp State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( app State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApp State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Data Ġ= Ġapp State . weather Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( weather Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApp State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApp State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( binding . main View , Ġ" Error ", ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Reload ") Ġ{ ĠviewModel . get Weather From Local Source () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetData ( weather Data : ĠWeather ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . city Name . text Ġ= Ġweather Data . city . city Name ĊĠĠĠĠĠĠĠ Ġbinding . city Coordinates . text Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . city _ coordinates ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Data . city . lat . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Data . city . lon . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . temperature Value . text Ġ= Ġweather Data . temperature . toString () ĊĠĠĠĠĠĠĠ Ġbinding . fe els Like Value . text Ġ= Ġweather Data . fe els Like . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠMain Fragment () ĊĠĠĠ Ġ} Ċ }