package Ġcom . tech nip ix l . fil rouge Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . tech nip ix l . fil rouge . UI . Food Adapter Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . android . gms . location .* Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . On Map Ready Callback Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . Bitmap Descriptor Factory Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . tech nip ix l . fil rouge . DB Food . Database . Database Food Ċ import Ġcom . tech nip ix l . fil rouge . Model . Bus ines se Ċ import Ġcom . tech nip ix l . fil rouge . UI . Conn exion Y el p Impl Ċ import Ġcom . tech nip ix l . fil rouge . databinding . Fragment Food Binding Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context ĊĊ Ċ class ĠFood Fragment Ġ: ĠFragment (), Food Adapter . On click Food Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Food Binding ĊĠĠĠ Ġprivate Ġval Ġconn Ġby Ġlazy Ġ{ ĠCon nex ion Y el p Impl () Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Client : ĠF used Location Provider Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap : Google Map ĊĊĠĠĠ Ġprivate Ġ Ġvar Ġlocation Callback : ĠLocation Callback Ġ= Ġobject Ġ: ĠLocation Callback (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Result ( location Result : ĠLocation Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Result ?. last Location ?. let Ġ{ location -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Client . remove Location Updates ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Map ( location . latitude , location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup yel pdata ( location . latitude , location . longitude ) ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 1 Selection Food . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Client . remove Location Updates ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Map ( location . latitude , location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 1 Selection Food . background Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . background _ button , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 2 Selection Food Favorite . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 2 Selection Food Favorite . setTextColor ( Context Compat . getColor ( require Context (), R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 1 Selection Food . setTextColor ( Context Compat . getColor ( require Context (), R . color . pink )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup yel pdata ( location . latitude , location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 2 Selection Food Favorite . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Client . remove Location Updates ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Map ( location . latitude , location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 2 Selection Food Favorite . background Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . background _ button , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 1 Selection Food . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 2 Selection Food Favorite . setTextColor ( Context Compat . getColor ( require Context (), R . color . pink )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn 1 Selection Food . setTextColor ( Context Compat . getColor ( require Context (), R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup D by el pData Db () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOC ATION _ PERMISSION _ REQUEST _ CODE Ġ= Ġ 1 2 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtack location (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( context ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ Ġ&& Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ), ĠLOC ATION _ PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠLocation Request . create () ĊĠĠĠĠĠĠĠ Ġrequest . interval Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġrequest . priority Ġ= ĠLocation Request . PRIORITY _ HIGH _ AC CUR ACY ĊĠĠĠĠĠĠĠ Ġf used Location Client Ġ= ĠLocation Services . getF used Location Provider Client ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġf used Location Client . request Location Updates ( request , Ġlocation Callback , ĠL ooper . get Main Looper ()) ĊĊĠĠĠ Ġ} ĊĊ Ġfun Ġ Ġon Permission Granted (){ ĊĠĠĠĠ Ġtack location () Ċ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Food Binding . inflate ( layout Inflater ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . fragment Container View Map ) Ġas ĠSupport Map Fragment ? ĊĠĠĠĠĠĠĠ Ġfragment ?. getMap Async ( On Map Ready Callback { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtack location () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcenter Map ( latitude : ĠDouble , Ġlongitude : ĠDouble ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . fragment Container View Map ) Ġas ĠSupport Map Fragment ? ĊĠĠĠĠĠĠĠ Ġfragment ?. getMap Async ( On Map Ready Callback { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . move Camera ( Camera Update Factory . new LatLng Zoom ( LatLng ( latitude , longitude ), 1 0 F )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġadd Mar quer ( response : List < Bus ines se > ){ ĊĠĠĠĠĠĠĠ Ġval Ġbound Build Ġ= ĠLat Lng Bounds . builder () ĊĠĠĠĠĠĠĠ Ġresponse . forEach Ġ{ Ġdata Business -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġdata Business . coordinates . latitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġdata Business . coordinates . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġdata Business . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoord Ġ= ĠLat Lng ( lat , long ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat , long , title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbound Build . include ( coord ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġadd Marker ( latitude : ĠDouble , Ġlongitude : ĠDouble , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker Options Ġ= ĠMarker Options (). position ( LatLng ( latitude , Ġlongitude )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( Bitmap Descriptor Factory . from Resource ( R . drawable . ico _ pin _ p izza )) ĊĠĠĠĠĠĠĠ Ġmap . add Marker ( marker Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup yel pdata ( latitude : Double , longitude : Double ){ ĊĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġconn . get Search ( latitude , longitude , 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Context (), Linear LayoutManager . VERTICAL , false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= ĠFood Adapter ( it . bus inesses , this @ Food Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Mar quer ( it . bus inesses ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup D by el pData Db (){ ĊĠĠĠĠĠĠĠ ĠDatabase Food . get Db ( require Context ()). food Dao (). get Favorite Food ( 0 ). observe ( view Lifecycle Owner ){ list Db -> ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist bus i Ġ= Ġlist Db . map Ġ{ ĠBus ines se Mapper (). trans fort o Bus ines se ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Context (), Linear LayoutManager . VERTICAL , false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġ ĠFood Adapter ( list bus i , this @ Food Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list bus i . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Mar quer ( list bus i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġonclick Food Listener ( bus ines se : ĠBus ines se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠFood Fragment Directions . action Food Fragment To Detail Food Fragment ( bus ines se , 0 ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠ Ġ} ĊĊ Ċ }