package Ġre k ab . app . background _ locator Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Aware Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Plugin Binding Ċ import Ġio . flutter . plugin . common . Binary Messenger Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġio . flutter . plugin . common . Plugin Registry Ċ import Ġre k ab . app . background _ locator . plug g ables . Dispose Plug gable Ċ import Ġre k ab . app . background _ locator . plug g ables . Init Plug gable Ċ Ċ class ĠBackground Locator Plugin ĊĠĠĠ Ġ: ĠMethod Call Handler , ĠFlutter Plugin , ĠPlugin Registry . New Intent Listener , ĠActivity Aware Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġchannel : ĠMethod Channel ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsend Result With Delay ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠResult ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay : ĠLong ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . main Looper . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( it ). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġdelay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Locator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs : ĠMap < Any , ĠAny >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠResult ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Is olate Holder Service . is Service Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġservice Ġis Ġrunning Ġalready ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Background Locator Plugin ", Ġ" Locator Ġservice Ġis Ġalready Ġrunning ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Background Locator Plugin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Ġlocator Ġwith Ġ${ Preferences Manager . getLocation Client ( context )} Ġclient " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Handle Ġ= Ġargs [ Keys . ARG _ CALLBACK ] Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Manager . set Callback Handle ( context , ĠKeys . CALLBACK _ HANDLE _ KEY , Ġcallback Handle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Callback Ġ= Ġargs [ Keys . ARG _ NOTIFICATION _ CALLBACK ] Ġas ? ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Manager . set Callback Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . NOTIFICATION _ CALLBACK _ HANDLE _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĠInit Plug gable Ġwith Ġinit Callback Handle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( args [ Keys . ARG _ INIT _ CALLBACK ] Ġas ? ĠLong )?. let Ġ{ Ġinit Callback Handle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinit Plug gable Ġ= ĠInit Plug gable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Plug gable . set Callback ( context , Ġinit Callback Handle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġinit Ġdata Ġif Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( args [ Keys . ARG _ INIT _ DATA _ CALLBACK ] Ġas ? ĠMap < *, Ġ* >) ?. let Ġ{ Ġinit Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Plug gable . set Init Data ( context , Ġinit Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall ĠDispose Plug gable Ġwith Ġdispose Callback Handle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( args [ Keys . ARG _ DIS POSE _ CALLBACK ] Ġas ? ĠLong )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdispose Plug gable Ġ= ĠDispose Plug gable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Plug gable . set Callback ( context , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġargs [ Keys . ARG _ SETTINGS ] Ġas ĠMap < *, Ġ*> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . check Self Permission ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠPackage Manager . PERMISSION _ DEN IED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ"' register Locator ' Ġrequires Ġthe ĠACCESS _ F INE _ LOCATION Ġpermission ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. error ( msg , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Is olate Service ( context , Ġsettings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġknow Ġwhen Ġthe Ġservice Ġbin ded Ġexactly , Ġthere Ġis Ġsome Ġdelay Ġbetween Ġstarting Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġservice Ġand Ġit 's Ġbinding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHEL P ĠW ANT ED : ĠI Ġcouldn 't Ġfind Ġa Ġbetter Ġway Ġto Ġhandle Ġthis , Ġso Ġany Ġhelp Ġor Ġsuggestion Ġwould Ġbe Ġappreciated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Result With Delay ( context , Ġresult , Ġtrue , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġstart Is olate Service ( context : ĠContext , Ġsettings : ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Background Locator Plugin ", Ġ" start Is olate Service ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠI sol ate Holder Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠI sol ate Holder Service . ACTION _ START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ CHANNEL _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ CHANNEL _ NAME ] Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ TITLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ TITLE ] Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ MSG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ MSG ] Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ BIG _ MSG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ BIG _ MSG ] Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ ICON , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ ICON ] Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ ICON _ COLOR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ ICON _ COLOR ] Ġas ? ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Keys . SETTINGS _ INTERVAL , Ġsettings [ Keys . SETTINGS _ INTERVAL ] Ġas ? ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Keys . SETTINGS _ AC CUR ACY , Ġsettings [ Keys . SETTINGS _ AC CUR ACY ] Ġas ? ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ DISTANCE _ FILTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ DISTANCE _ FILTER ] Ġas ? ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . containsKey ( Keys . SETTINGS _ ANDROID _ WAKE _ LOCK _ TIME )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ WAKE _ LOCK _ TIME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings [ Keys . SETTINGS _ ANDROID _ WAKE _ LOCK _ TIME ] Ġas ? ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preferences Manager . get Callback Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . INIT _ CALLBACK _ HANDLE _ KEY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Keys . SETTINGS _ INIT _ PLU GG ABLE , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preferences Manager . get Callback Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . DIS POSE _ CALLBACK _ HANDLE _ KEY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Keys . SETTINGS _ DIS POS ABLE _ PLU GG ABLE , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . start Foreground Service ( context , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstop Is olate Service ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠI sol ate Holder Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠI sol ate Holder Service . ACTION _ SHUT DOWN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . start Foreground Service ( context , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġinitialize Service ( context : ĠContext , Ġargs : ĠMap < Any , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Handle : ĠLong Ġ= Ġargs [ Keys . ARG _ CALLBACK _ DISPATCH ER ] Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Callback Dispatcher Handle ( context , Ġcallback Handle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġun Register Plugin ( context : ĠContext , Ġresult : ĠResult ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Is olate Holder Service . is Service Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġservice Ġis Ġnot Ġrunning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Background Locator Plugin ", Ġ" Locator Ġservice Ġis Ġnot Ġrunning , Ġnothing Ġto Ġstop ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Is olate Service ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġknow Ġwhen Ġthe Ġservice Ġdet ached Ġexactly , Ġthere Ġis Ġsome Ġdelay Ġbetween Ġstopping Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġservice Ġand Ġit 's Ġdet achment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHEL P ĠW ANT ED : ĠI Ġcouldn 't Ġfind Ġa Ġbetter Ġway Ġto Ġhandle Ġthis , Ġso Ġany Ġhelp Ġor Ġsuggestion Ġwould Ġbe Ġappreciated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Result With Delay ( context , Ġresult , Ġtrue , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Service Running ( result : ĠResult ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( Is olate Holder Service . is Service Running ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Notification Text ( context : ĠContext , Ġargs : ĠMap < Any , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠI sol ate Holder Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠI sol ate Holder Service . ACTION _ UPDATE _ NOTIFICATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . containsKey ( Keys . SETTINGS _ ANDROID _ NOTIFICATION _ TITLE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ TITLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ TITLE ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . containsKey ( Keys . SETTINGS _ ANDROID _ NOTIFICATION _ MSG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ MSG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ MSG ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . containsKey ( Keys . SETTINGS _ ANDROID _ NOTIFICATION _ BIG _ MSG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . SETTINGS _ ANDROID _ NOTIFICATION _ BIG _ MSG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ Keys . SETTINGS _ ANDROID _ NOTIFICATION _ BIG _ MSG ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . start Foreground Service ( context , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Callback Dispatcher Handle ( context : ĠContext , Ġhandle : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( Keys . SHARED _ PREFER ENCES _ KEY , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( Keys . CALLBACK _ DISPATCH ER _ HANDLE _ KEY , Ġhandle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġregister After Boot ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠPreferences Manager . get Settings ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugin Ġ= ĠBackground Locator Plugin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . context Ġ= Ġcontext ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Service ( context , Ġsettings ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . check Self Permission ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Is olate Service ( context , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ INITIAL IZE _ SERVICE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠMap < Any , ĠAny > Ġ= Ġcall . arguments () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġcallback Ġdispatcher Ġto Ġuse Ġit Ġwhen Ġdevice Ġreboot s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Manager . save Callback Dispatcher ( context !! , Ġargs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Service ( context !! , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ REGISTER _ LOCATION _ UPDATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠMap < Any , ĠAny > Ġ= Ġcall . arguments () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġsetting Ġto Ġuse Ġit Ġwhen Ġdevice Ġreboot s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Manager . save Settings ( context !! , Ġargs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Locator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ UN _ REGISTER _ LOCATION _ UPDATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Register Plugin ( context !! , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ IS _ REGISTER _ LOCATION _ UPDATE Ġ-> Ġis Service Running ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ IS _ SERVICE _ RUNNING Ġ-> Ġis Service Running ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . METHOD _ PLUGIN _ UPDATE _ NOTIFICATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Is olate Holder Service . is Service Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠMap < Any , ĠAny > Ġ= Ġcall . arguments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Notification Text ( context !! , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresult . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Attached To Engine ( binding . application Context , Ġbinding . binary Messenger ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Attached To Engine ( context : ĠContext , Ġmess enger : ĠBinary Messenger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplugin Ġ= ĠBackground Locator Plugin () ĊĠĠĠĠĠĠĠ Ġplugin . context Ġ= Ġcontext ĊĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( messenger , ĠKeys . CHANNEL _ ID ) ĊĠĠĠĠĠĠĠ Ġchannel ?. set MethodCall Handler ( plugin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( intent ?. action Ġ!= ĠKeys . NOTIFICATION _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġnot Ġour Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠI sol ate Holder Service . get Binary Messenger ( context )?. let Ġ{ Ġbinary Messenger Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Callback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Manager . get Callback Handle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . NOTIFICATION _ CALLBACK _ HANDLE _ KEY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( notification Callback Ġ!= Ġnull Ġ&& ĠI sol ate Holder Service . background Engine Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Channel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinary Messenger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . BACKGROUND _ CHANNEL _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. main Looper ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Channel . invoke Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . BCM _ NOTIFICATION _ CLICK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map Of ( Keys . ARG _ NOTIFICATION _ CALLBACK Ġto Ġnotification Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re attached To Activity For Config Changes ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Activity ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity ĊĠĠĠĠĠĠĠ Ġbinding . add On New Intent Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity For Config Changes () Ġ{ ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ