package Ġcom . example . weather . Fragments Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġcom . example . weather . Activities . Weather Activity Ċ import Ġcom . example . weather . R Ċ import Ġcom . example . weather . ViewModels . Weather ViewModel Ċ import Ġcom . google . android . gms . common . api . Status Ċ import Ġcom . google . android . libraries . places . api . Places Ċ import Ġcom . google . android . libraries . places . api . model . Place Ċ import Ġcom . google . android . libraries . places . api . model . Type Filter Ċ import Ġcom . google . android . libraries . places . widget . Autocomplete Support Fragment Ċ import Ġcom . google . android . libraries . places . widget . listener . Place Selection Listener ĊĊ Ċ class ĠCity List Fragment Ġ: ĠFragment (), ĠPlace Selection Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweather ViewModel : ĠWeather ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcity ListView : ĠListView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġautocomplete Support Fragment : ĠWr apped Autocomplete Support Fragment ĊĊĠĠĠ Ġprivate Ġvar Ġweather Model Indices Observer : ĠObserver < List < Int >> Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ Ġ( this . city ListView . adapter Ġas ? ĠCity Weather List Ad ap ater )?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ( this . city ListView . adapter Ġas ? ĠCity Weather List Ad ap ater )?. notify DataSet Invalid ated () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ city , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġcity ListView Ġ= Ġview . findViewById ( R . id . city _ weather _ list ) ĊĠĠĠĠĠĠĠ Ġcity ListView . adapter Ġ= ĠCity Weather List Ad ap ater ( view . context ) ĊĊĠĠĠĠĠĠĠ Ġthis . weather ViewModel . weather Model Indices . observe ( this , Ġthis . weather Model Indices Observer ) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Places . isInitialized ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPl aces . initialize ( view . context , Ġ" AI za Sy CV x Qr 8 Gg M h 4 is X w O Ve u DP d TW W _ k MB f QY c ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . autocomplete Support Fragment Ġ= Ġthis . fragment Manager ?. find Fragment ById ( R . id . autocomplete _ fragment ) Ġas ĠWr apped Autocomplete Support Fragment ĊĠĠĠĠĠĠĠ Ġthis . autocomplete Support Fragment . setType Filter ( Type Filter . C ITIES ) ĊĠĠĠĠĠĠĠ Ġthis . autocomplete Support Fragment . set Place Fields ( listOf ( Place . Field . LAT _ L NG , ĠPlace . Field . NAME )) ĊĠĠĠĠĠĠĠ Ġthis . autocomplete Support Fragment . setOn Place Selected Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Place Selected ( place : ĠPlace ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . weather ViewModel . add City ( place . name !! , Ġplace . lat Lng ?. latitude !! , Ġplace . lat Lng ?. longitude !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( status : ĠStatus ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Weather City ", Ġ" Failed Ġto Ġsearch ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCity Weather List Ad ap ater ( context : ĠContext ): ĠBase Adapter (), ĠView . On Long ClickListener , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠmContext : ĠContext Ġ= Ġcontext ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( mContext ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Weather Row Ġ= Ġlayout Inflater . inflate ( R . layout . city _ weather _ row , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Name : ĠTextView Ġ Ġ= Ġcity Weather Row . findViewById ( R . id . city _ row _ weather _ city ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Name . text Ġ= Ġthis @ City List Fragment . weather ViewModel . get City Name ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Temperature : ĠTextView Ġ= Ġcity Weather Row . findViewById ( R . id . city _ row _ weather _ temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Temperature . text Ġ= Ġthis @ City List Fragment . weather ViewModel . get City Current Temp ( position ). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Icon : ĠImageView Ġ= Ġcity Weather Row . findViewById ( R . id . city _ row _ weather _ svg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Icon . setImage Resource ( this . get Drawable Id ( this @ City List Fragment . weather ViewModel . get City Current Icon ( position ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Button : ĠImage Button Ġ= Ġcity Weather Row . findViewById ( R . id . city _ row _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ City List Fragment . weather ViewModel . remove City ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Weather Row . setOn Long ClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Weather Row . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcity Weather Row ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Placeholder Ġstring " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġposition . to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ City List Fragment . weather ViewModel . get City Count () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( v : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Button : ĠImage Button ? Ġ= Ġv ?. findViewById ( R . id . city _ row _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Button ?. visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Temperature : ĠTextView ? Ġ= Ġv ?. findViewById ( R . id . city _ row _ weather _ temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcity Temperature ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Button : ĠImage Button ? Ġ= Ġv ?. findViewById ( R . id . city _ row _ delete ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Temperature : ĠTextView ? Ġ= Ġv ?. findViewById ( R . id . city _ row _ weather _ temperature ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Button ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Temperature ?. visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Activity : ĠWeather Activity ? Ġ= Ġthis @ City List Fragment . activity Ġas ? ĠWeather Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Activity ?. goTo Page ( this @ City List Fragment . city ListView . getPosition For View ( v )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Drawable Id ( resourceName : ĠString ?) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresources . getIdentifier ( resourceName ?. or Empty (). toString (), Ġ" drawable ", Ġthis @ City List Fragment . activity ?. packageName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( vm : ĠWeather ViewModel ) Ġ: ĠCity List Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠCity List Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . weather ViewModel Ġ= Ġvm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ