package Ġcom . example . weather _ for cast . Features Ċ Ċ import Ġandroid . app . Activity . RESULT _ C ANCE LED Ċ import Ġandroid . app . Activity . RESULT _ OK Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . example . weather _ for cast . Model . City Ċ Ċ import Ġcom . example . weather _ for cast . R Ċ import Ġcom . example . weather _ for cast . ViewModel . C ities ViewModel Ċ import Ġcom . google . android . libraries . places . api . model . Place Ċ import Ġcom . google . android . libraries . places . widget . Autocomplete Ċ import Ġcom . google . android . libraries . places . widget . Autocomplete Activity Ċ import Ġcom . google . android . libraries . places . widget . model . Autocomplete Activity Mode Ċ import Ġkotlinx . android . synt hetic . main . fragment _ add _ city .* Ċ import Ġjava . util .* ĊĊ Ċ class ĠAdd City Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠAUTO COMPLETE _ REQUEST _ CODE Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠC ities ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĊĠĠĠ Ġprivate Ġvar Ġplace : ĠPlace ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplace Name : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ add _ city , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// initialize Ġview Ġmodel Ġclass Ġand Ġnavigation Ġcontroller ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( activity !! ). get ( C ities ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġfind Nav Controller () ĊĊĠĠĠĠĠĠĠ Ġ// set Ġtoolbar ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). set Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). support ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). support ActionBar ?. set Display Show Home Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// set Ġclick Ġlistener Ġon Ġedit text ĊĠĠĠĠĠĠĠ Ġedit Text . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// open Ġgoogle Ġplaces Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Search Called () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// set Ġclick Ġlistener Ġon Ġcancel Ġbutton ĊĠĠĠĠĠĠĠ Ġimage Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// remove Ġselected Ġcity Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// set Ġon ĠClick Ġlistener Ġon Ġok Ġbutton ĊĠĠĠĠĠĠĠ Ġimage Button 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! place Name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġplace Ġis Ġnot Ġnull Ġadd Ġit Ġto Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add City ( City ( 0 , Ġplace Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// navigate Ġto Ġcities Ġlist Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ add City Fragment _ to _ cities Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . getItem Id () Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Search Called () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġfields Ġto Ġspecify Ġwhich Ġtypes Ġof Ġplace Ġdata Ġto Ġreturn . ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĠlistOf ( Place . Field . NAME , ĠPlace . Field . LAT _ L NG ) ĊĊĠĠĠĠĠĠĠ Ġ// start Ġthe Ġautocomplete Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuto complete . Intent Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuto complete Activity Mode . FULL SCREEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). set Country ( Locale . getDefault (). country ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠAUTO COMPLETE _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠAUTO COMPLETE _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Ġselected Ġplace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Ġ= Ġdata ?. let Ġ{ ĠAuto complete . get Place From Intent ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Google ĠPlace ĠAPI ", Ġplace ?. name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġtext Ġon Ġedit Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( place ?. name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġplace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Name Ġ= Ġplace ?. name . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠAuto complete Activity . RESULT _ ERROR ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġdata ?. let Ġ{ ĠAuto complete . getStatus From Intent ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Google ĠPlace ĠA Pi ", Ġstatus ?. status Message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠRESULT _ C ANCE LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġcanceled Ġthe Ġoperation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Google ĠPlace ", Ġ" Operation Ġcanceled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ