package Ġcom . e use com . demo ad . view Ċ Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Bottom Sheet Behavior Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġco . zs mb . material drawer kt . builders . drawer Ċ import Ġco . zs mb . material drawer kt . drawer items . badge able . primary Item Ċ import Ġco . zs mb . material drawer kt . drawer items . divider Ċ import Ġcom . e use com . demo ad . R Ċ 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 . mike pen z . material drawer . Drawer Ċ import Ġkotlinx . android . synt hetic . main . activity _ maps .* Ċ import Ġandroid . widget . TextView Ċ import Ġcom . e use com . demo ad . datamodel . model . Realm Location Ċ import Ġcom . e use com . demo ad . view model . ID emo ad ViewModel Ċ import Ġcom . google . android . gms . maps . model .* Ċ import Ġdagger . android . Android Injection Ċ import Ġorg . jetbrains . ank o . toast Ċ import Ġrx . Observable Ċ import Ġrx . schedul ers . Schedulers Ċ import Ġrx . subscriptions . Composite Subscription Ċ import Ġjavax . inject . Inject Ċ import Ġcom . google . android . gms . maps . model . Polyline Options ; Ċ Ċ class ĠMaps Activity Ġ: ĠAppCompatActivity (), ĠOn Map Ready Callback , ĊĠĠĠĠĠĠĠ ĠGoogle Map . On Marker ClickListener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġm ViewModel : ĠID emo ad ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap : ĠGoogle Map ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresult : ĠDraw er ĊĠĠĠ Ġprivate Ġvar Ġtext 2 : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm Subscription : ĠComposite Subscription Ġ= ĠComposite Subscription () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOC ATION _ PERMISSION _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsheet Behavior : ĠBottom Sheet Behavior < LinearLayout > ĊĊĠĠĠ Ġvar Ġline color : ĠInt Ġ= ĠColor . BLUE ĊĠĠĠ Ġvar Ġlines ize : ĠFloat Ġ= Ġ 5 . 0 f ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠAndroid Injection . inject ( this ); ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ maps ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġmap Fragment . getMap Async ( this ) ĊĊĠĠĠĠĠĠĠ Ġinit View () ĊĊĠĠĠĠĠĠĠ Ġset Subscription () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsheet Behavior Ġ= ĠBottom Sheet Behavior . from < LinearLayout >( bottom _ sheet ) ĊĊĠĠĠĠĠĠĠ Ġsheet Behavior . set Bottom Sheet Callback ( object Ġ: ĠBottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ HIDDEN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ EXP AN DED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext 1 . text Ġ= ĠgetString ( R . string . clo ses heet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ COLL AP SED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext 1 . text Ġ= ĠgetString ( R . string . exp ands heet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ DR AG GING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ SET TL ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġtext 2 Ġ= ĠfindViewById < View >( R . id . text 2 ) Ġas ĠTextView ĊĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġdrawer Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Ġ= Ġthis @ Maps Activity . toolbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Stable Ids Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow On First Launch Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Item ( getString ( R . string . action _ north )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Margin Loc s (" N ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Item ( getString ( R . string . action _ south )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Margin Loc s (" S ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Item ( getString ( R . string . action _ west )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Margin Loc s (" W ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Item ( getString ( R . string . action _ east )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Margin Loc s (" E ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ{} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( google Map : ĠGoogle Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġgoogle Map ĊĊĠĠĠĠĠĠĠ Ġmap . ui Settings . is Zoom Controls Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmap . setOn Marker ClickListener ( this ) ĊĊĠĠĠĠĠĠĠ ĠsetUp Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Marker Click ( marker : ĠMarker ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtext 2 ?. text Ġ= Ġmarker ?. getTitle () ĊĠĠĠĠĠĠĠ Ġexpand Close Sheet () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Close Sheet () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sheet Behavior !!. state Ġ!= ĠBottom Sheet Behavior . STATE _ EXP AN DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsheet Behavior !!. state Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext 1 . text Ġ= ĠgetString ( R . string . clo ses heet ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsheet Behavior !!. state Ġ= ĠBottom Sheet Behavior . STATE _ COLL AP SED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext 1 . text Ġ= ĠgetString ( R . string . exp ands heet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext 2 ?. text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( android . Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠLOC ATION _ PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap . is My Location Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmap . map Type Ġ= ĠGoogle Map . MAP _ TYPE _ NORMAL ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplace Marker On Map ( loc : ĠRealm Location ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcur LatLng Ġ= ĠLat Lng ( loc . latitude , Ġloc . longitude ) ĊĠĠĠĠĠĠĠ Ġval Ġmarker Options Ġ= ĠMarker Options (). position ( cur LatLng ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtitle x Ġ= Ġ" Lat i Ġ" Ġ+ Ġloc . latitude Ġ+ Ġ", ĠLong Ġ" Ġ+ Ġloc . longitude Ġ+ Ġ", ĠAcc Ġ" Ġ+ Ġloc . accuracy Ġ+ Ġ", ĠTime Ġ" Ġ+ Ġloc . time Ġ+ Ġ", ĠPro v Ġ" Ġ+ Ġloc . provider ĊĠĠĠĠĠĠĠ Ġmarker Options . title ( title x ) ĊĊĠĠĠĠĠĠĠ Ġmap . add Marker ( marker Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Subscription () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġm Subscription . add ( get My Loc s From Realm () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( rx . android . schedul ers . Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Demo ad Activity ", Ġ" Error ĠThrowable Ġ" Ġ+ Ġthrowable . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Server Ġnot Ġconnected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrowable Ġ-> ĠObservable . empty () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit Ġ-> Ġset Saved Locations ( it ) Ġ})) ĊĊĠĠĠĠĠĠĠ Ġm Subscription . add ( get Margin Loc s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( rx . android . schedul ers . Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Demo ad Activity ", Ġ" Error ĠThrowable Ġ" Ġ+ Ġthrowable . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Server Ġnot Ġconnected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrowable Ġ-> ĠObservable . empty () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit Ġ-> Ġset Margin Locations ( it ) Ġ})) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Saved Locations ( locations : ĠList < Realm Location >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġlist LatLng : ĠArrayList < LatLng > Ġ= ĠArrayList < LatLng >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent LatLng Ġ= ĠLat Lng ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġlocations . forEach Ġ{ Ġi Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent LatLng Ġ= ĠLat Lng ( i . latitude , Ġi . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist LatLng . add ( current LatLng ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Marker On Map ( i ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( Ġlist LatLng . size Ġ> Ġ 0 Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . animate Camera ( Camera Update Factory . new LatLng Zoom ( current LatLng , Ġ 1 2 f )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist LatLng . forEach Indexed Ġ{ Ġindex , Ġelement Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġindex Ġ> Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . add Polyline ( Polyline Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( list LatLng . get ( index ), Ġlist LatLng . get ( index - 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( lines ize ). color ( line color ). ge odes ic ( true )); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Margin Locations ( locations : ĠList < Realm Location >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġlist LatLng : ĠArrayList < LatLng > Ġ= ĠArrayList < LatLng >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent LatLng Ġ= ĠLat Lng ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġlocations . forEach Ġ{ Ġi Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent LatLng Ġ= ĠLat Lng ( i . latitude , Ġi . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist LatLng . add ( current LatLng ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( Ġlist LatLng . size Ġ> Ġ 0 Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . animate Camera ( Camera Update Factory . new LatLng Zoom ( current LatLng , Ġ 1 2 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget My Loc s From Realm (): ĠObservable < List < Realm Location >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm ViewModel . get My Loc s From Realm (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Margin Loc s (): ĠObservable < List < Realm Location >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm ViewModel . get Margin Loc s From Realm (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġemit Margin Loc s ( w side : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm ViewModel . emit Margin Loc s From Realm ( w side ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . clear Observable Margin Loc s From Realm () ĊĠĠĠĠĠĠĠ Ġm Subscription ?. unsubscribe () ĊĠĠĠĠĠĠĠ Ġm Subscription ?. clear () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( android . Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠLOC ATION _ PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ