package Ġre . not ifica . geo . internal Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . bluetooth . Bluetooth Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Build Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . os . Build Compat Ċ import Ġkotlinx . coroutines .* Ċ import Ġokhttp 3 . Response Ċ import Ġre . not ifica .* Ċ import Ġre . not ifica . geo . Not ific are Geo Ċ import Ġre . not ifica . geo . Not ific are Internal Geo Ċ import Ġre . not ifica . geo . Not ific are Location Hardware Unavailable Exception Ċ import Ġre . not ifica . geo . internal . network . push .* Ċ import Ġre . not ifica . geo . internal . storage . LocalStorage Ċ import Ġre . not ifica . geo . k tx . DEFAULT _ LOCATION _ UP DAT ES _ SM ALLE ST _ DIS PLACE MENT Ċ import Ġre . not ifica . geo . k tx . log Beacon Session Ċ import Ġre . not ifica . geo . k tx . log Region Session Ċ import Ġre . not ifica . geo . k tx . loy alty Integration Ċ import Ġre . not ifica . geo . models .* Ċ import Ġre . not ifica . internal . Not ific are Logger Ċ import Ġre . not ifica . internal . Not ific are Module Ċ import Ġre . not ifica . internal . modules . integrations . Not ific are Geo Integration Ċ import Ġre . not ifica . internal . network . request . Not ific are Request Ċ import Ġre . not ifica . k tx . device Ċ import Ġre . not ifica . k tx . events Ċ import Ġre . not ifica . models . Not ific are Application Ċ import Ġjava . util .* Ċ Ċ internal Ġobject ĠNot ific are Geo Impl Ġ: ĠNot ific are Module (), ĠNot ific are Geo , ĠNot ific are Internal Geo , ĠNot ific are Geo Integration Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠlocalStorage : ĠLocal Storage ĊĠĠĠ Ġprivate Ġvar Ġgeo coder : ĠGeo coder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġservice Manager : ĠService Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbe acon Service Manager : ĠBe acon Service Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Known Location : ĠLocation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable ListOf < Not ific are Geo . Listener >() ĊĊĠĠĠ Ġprivate Ġval Ġhas Foreground Location Permission : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build Compat . is At Least S ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhas Background Location Permission : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Background Access Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhas Background Access Ġ&& Ġhas Foreground Location Permission ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhas Prec ise Location Permission : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhas Bluetooth Permission : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . BL U ETO OTH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhas Bluetooth Scan Permission : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . BL U ETO OTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlocation Services Auth Status : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Background Location Permission Ġ-> Ġ" always " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Foreground Location Permission Ġ-> Ġ" use " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" none " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlocation Services Accuracy Auth : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Foreground Location Permission Ġ&& Ġ! has Prec ise Location Permission Ġ-> Ġ" reduced " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" full " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhas Beacon Support : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠNot ific are . require Context () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! context . package Manager . has System Feature ( PackageManager . FEATURE _ BL U ETO OTH _ LE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequires ĠBluetooth ĠLE .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Bluetooth Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequires Ġbluetooth Ġpermission .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Bluetooth Scan Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequires Ġbluetooth Ġscan Ġpermission .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbluetooth Manager Ġ= Ġcontext . getSystem Service ( Context . BL U ETO OTH _ SERVICE ) Ġas ĠBluetooth Manager ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Manager ?. adapter ?. isEnabled Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequires Ġthe Ġbluetooth Ġadapter Ġto Ġbe Ġenabled .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Not ific are . application ?. region Config ?. prox imity UUID Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequired Ġthe Ġapplication Ġto Ġbe Ġconfigured Ġwith Ġthe ĠPro x imity ĠUUID .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( beacon Service Manager Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Be ac ons Ġfunctionality Ġrequires Ġthe Ġnot ific are - geo - be ac ons Ġpeer Ġmodule .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠNot ific are ĠModule ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠNot ific are . require Context () ĊĊĠĠĠĠĠĠĠ ĠlocalStorage Ġ= ĠLocal Storage ( context ) ĊĠĠĠĠĠĠĠ Ġgeo coder Ġ= Ġif Ġ( Geo coder . isPresent ()) ĠGeo coder ( context ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġservice Manager Ġ= ĠService Manager . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġlaunch () Ġ{ ĊĠĠĠĠĠĠĠ Ġbe acon Service Manager Ġ= ĠBe acon Service Manager . create () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( beacon Service Manager Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . info (" To Ġenable Ġbe acon Ġsupport , Ġinclude Ġthe Ġnot ific are - geo - be ac ons Ġpeer Ġdependency .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠNot ific are ĠGeo ĊĊĠĠĠ Ġoverride Ġvar Ġhas Location Services Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(:: localStorage . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlocalStorage . location Services Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Calling Ġthis Ġmethod Ġrequires ĠNot ific are Ġto Ġhave Ġbeen Ġconfigured .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . location Services Enabled Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġhas Bluetooth Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(:: localStorage . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlocalStorage . bluetooth Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Calling Ġthis Ġmethod Ġrequires ĠNot ific are Ġto Ġhave Ġbeen Ġconfigured .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . bluetooth Enabled Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Pr erequisites () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġwe Ġkeep Ġthe Ġbluetooth Ġstate Ġupdated Ġin Ġthe ĠAPI . ĊĠĠĠĠĠĠĠ Ġupdate Bluetooth State ( has Beacon Support ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! has Foreground Location Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Known Location Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Device Ġlocation Ġcleared .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Regions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Be ac ons () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġclear Ġthe Ġdevice Ġlocation .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠKeep Ġtrack Ġof Ġthe Ġlocation Ġservices Ġstatus . ĊĠĠĠĠĠĠĠ ĠlocalStorage . location Services Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe Ġlocation Ġupdates . ĊĠĠĠĠĠĠĠ Ġservice Manager ?. enable Location Updates () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Beacon Support ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentered Regions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions . values . filter Ġ{ ĠlocalStorage . enter ed Regions . contains ( it . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enter ed Regions . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Detected Ġmultiple Ġentered Ġregions . ĠBe acon Ġmonitoring Ġis Ġlimited Ġto Ġa Ġsingle Ġregion Ġat Ġa Ġtime .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġentered Regions . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( region Ġ!= Ġnull ) Ġstart Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are Logger . info (" Location Ġupdates Ġenabled .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisable Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Pr erequisites () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠKeep Ġtrack Ġof Ġthe Ġlocation Ġservices Ġstatus . ĊĠĠĠĠĠĠĠ ĠlocalStorage . location Services Enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġlast Known Location Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġclear Regions () ĊĠĠĠĠĠĠĠ Ġclear Be ac ons () ĊĊĠĠĠĠĠĠĠ Ġservice Manager ?. disable Location Updates () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġwe Ġkeep Ġthe Ġbluetooth Ġstate Ġupdated Ġin Ġthe ĠAPI . ĊĠĠĠĠĠĠĠ Ġupdate Bluetooth State ( has Beacon Support ) ĊĊĠĠĠĠĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Device Ġlocation Ġcleared .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġclear Ġthe Ġdevice Ġlocation .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are Logger . info (" Location Ġupdates Ġdisabled .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠNot ific are Geo . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( listener : ĠNot ific are Geo . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠNot ific are ĠInternal ĠGeo ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Location Update ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! location . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġan Ġinvalid Ġlocation Ġupdate (${ location . latitude }, Ġ${ location . longitude }). ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġongoing Ġregion Ġsessions . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġupdate Region Sessions ( Not ific are Location ( location )) ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġpolygon Ġent ers Ġ& Ġexits . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Polygon Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġregion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentered Ġ= ĠlocalStorage . enter ed Regions . contains ( region . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinside Ġ= Ġregion . contains ( location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enter ed Ġ&& Ġinside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Region Enter ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Region Session ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Region Entered ( region ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( enter ed Ġ&& Ġ! inside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Region Exit ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Region Session ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Region Exit ed ( region ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġlocation Ġupdates Ġ& Ġloading Ġnew Ġge of ences . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġif Ġ( should Update Location ( location )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( Not ific are . require Context (), Ġ" location Ġupdated ", ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġa Ġreference Ġto Ġthe Ġlast Ġknown Ġlocation . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Known Location Ġ= Ġlocation ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= Ġget CountryCode ( location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . info (" Updating Ġdevice Ġlocation .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Location ( location , Ġcountry ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Loading Ġnearest Ġregions .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Nearest Regions ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġprocess Ġa Ġlocation Ġupdate .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Location Updated ( Not ific are Location ( location )) Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are . loy alty Integration ()?. on Pass book Location Re levance Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Region Enter ( identifiers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġidentifiers . forEach Ġ{ Ġregion Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠlocalStorage . mon itored Regions [ region Id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġan Ġenter Ġevent Ġfor Ġnon - cached Ġregion Ġ'$ region Id '. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( region . is Polygon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Handling Ġpolygon Ġregion Ġ(${ region . name }). ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! localStorage . enter ed Regions . contains ( region Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Del icate Cor outines Api :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠcheckNotNull ( service Manager ). getCurrent Location Async (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinside Ġ= Ġregion . contains ( location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inside ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Entered Ġthe Ġpolygon .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Region Enter ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Region Session ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġmonitoring Ġfor Ġbe ac ons Ġin Ġthis Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Monitoring Be ac ons ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Region Entered ( region ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Failed Ġto Ġdetermine Ġthe Ġcurrent Ġlocation .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġmonitoring Ġfor Ġbe ac ons Ġin Ġthis Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe 're Ġnot Ġinside Ġthe Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! localStorage . enter ed Regions . contains ( region Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Region Enter ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Region Session ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Region Entered ( region ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġmonitoring Ġfor Ġbe ac ons Ġin Ġthis Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Region Exit ( identifiers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġidentifiers . forEach Ġ{ Ġregion Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠlocalStorage . mon itored Regions [ region Id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġan Ġexit Ġevent Ġfor Ġnon - cached Ġregion Ġ'$ region Id '. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe 're Ġinside Ġthe Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( localStorage . enter ed Regions . contains ( region Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Region Exit ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Region Session ( region ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Region Exit ed ( region ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġmonitoring Ġfor Ġbe ac ons Ġin Ġthis Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Monitoring Be ac ons ( region ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Beacon Enter ( unique Id : ĠString , Ġmajor : ĠInt , Ġminor : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbe acon Ġ= ĠlocalStorage . mon itored Be ac ons . first OrNull Ġ{ Ġit . id Ġ== Ġunique Id Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġa Ġbe acon Ġenter Ġevent Ġfor Ġnon - cached Ġbe acon Ġ'$ unique Id '. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( minor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġthe Ġmain Ġregion . ĠThere 's Ġno Ġminor . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Beacon Session ( beacon ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġnormal Ġbe acon . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe 're Ġnot Ġinside Ġthe Ġbe acon Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! localStorage . enter ed Be ac ons . contains ( beacon . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Beacon Enter ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Beacon Entered ( beacon ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are . loy alty Integration ()?. on Pass book Location Re levance Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Beacon Exit ( unique Id : ĠString , Ġmajor : ĠInt , Ġminor : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbe acon Ġ= ĠlocalStorage . mon itored Be ac ons . first OrNull Ġ{ Ġit . id Ġ== Ġunique Id Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġa Ġbe acon Ġexit Ġevent Ġfor Ġnon - cached Ġbe acon Ġ'$ unique Id '. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( minor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġthe Ġmain Ġregion . ĠThere 's Ġno Ġminor . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Beacon Session ( beacon ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġnormal Ġbe acon . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe 're Ġinside Ġthe Ġbe acon Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( localStorage . enter ed Be ac ons . contains ( beacon . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Beacon Exit ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Beacon Exit ed ( beacon ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are . loy alty Integration ()?. on Pass book Location Re levance Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle R anging Be ac ons ( region Id : ĠString , Ġbe ac ons : ĠList < Beacon Service Manager . Beacon >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠlocalStorage . mon itored Regions [ region Id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġa Ġr anging Ġbe ac ons Ġevent Ġfor Ġnon - cached Ġregion Ġ'$ region Id '. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbe ac ons ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe acon Ġ= ĠlocalStorage . mon itored Be ac ons . first OrNull Ġ{ Ġit . major Ġ== Ġb . major Ġ&& Ġit . minor Ġ== Ġb . minor Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Received Ġa Ġr anging Ġbe ac ons Ġevent Ġfor Ġnon - cached Ġbe acon Ġ'${ b . major }:${ b . minor }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b . prox imity Ġ== Ġnull Ġ|| Ġb . prox imity Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġinvalid Ġprox imity Ġvalues . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon . prox imity Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . prox imity Ġ< ĠNot ific are Beacon . PRO X IM ITY _ NEAR _ DISTANCE Ġ-> ĠNot ific are Beacon . Prox imity . IM MEDI ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . prox imity Ġ< ĠNot ific are Beacon . PRO X IM ITY _ FAR _ DISTANCE Ġ-> ĠNot ific are Beacon . Prox imity . NEAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNot ific are Beacon . Prox imity . FAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġnc Be ac ons Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Beacon Sessions ( nc Be ac ons ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Be ac ons Range d ( region , Ġnc Be ac ons ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠNot ific are ĠGeo ĠIntegration ĊĊĠĠĠ Ġoverride Ġval Ġgeo Last Known Location : ĠLocation ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlast Known Location ĊĊĠĠĠ Ġoverride Ġval Ġgeo Entered Be ac ons : ĠList < Not ific are Geo Integration . Beacon > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! :: localStorage . isInitialized ) Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlocalStorage . enter ed Be ac ons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġid Ġ-> ĠlocalStorage . mon itored Be ac ons . first OrNull Ġ{ Ġit . id Ġ== Ġid Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġbe acon Ġ-> ĠNot ific are Geo Integration . Beacon ( beacon . major , Ġbe acon . minor ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ@ Throws ĊĠĠĠ Ġprivate Ġfun Ġcheck Pr erequisites () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Not ific are . is Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Not ific are Ġis Ġnot Ġready Ġyet .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNot ific are Not Ready Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= ĠNot ific are . application Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Not ific are Ġapplication Ġis Ġnot Ġyet Ġavailable .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNot ific are Application Unavailable Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( application . services [ Not ific are Application . Service Keys . LOCATION _ SERVICES ] Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Not ific are Ġlocation Ġfunctionality Ġis Ġnot Ġenabled .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNot ific are Service Unavailable Exception ( service Ġ= ĠNot ific are Application . Service Keys . LOCATION _ SERVICES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Not ific are . require Context (). package Manager . has System Feature ( PackageManager . FEATURE _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Location Ġfunctionality Ġrequires Ġlocation Ġhardware .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNot ific are Location Hardware Unavailable Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Update Location ( location : ĠLocation ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( last Known Location Ġ== Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġlocation . distance To ( last Known Location ) Ġ> ĠNot ific are . DEFAULT _ LOCATION _ UP DAT ES _ SM ALLE ST _ DIS PLACE MENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Location ( location : ĠLocation , Ġcountry : ĠString ?): ĠUnit Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Unable Ġto Ġupdate Ġlocation Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unable Ġto Ġupdate Ġlocation Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠUpdate Device Location Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġlocation . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġlocation . longitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalt itude Ġ= Ġlocation . altitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Accuracy Ġ= Ġlocation . accuracy . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġlocation . speed . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Ġ= Ġlocation . be aring . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġcountry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfloor Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Services Auth Status Ġ= Ġlocation Services Auth Status , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Services Accuracy Auth Ġ= Ġlocation Services Accuracy Auth , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ("/ device /${ device . id }", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġclear Location (): ĠUnit Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Cannot Ġupdate Ġlocation Ġauthorization Ġstate Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠUpdate Device Location Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalt itude Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Accuracy Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfloor Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Services Auth Status Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Services Accuracy Auth Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ("/ device /${ device . id }", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Bluetooth State ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Bluetooth Enabled Ġ== Ġenabled ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġupdate Ġthe Ġbluetooth Ġstate Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠUpdate Bluetooth Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Enabled Ġ= Ġenabled , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ("/ device /${ device . id }", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response ( object Ġ: ĠNot ific are Callback < Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Bluetooth Ġstate Ġupdated .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Bluetooth Enabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġupdate Ġthe Ġbluetooth Ġstate .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload Nearest Regions ( location : ĠLocation ): ĠUnit Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregions Ġ= ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ("/ region / by location /${ location . latitude }/${ location . longitude }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response De codable ( Fetch Regions Response :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. regions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Model () Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe ac ons Per Region : ĠMap < String , ĠList < Not ific are Beacon >> Ġ= Ġregions Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . major Ġ!= Ġnull Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġregion Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe ac ons Ġ= ĠNot ific are Request . Builder () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get (" beacon / for region /${ region . id }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response De codable ( Fetch Be ac ons Response :: class ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. be ac ons Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Model () Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion . id Ġto Ġbe ac ons Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor Regions ( regions ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġload Ġnearest Ġregions .", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmonitor Regions ( regions : ĠList < Not ific are Region >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Background Location Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Background Ġlocation Ġpermission Ġnot Ġgranted . ĠSk ipping Ġge of encing Ġfunctionality .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! has Prec ise Location Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Prec ise Ġlocation Ġpermission Ġnot Ġgranted . ĠSk ipping Ġge of encing Ġfunctionality .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Processing Ġthe Ġregion Ġdiffer ential Ġfor Ġmonitoring .") ĊĊĠĠĠĠĠĠĠ Ġ// ĠProcess Ġwhich Ġregions Ġshould Ġbe Ġremoved Ġfrom Ġmonitoring . ĊĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġmon itored Region Ġ-> Ġ! regions . any Ġ{ Ġit . id Ġ== Ġmon itored Region . id Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĠNot ific are Logger . debug (" Stopped Ġmonitoring Ġregion Ġ'${ it . name }'. ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġstale Regions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( st ale Regions . isEmpty ()) Ġreturn @ also ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġprocess Ġthe Ġregion Ġexit Ġappropriately . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġperform Ġthe Ġexit Ġtrigger , Ġstop Ġthe Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġstop Ġmonitoring Ġfor Ġbe ac ons Ġin Ġthis Ġregion . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Stopped Ġmonitoring Ġ${ st ale Regions . size } Ġregions .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Manager ?. stop Monitoring Regions ( st ale Regions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Region Exit ( st ale Regions . map Ġ{ Ġr Ġ-> Ġr . id Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġregions Ġfrom Ġthe Ġcache . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions Ġ= ĠlocalStorage . mon itored Regions . to Mutable Map (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstale Regions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠProcess Ġwhich Ġregions Ġshould Ġbe Ġmon itored . ĊĠĠĠĠĠĠĠ Ġregions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĠNot ific are Logger . debug (" Started Ġmonitoring Ġregion Ġ'${ it . name }'. ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġfresh Regions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fresh Regions . isEmpty ()) Ġreturn @ also ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Started Ġmonitoring Ġ${ fresh Regions . size } Ġregions .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Manager ?. start Monitoring Regions ( fresh Regions ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġregions Ġto Ġthe Ġcache . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions Ġ= ĠlocalStorage . mon itored Regions . to Mutable Map (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfresh Regions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( it . id , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Monitoring Be ac ons ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Beacon Support ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( region . major Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" The Ġregion Ġ'${ region . name }' Ġhas Ġnot Ġbeen Ġassigned Ġa Ġmajor .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ("/ beacon / for region /${ region . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response De codable ( Fetch Be ac ons Response :: class , Ġobject Ġ: ĠNot ific are Callback < Fetch Be ac ons Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠFetch Be ac ons Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe ac ons Ġ= Ġresult . be ac ons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . triggers Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Beacon Ġ= ĠNot ific are Beacon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġregion . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġregion . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmajor Ġ= Ġregion . major , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminor Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġtrack Ġof Ġthe Ġbe ac ons Ġbeing Ġmon itored . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Be ac ons Ġ= Ġbe ac ons Ġ+ Ġmain Beacon ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġmonitoring Ġthem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Service Manager ?. start Monitoring ( region , Ġbe ac ons ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġfetch Ġbe ac ons Ġfor Ġregion Ġ'${ region . name }'. ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Monitoring Be ac ons ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbe acon Service Manager ?. stop Monitoring ( region ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger Region Enter ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġprocess Ġregion Ġenter Ġtrigger Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠRegion Trigger Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ID Ġ= Ġdevice . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġregion . id , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ trigger / re . not ifica . trigger . region . Enter ", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response ( object Ġ: ĠNot ific are Callback < Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Regions Ġ= ĠlocalStorage . enter ed Regions Ġ+ Ġregion . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Triggered Ġregion Ġenter .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġtrigger Ġa Ġregion Ġenter .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger Region Exit ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġprocess Ġregion Ġexit Ġtrigger Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠRegion Trigger Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ID Ġ= Ġdevice . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġregion . id , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ trigger / re . not ifica . trigger . region . Exit ", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response ( object Ġ: ĠNot ific are Callback < Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Regions Ġ= ĠlocalStorage . enter ed Regions Ġ- Ġregion . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Triggered Ġregion Ġexit .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġtrigger Ġa Ġregion Ġexit .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger Beacon Enter ( beacon : ĠNot ific are Beacon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġprocess Ġbe acon Ġenter Ġtrigger Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠBe acon Trigger Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ID Ġ= Ġdevice . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Ġ= Ġbe acon . id , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ trigger / re . not ifica . trigger . beacon . Enter ", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response ( object Ġ: ĠNot ific are Callback < Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Be ac ons Ġ= ĠlocalStorage . enter ed Be ac ons Ġ+ Ġbe acon . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Triggered Ġbe acon Ġenter .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġtrigger Ġa Ġbe acon Ġenter .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger Beacon Exit ( beacon : ĠNot ific are Beacon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠNot ific are . device (). current Device Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġprocess Ġbe acon Ġexit Ġtrigger Ġwithout Ġa Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠBe acon Trigger Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ID Ġ= Ġdevice . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Ġ= Ġbe acon . id , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠNot ific are Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ trigger / re . not ifica . trigger . beacon . Exit ", Ġpayload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. response ( object Ġ: ĠNot ific are Callback < Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Be ac ons Ġ= ĠlocalStorage . enter ed Be ac ons Ġ- Ġbe acon . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Triggered Ġbe acon Ġexit .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . error (" Failed Ġto Ġtrigger Ġa Ġbe acon Ġexit .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Region Session ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Starting Ġsession Ġfor Ġregion Ġ'${ region . name }'. ") ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠNot ific are Region Session ( region ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlast Known Location ?. let Ġ{ ĠNot ific are Location ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . locations . add ( location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠlocalStorage . add Region Session ( session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Region Sessions ( location : ĠNot ific are Location ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Updating Ġregion Ġsessions .") ĊĠĠĠĠĠĠĠ ĠlocalStorage . update Region Sessions ( location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Region Session ( region : ĠNot ific are Region ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Stopping Ġsession Ġfor Ġregion Ġ'${ region . name }'. ") ĊĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠlocalStorage . region Sessions [ region . id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Skipping Ġregion Ġsession Ġend Ġsince Ġno Ġsession Ġexists Ġfor Ġregion Ġ'${ region . name }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSubmit Ġthe Ġevent Ġfor Ġprocessing . ĊĠĠĠĠĠĠĠ ĠNot ific are . events (). log Region Session ( session , Ġobject Ġ: ĠNot ific are Callback < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠUnit ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġsession Ġfrom Ġlocal Ġstorage . ĊĠĠĠĠĠĠĠ ĠlocalStorage . remove Region Session ( session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Beacon Session ( beacon : ĠNot ific are Beacon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠlocalStorage . mon itored Regions [ beacon . id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġstart Ġthe Ġsession Ġfor Ġbe acon Ġ'${ beacon . name }' Ġsince Ġthe Ġcorresponding Ġregion Ġis Ġnot Ġbeing Ġmon itored .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNot ific are Logger . debug (" Starting Ġsession Ġfor Ġbe acon Ġ'${ beacon . name }'. ") ĊĠĠĠĠĠĠĠ ĠlocalStorage . add Beacon Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Beacon Session ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Id Ġ= Ġregion . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠDate (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe ac ons Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Beacon Sessions ( be ac ons : ĠList < Not ific are Beacon >) Ġ{ ĊĠĠĠĠĠĠĠ ĠlocalStorage . update Beacon Session ( be ac ons , Ġlast Known Location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Beacon Session ( beacon : ĠNot ific are Beacon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠlocalStorage . mon itored Regions [ beacon . id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Cannot Ġstart Ġthe Ġsession Ġfor Ġbe acon Ġ'${ beacon . name }' Ġsince Ġthe Ġcorresponding Ġregion Ġis Ġnot Ġbeing Ġmon itored .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠlocalStorage . beacon Sessions [ region . id ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Skipping Ġbe acon Ġsession Ġend Ġsince Ġno Ġsession Ġexists Ġfor Ġregion Ġ'${ region . name }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSubmit Ġthe Ġevent Ġfor Ġprocessing . ĊĠĠĠĠĠĠĠ ĠNot ific are . events (). log Beacon Session ( session , Ġobject Ġ: ĠNot ific are Callback < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠUnit ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : ĠException ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġsession Ġfrom Ġlocal Ġstorage . ĊĠĠĠĠĠĠĠ ĠlocalStorage . remove Beacon Session ( session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Regions () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġcached Ġregions . ĊĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Regions Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Regions Ġ= Ġempty Set () ĊĠĠĠĠĠĠĠ ĠlocalStorage . clear Region Sessions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġmonitoring Ġall Ġregions . ĊĠĠĠĠĠĠĠ Ġservice Manager ?. clear Monitoring Regions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Be ac ons () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġcached Ġbe ac ons . ĊĠĠĠĠĠĠĠ ĠlocalStorage . mon itored Be ac ons Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ ĠlocalStorage . enter ed Be ac ons Ġ= Ġempty Set () ĊĠĠĠĠĠĠĠ ĠlocalStorage . clear Beacon Sessions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġmonitoring Ġall Ġbe ac ons . ĊĠĠĠĠĠĠĠ Ġbe acon Service Manager ?. clear Monitoring () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget CountryCode ( location : ĠLocation ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo coder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get From Location ( location . latitude , Ġlocation . longitude , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . country Code ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNot ific are Logger . warning (" Unable Ġto Ġreverse Ġgeo code Ġthe Ġlocation .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ