package Ġcom . sa arth ak . running tracker app . ui . fragments Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . sa arth ak . running tracker app . R Ċ import Ġcom . sa arth ak . running tracker app . ui . adapters . Run Adapter Ċ import Ġcom . sa arth ak . running tracker app . ui . view models . Main ViewModel Ċ import Ġcom . sa arth ak . running tracker app . util . Constants . REQ _ CODE _ LOC N _ PERM Ċ import Ġcom . sa arth ak . running tracker app . util . Sort Type Ċ import Ġcom . sa arth ak . running tracker app . util . Utilities Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . android . synt hetic . main . fragment _ run .* Ċ import Ġpub . dev rel . eas yper missions . AppSettings Dialog Ċ import Ġpub . dev rel . eas yper missions . Easy Permissions Ċ Ċ @ Android EntryPoint Ċ class ĠRun Fragment : ĠFragment ( R . layout . fragment _ run ), ĠEasy Permissions . Permission Callbacks Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrun Adapter : ĠRun Adapter ĊĊĠĠĠ Ġprivate Ġfun Ġreq Permissions (){ ĊĠĠĠĠĠĠĠ Ġif ( Utilities . loc n Permissions Check ( require Context ())) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( this , Ġ" You Ġneed Ġto Ġaccept Ġthe Ġlocation Ġpermissions Ġfor Ġthe Ġapp Ġto Ġwork Ġproperly ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQ _ CODE _ LOC N _ PERM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( this , Ġ" You Ġneed Ġto Ġaccept Ġthe Ġlocation Ġpermissions Ġfor Ġthe Ġapp Ġto Ġwork Ġproperly ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQ _ CODE _ LOC N _ PERM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Rv () Ġ= Ġruns _ rv . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Adapter Ġ= ĠRun Adapter () ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġrun Adapter ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( viewModel . sort Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Type . DATE Ġ-> Ġsp Filter . setSelection ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Type . RUN _ TIME Ġ-> Ġsp Filter . setSelection ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Type . DIST Ġ-> Ġsp Filter . setSelection ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Type . AVG _ SPEED Ġ-> Ġsp Filter . setSelection ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Type . CAL _ BUR NT Ġ-> Ġsp Filter . setSelection ( 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsp Filter . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( position ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠviewModel . sort Runs ( Sort Type . DATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠviewModel . sort Runs ( Sort Type . RUN _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠviewModel . sort Runs ( Sort Type . DIST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠviewModel . sort Runs ( Sort Type . AVG _ SPEED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠviewModel . sort Runs ( Sort Type . CAL _ BUR NT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ run Fragment _ to _ tracking Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreq Permissions () ĊĊĠĠĠĠĠĠĠ ĠsetUp Rv () ĊĠĠĠĠĠĠĠ ĠviewModel . runs . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Adapter . submit List ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Granted ( request Code : ĠInt , Ġperms : ĠMutable List < String >) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Denied ( request Code : ĠInt , Ġperms : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( Easy Permissions . some Permission Per manently Denied ( this , Ġperms )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Settings Dialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġreq Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠĠĠĠĠ ĠEasy Permissions . on Request Permissions Result ( REQ _ CODE _ LOC N _ PERM , Ġpermissions , Ġgrant Results , Ġthis ) ĊĠĠĠ Ġ} Ċ }