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 . Activity Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Sender Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ 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 . 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 . Rem inders Activity Ċ 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 . utils . set Display Home As Up Enabled Ċ import Ġorg . k oin . android . ext . android . inject Ċ Ċ const Ġval ĠG EOF ENCE _ RADIUS _ IN _ METER S Ġ= Ġ 1 0 0 f Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Save Reminder Fragment " Ċ 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 Ċ private Ġconst Ġval ĠREQUEST _ T URN _ DEVICE _ LOCATION _ ON Ġ= Ġ 2 9 Ċ private Ġconst Ġval ĠACTION _ GE OF ENCE _ EVENT Ġ= Ġ" Save Reminder Fragment . project 4 . action . ACTION _ GE OF ENCE _ EVENT " Ċ Ċ 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 Ġcont xt : ĠContext ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġge of encing Client : ĠGe of encing Client ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnew Reminder : ĠRem inder Data Item ĊĊĠĠĠ Ġprivate Ġvar ĠresultCode Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġge ofence Pending Intent : ĠPending Intent Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( cont xt , ĠGe ofence Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠACTION _ GE OF ENCE _ EVENT ĊĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( cont xt , Ġ 0 , Ġintent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrunning Q Or Later Ġ= ĊĠĠĠĠĠĠĠ Ġandroid . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠSolution Ġfor ĠApp Crash Ġafter Ġlo sing Ġcontext ĊĠĠĠ Ġhttps :// knowledge . ud acity . com / questions / 5 9 5 7 9 8 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġcont xt Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġcont xt Ġ= Ġrequire Context () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ( cont xt ) ĊĊĠĠĠĠĠĠĠ Ġ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 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠNavigate Ġto Ġanother Ġfragment Ġto Ġget Ġthe Ġuser Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Select Location () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 . latitude . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġ_ viewModel . longitude . value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Reminder Ġ= ĠRem inder Data Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permissions And Start Ge of encing () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Select Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ viewModel . navigation Command . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Command . To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSave Reminder Fragment Directions . action Save Reminder Fragment To Select Location Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġadd New Ge ofence () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ viewModel . validate And Save Reminder ( new Reminder )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġge ofence Ġ= ĠGe ofence . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set RequestId ( new Reminder . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Circular Region ( new Reminder . latitude !! , Ġnew Reminder . 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 ofence . GE OF ENCE _ TRANS ITION _ 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 Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Add ĠGe ofence ", Ġge ofence . requestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFailed Ġto Ġadd Ġge of ences . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont xt , ĠR . string . ge of ences _ not _ added , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( it . message Ġ!= Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġit . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . on Clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Device Location Settings And Start Ge ofence ( resolve : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 ( cont xt ) ĊĠĠĠĠĠĠĠ Ġ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 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLocation Ġsettings Ġare Ġnot Ġsatisfied , Ġbut Ġthis Ġcan Ġbe Ġfixed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġby Ġshowing Ġthe Ġuser Ġa Ġdialog . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġthe Ġdialog Ġby Ġcalling Ġstart Resolution For Result (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġcheck Ġthe Ġresult Ġin Ġon Activity Result (). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent Sender For Result ( exception . resolution . intent Sender , ĠREQUEST _ T URN _ DEVICE _ LOCATION _ ON , Ġnull , Ġ 0 , Ġ 0 , Ġ 0 , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( send Ex : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error Ġgetting Ġlocation Ġsettings Ġresolution : Ġ" Ġ+ Ġsend Ex . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . 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 New Ge ofence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Target Api ( 2 9 ) ĊĠĠĠ Ġprivate Ġfun Ġforeground And Background Location Permission Approved (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforeground Location Approved Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont xt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont xt , Ġ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 ĊĊĠĠĠĠĠĠĠ Ġ// ĠElse Ġrequest Ġthe Ġpermission ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġprovides Ġthe Ġresult [ LOCATION _ PERMISSION _ INDEX ] ĊĠĠĠĠĠĠĠ Ġvar Ġpermissions Array Ġ= ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĊĠĠĠĠĠĠĠ ĠresultCode Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Q Or Later Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġprovides Ġthe Ġresult [ BACKGROUND _ LOCATION _ PERMISSION _ INDEX ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ T URN _ DEVICE _ LOCATION _ ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġrely Ġon Ġthe Ġresult Ġcode , Ġbut Ġjust Ġcheck Ġthe Ġlocation Ġsetting Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠresultCode Ġ&& Ġgrant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Device Location Settings And Start Ge ofence () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . save Reminder Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . location _ required _ error , ĠSn ackbar . LENGTH _ IN DEFIN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). setAction ( android . R . string . ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Foreground And Background Location Permissions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 () ĊĠĠĠ Ġ} Ċ } Ċ