Ċ Ċ package Ġse . w art ing . permissions ui . background location Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Build Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġdev . mar cel p into . permission k tx . Permission Ċ import Ġdev . mar cel p into . permission k tx . Permission Status Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . launch Ċ Ċ internal Ġenum Ġclass ĠList State Ġ{ ĊĠĠĠ ĠDisabled , ĊĠĠĠ ĠEnabled , ĊĠĠĠ ĠEnabled R ationale , ĊĠĠĠ ĠComplete , Ċ } Ċ Ċ internal Ġdata Ġclass ĠBackground Location Tutorial ViewState ( ĊĠĠĠ Ġval ĠprojectName : ĠView State < Required Permissions > Ġ= ĠView State . Loading (), Ċ ) Ċ Ċ internal Ġsealed Ġclass ĠBackground Location Tutorial View Effect Ġ{ ĊĠĠĠ Ġclass ĠStatus Updated ( val Ġstatuses : ĠRequired Permissions ) Ġ: ĠBackground Location Tutorial View Effect () ĊĠĠĠ Ġobject ĠLoading Ġ: ĠBackground Location Tutorial View Effect () Ċ } Ċ Ċ internal Ġdata Ġclass ĠRequired Permissions ( ĊĠĠĠ Ġval Ġpermissions Needed For F ine Location : ĠList < String >, ĊĠĠĠ Ġval Ġfine G ps Permission : ĠPermission Status , ĊĠĠĠ Ġval Ġco arse G ps Permission : ĠPermission Status , ĊĠĠĠ Ġval Ġbackground G ps Permission : ĠPermission Status ? Ċ ) Ċ Ċ internal Ġclass ĠBackground Location Tutorial ViewModel Ġ: ĠViewModel (), ĊĠĠĠ ĠState ViewModel < Background Location Tutorial ViewState , ĠBackground Location Tutorial View Effect > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĊĠĠĠĠĠĠĠ ĠMutable State Flow ( Background Location Tutorial ViewState ( projectName Ġ= ĠView State . Loading ())) ĊĊĠĠĠ Ġoverride Ġval Ġui State : ĠState Flow < Background Location Tutorial ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ state ĊĊĠĠĠ Ġprivate Ġval Ġaccess F ine Location Permission Flow Ġ= ĊĠĠĠĠĠĠĠ ĠPermission ( Manifest . permission . ACCESS _ F INE _ LOCATION ). status Flow ĊĠĠĠ Ġprivate Ġval Ġaccess Co arse Location Permission Flow Ġ= ĊĠĠĠĠĠĠĠ ĠPermission ( Manifest . permission . ACCESS _ CO AR SE _ LOCATION ). status Flow ĊĠĠĠ Ġprivate Ġval Ġaccess Background Location Permission Flow Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPermission ( Manifest . permission . ACCESS _ BACKGROUND _ LOCATION ). status Flow ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Of ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcombine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess F ine Location Permission Flow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Co arse Location Permission Flow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Background Location Permission Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġfine G ps Permission , Ġco arse G ps Permission , Ġbackground G ps Permission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequired Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Needed For F ine Location Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfine G ps Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco arse G ps Permission ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). filter Ġ{ Ġ! it . is Granted () Ġ}. map Ġ{ Ġit . type . name Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfine G ps Permission Ġ= Ġfine G ps Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco arse G ps Permission Ġ= Ġco arse G ps Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground G ps Permission Ġ= Ġbackground G ps Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce (_ state . value , ĠBackground Location Tutorial View Effect . Status Updated ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreduce ( ĊĠĠĠĠĠĠĠ Ġold ViewState : ĠBackground Location Tutorial ViewState , ĊĠĠĠĠĠĠĠ Ġview Effect : ĠBackground Location Tutorial View Effect , ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ( view Effect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBackground Location Tutorial View Effect . Status Updated Ġ-> Ġold ViewState . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectName Ġ= ĠView State . Success ( view Effect . statuses ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠBackground Location Tutorial View Effect . Loading Ġ-> Ġold ViewState . copy ( projectName Ġ= ĠView State . Loading ()) ĊĠĠĠ Ġ} Ċ } Ċ