package Ġcom . ud acity . project 4 . location rem inders . sa ver em inder Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Sender Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġcom . google . android . gms . common . api . Res olvable ApiException Ċ import Ġcom . google . android . gms . location .* Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . ud acity . project 4 . Build Config Ċ import Ġcom . ud acity . project 4 . R Ċ import Ġcom . ud acity . project 4 . base . Base Fragment Ċ import Ġcom . ud acity . project 4 . base . Navigation Command Ċ import Ġcom . ud acity . project 4 . databinding . Fragment Save Reminder Binding Ċ import Ġcom . ud acity . project 4 . location rem inders . ge ofence . Ge ofence Broadcast Receiver Ċ import Ġcom . ud acity . project 4 . location rem inders . rem inders list . Reminder Data Item Ċ import Ġcom . ud acity . project 4 . location rem inders . sa ver em inder . select reminder location . Select Location Fragment Ċ import Ġcom . ud acity . project 4 . utils . set Display Home As Up Enabled Ċ import Ġorg . k oin . android . ext . android . inject ĊĊ Ċ class ĠSave Reminder Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġ// Get Ġthe Ġview Ġmodel Ġthis Ġtime Ġas Ġa Ġsingle Ġto Ġbe Ġshared Ġwith Ġthe Ġanother Ġfragment ĊĠĠĠ Ġoverride Ġval Ġ_ viewModel : ĠSave Reminder ViewModel Ġby Ġinject () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Save Reminder Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġge of encing Client : ĠGe of encing Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ Ġreminder Data Item : ĠRem inder Data Item ĊĠĠ Ġ// Ġprivate Ġvar Ġcurrent Reminder : ĠRem inder Data Item ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġperm Snackbar : ĠSn ackbar ? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġval Ġrunning Q Or Later Ġ= Ġandroid . os . Build . VERSION . SDK _ INT Ġ>= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . os . Build . VERSION _ CODES . Q ĊĊĠĠĠ Ġprivate Ġval Ġge ofence Pending Intent : ĠPending Intent Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( require Context (), ĠGe ofence Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠACTION _ GE OF ENCE _ EVENT ĊĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( require Context (), Ġ 0 , Ġintent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ save _ reminder , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= Ġ_ viewModel ĊĠĠĠĠĠĠĠ Ġge of encing Client Ġ= ĠLocation Services . get Ge of encing Client ( require Activity ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġbinding . select Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . navigation Command . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Command . To ( Save Reminder Fragment Directions . action Save Reminder Fragment To Select Location Fragment ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . selected Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . navigation Command . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Command . To ( Save Reminder Fragment Directions . action Save Reminder Fragment To Select Location Fragment ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . save Reminder . setOnClickListener Ġ{ Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġ_ viewModel . reminder Title . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġ_ viewModel . reminder Description . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġ_ viewModel . reminder Selected Location Str . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġ_ viewModel . lat Lng . value ?. latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġ_ viewModel . lat Lng . value ?. longitude ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Data Item Ġ= ĠRem inder Data Item ( title , Ġdescription , Ġlocation , Ġlatitude , Ġlongitude ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif (_ viewModel . validate Entered Data ( reminder Data Item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permissions And Start Ge of encing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠ Ġ// Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions And Start Ge of encing () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( foreground And Background Location Permission Approved ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Foreground And Background Location Permissions () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ LOCATION _ SETTING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence ( true ) Ġ// o jo ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 2 9 ) ĊĠĠĠ Ġfun Ġforeground And Background Location Permission Approved (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforeground Location Approved Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġval Ġbackground Permission Approved Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( running Q Or Later ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġforeground Location Approved Ġ&& Ġbackground Permission Approved ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 2 9 ) ĊĠĠĠ Ġprivate Ġfun Ġrequest Foreground And Background Location Permissions () Ġ{ ĊĠĠĠĠĠĠĠĠ Ġif Ġ( foreground And Background Location Permission Approved ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġpermissions Array Ġ= ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġval ĠresultCode Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Q Or Later Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Array Ġ+= ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ FO REG ROUND _ AND _ BACKGROUND _ PERMISSION _ RESULT _ CODE ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠREQUEST _ FO REG ROUND _ ONLY _ PERMISSION S _ REQUEST _ CODE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Request Ġforeground Ġonly Ġlocation Ġpermission ") ĊĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultCode ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isEmpty () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ Select Location Fragment . Constants . LOCATION _ PERMISSION _ INDEX ] Ġ== ĠPackage Manager . PERMISSION _ DEN IED Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( request Code Ġ== ĠSelect Location Fragment . Constants . REQUEST _ FO REG ROUND _ AND _ BACKGROUND _ PERMISSION _ RESULT _ CODE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ Select Location Fragment . Constants . BACKGROUND _ LOCATION _ PERMISSION _ INDEX ] Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ DEN IED )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperm Snackbar Ġ= ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . permission _ den ied _ explanation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . settings ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . from Parts (" package ", ĠBuild Config . APPLICATION _ ID , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperm Snackbar !!. show () ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence () ĠĠ Ġ// fix - flow - sa ver em inder ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Device Location Settings And Start Ge ofence ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// reminder Data Item : ĠRem inder Data Item ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Request Ġ= ĠLocation Request . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠLocation Request . PRIORITY _ LOW _ POWER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠLocation Settings Request . Builder (). add Location Request ( location Request ) ĊĠĠĠĠĠĠĠ Ġval Ġsettings Client Ġ= ĠLocation Services . get Settings Client ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġlocation Settings Response Task Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Client . check Location Settings ( builder . build ()) ĊĠĠĠĠĠĠĠ Ġlocation Settings Response Task . add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠRes olvable ApiException Ġ&& Ġresolve ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . start Resolution For Result ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ LOCATION _ SETTING Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . resolution . intent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ LOCATION _ SETTING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( send Ex : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Ex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error Ġgetting Ġlocation Ġsettings Ġresolution : Ġ" Ġ+ Ġsend Ex . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequire View (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . location _ required _ error , ĠSn ackbar . LENGTH _ IN DEFIN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). setAction ( android . R . string . ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Settings Response Task . add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ge ofence For Reminder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġadd Ge ofence For Reminder () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ viewModel . validate Entered Data ( reminder Data Item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ge ofence Data Ġ= Ġreminder Data Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġge ofence Ġ= ĠGe ofence . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set RequestId ( current Ge ofence Data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Circular Region ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ge ofence Data . latitude !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ge ofence Data . longitude !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG EOF ENCE _ RADIUS _ IN _ METER S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Expiration Duration ( Ge ofence . NE VER _ EXPI RE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transition Types ( Ge ofence . GE OF ENCE _ TRANS ITION _ ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġge of encing Request Ġ= ĠGe of encing Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Trigger ( Ge of encing Request . INITIAL _ TRIGGER _ ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Ge ofence ( ge ofence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġge of encing Client . add Ge of ences ( ge of encing Request , Ġge ofence Pending Intent ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Add ĠGe ofence ", Ġge ofence . requestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . validate And Save Reminder ( current Ge ofence Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . show Sn ackBar Int . value Ġ= ĠR . string . ge ofence _ enter ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ// make Ġsure Ġto Ġclear Ġthe Ġview Ġmodel Ġafter Ġdestroy , Ġas Ġit 's Ġa Ġsingle Ġview Ġmodel . ĊĠĠĠĠĠĠĠ Ġ_ viewModel . on Clear () ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ FO REG ROUND _ AND _ BACKGROUND _ PERMISSION _ RESULT _ CODE Ġ= Ġ 3 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ FO REG ROUND _ ONLY _ PERMISSION S _ REQUEST _ CODE Ġ= Ġ 3 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ T URN _ DEVICE _ LOCATION _ ON Ġ= Ġ 2 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ LOCATION _ SETTING Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Save Reminder Fragment " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ GE OF ENCE _ EVENT Ġ= Ġ" Save Reminder Fragment . project 4 . action . ACTION _ GE OF ENCE _ EVENT " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG EOF ENCE _ RADIUS _ IN _ METER S Ġ= Ġ 1 0 0 f ĊĠĠĠ Ġ} Ċ }