package Ġcom . ra que z ha . he o gr api ya Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . ra que z ha . he o gr api ya . databinding . Activity Her em aps Binding Ċ import Ġjava . util . Arrays Ċ Ċ open Ġclass ĠHere Maps Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Her em aps Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Her em aps Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmap Fragment View : ĠMap Fragment View ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( map Fragment View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmap Fragment View !!. onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( map Fragment View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmap Fragment View !!. on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Map Fragment View () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAll Ġpermission Ġrequests Ġare Ġbeing Ġhandled . ĠCreate Ġmap Ġfragment Ġview . ĠPlease Ġnote ĊĠĠĠĠĠĠĠ Ġ// Ġthe ĠHERE ĠMobile ĠSDK Ġrequires Ġall Ġpermissions Ġdefined Ġabove Ġto Ġoperate Ġproperly . ĊĠĠĠĠĠĠĠ Ġmap Fragment View Ġ= ĠMap Fragment View ( this , Ġbinding ) ĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmap Fragment View ?. on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġmap Fragment View ?. on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġmap Fragment View ?. on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġthe Ġdynamically Ġcontrolled Ġpermissions Ġand Ġrequests Ġmissing Ġpermissions Ġfrom Ġend Ġuser . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmissing Permissions : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġall Ġrequired Ġdynamic Ġpermissions ĊĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin ĠREQUIRED _ SDK _ PERMISSION S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠContext Compat . check Self Permission ( this , Ġpermission ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Permissions . add ( permission ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( missing Permissions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġall Ġmissing Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġmissing Permissions . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , ĠREQUEST _ CODE _ ASK _ PERMISSION S ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrant Results Ġ= ĠInt Array ( REQUIRED _ SDK _ PERMISSION S . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . fill ( grant Results , ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ ASK _ PERMISSION S , ĠREQUIRED _ SDK _ PERMISSION S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ ASK _ PERMISSION S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġpermissions . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ index ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexit Ġthe Ġapp Ġif Ġone Ġpermission Ġis Ġnot Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġ" Required Ġpermission Ġ'" Ġ+ Ġpermissions [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"' Ġnot Ġgranted , Ġexiting ", ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-- index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġpermissions Ġwere Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Map Fragment View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġrequest Ġcode ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ ASK _ PERMISSION S Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPermissions Ġthat Ġneed Ġto Ġbe Ġexplicitly Ġrequested Ġfrom Ġend Ġuser . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUIRED _ SDK _ PERMISSION S Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }