package Ġcom . github . av ian ey . android 3 0 location ration al Ċ Ċ import Ġandroid . Manifest . permission . ACCESS _ BACKGROUND _ LOCATION Ċ import Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . pm . PackageManager . PERMISSION _ GRAN TED Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . IN VISIBLE Ċ import Ġandroid . widget . View Switch er Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġrefresh UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġrefresh UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgrant Access F ine Location ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Location ĠAccess ĠRational ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Explain Ġwhy Ġyou Ġneed ĠLocation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok , Ġgrant ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( ACCESS _ F INE _ LOCATION ), ĠREQUEST _ ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" No , Ġnot Ġyet ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġgrant Access Background Location ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Background ĠLocation ĠAccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Explain Ġwhy Ġyou Ġneed ĠBackground ĠLocation Ġaccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok , Ġgrant ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( ACCESS _ BACKGROUND _ LOCATION ), ĠREQUEST _ ACCESS _ BACKGROUND _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" No , Ġnot Ġyet ") Ġ{ Ġd , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġforeground ĊĠĠĠĠĠĠĠ ĠfindViewById < View Switch er >( R . id . fg _ location ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( this , ĠACCESS _ F INE _ LOCATION ) Ġ== ĠPER MISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . display ed Child Ġ= ĠINDEX _ LABEL _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . display ed Child Ġ= ĠINDEX _ BUTTON _ GRANT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġbackground ĊĠĠĠĠĠĠĠ ĠfindViewById < View Switch er >( R . id . bg _ location ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getChild At ( INDEX _ BUTTON _ GRANT ). isEnabled Ġ= ĠActivity Compat . check Self Permission ( this , ĠACCESS _ F INE _ LOCATION ) Ġ== ĠPER MISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ< Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Activity Compat . check Self Permission ( this , ĠACCESS _ BACKGROUND _ LOCATION ) Ġ== ĠPER MISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . display ed Child Ġ= ĠINDEX _ LABEL _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . display ed Child Ġ= ĠINDEX _ BUTTON _ GRANT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ ACCESS _ F INE _ LOCATION Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ ACCESS _ BACKGROUND _ LOCATION Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINDEX _ BUTTON _ GRANT Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINDEX _ LABEL _ GRAN TED Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ Ċ }