package Ġcom . j ia ha oli ul iu . k are Ċ Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . gms . location . F used Location Provider Client Ċ import Ġcom . google . android . gms . location . Location Services Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ 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 . Marker Options Ċ Ċ class ĠLocation Fragment : ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION S _ REQUEST _ ACCESS _ F INE _ LOCATION Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ LOCATION Ġ= ĠLat Lng ( 2 5 . 2 7 6 , Ġ 5 5 . 2 9 6 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ ZO OM Ġ= Ġ 1 5 F ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" K ARE " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġgoogle Map : ĠGoogle Map ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlocation Permission Granted Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Provider Client : ĠF used Location Provider Client ĊĠĠĠ Ġprivate Ġvar Ġlast Known Location : ĠLocation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Marker ClickListener : ĠGoogle Map . On Marker ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ location , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client Ġ= ĠLocation Services . getF used Location Provider Client ( activity !! ) ĊĠĠĠĠĠĠĠ Ġval Ġsupport Map Fragment Ġ= Ġchild FragmentManager !!. find Fragment ById ( R . id . maps ) Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġsupport Map Fragment . getMap Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Map Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Location Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( activity !!. application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Location Permission Gu arante ed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( android . Manifest . permission . ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Permission Granted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhen ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ ACCESS _ F INE _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġrequest Ġis Ġcancelled , Ġthe Ġresult Ġarrays Ġare Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Location Permission Gu arante ed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Location Permission D ene g ated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Location Permission Gu arante ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Permission Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠTurn Ġon Ġthe Ġmy Ġlocation Ġlayer Ġand Ġthe Ġrelated Ġcontrol Ġon Ġthe e Ġmap ĊĠĠĠĠĠĠĠ Ġupdate Location UI () ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġcurrent Ġlocation Ġof Ġthe Ġdevice Ġand Ġset Ġthe Ġposition Ġon Ġthe e Ġmap ĊĠĠĠĠĠĠĠ Ġget Device Location (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Location Permission D ene g ated () Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle Map ?. let Ġ{ google Map NotNull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Known Location ?. let Ġ{ Ġlast Known Location NotNull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Map NotNull . move Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Update Factory . new LatLng Zoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLat Lng ( last Known Location NotNull . latitude , Ġlast Known Location NotNull . longitude ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ ZO OM )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthe Ġpermission Ġis Ġnot Ġguaranteed , Ġthen Ġuse Ġthe Ġdefault Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Map NotNull . move Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Update Factory . new LatLng Zoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ ZO OM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Map NotNull . ui Settings . is My Location Button Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Location UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle Map ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is My Location Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . ui Settings . is My Location Button Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Device Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġbest Ġand Ġmost Ġrecent Ġlocation Ġof Ġthe Ġdevice , Ġwhich Ġmay Ġbe Ġnull Ġin Ġrare ĊĠĠĠĠĠĠĠĠ Ġ* Ġcases Ġwhen Ġa Ġlocation Ġis Ġnot Ġavailable . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġgoogle Map ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! location Permission Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Result Ġ= Ġf used Location Provider Client . last Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Result . add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Known Location Ġ= Ġtask . result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Known Location LatLng Ġ= ĠLat Lng ( last Known Location !!. latitude , Ġlast Known Location !!. longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . move Camera ( Camera Update Factory . new LatLng Zoom ( last Known Location LatLng , ĠDEFAULT _ ZO OM )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Options Ġ= ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker Options . position ( last Known Location LatLng ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker Options . icon ( Bitmap Descriptor Factory . default Marker ( Bitmap Descriptor Factory . H UE _ BLUE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Marker ( marker Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOn Marker ClickListener Ġ{ marker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Marker ClickListener ?. on Marker Click ( marker ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Current Ġlocation Ġis Ġnull . ĠUsing Ġdefaults ."); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Exception : Ġ% s ", Ġtask . exception ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . move Camera ( Camera Update Factory . new LatLng Zoom ( DEFAULT _ LOCATION , ĠDEFAULT _ ZO OM )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . ui Settings . is My Location Button Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Marker ClickListener ( on Marker ClickListener : ĠGoogle Map . On Marker ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Marker ClickListener Ġ= Ġon Marker ClickListener ĊĠĠĠ Ġ} Ċ }