package Ġedu . t uk . s atell ites ar ere al . ui . screens Ċ Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . selection . selectable Group Ċ import Ġandroidx . compose . material . RadioButton Ċ import Ġandroidx . compose . material . Slider Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġedu . t uk . s atell ites ar ere al . app Settings Repository Ċ import Ġedu . t uk . s atell ites ar ere al . repositories . AppSettings Repository Ċ import Ġedu . t uk . s atell ites ar ere al . repositories . Location Repository Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠOptions Screen ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġapp Settings Repository : ĠApp Settings Repository , ĊĠĠĠ Ġval Ġlocation Repository : ĠLocation Repository , Ċ ): ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ location Service Interval : ĠMutable LiveData < Long > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġlocation Service Interval : ĠLive Data < Long > Ġ= Ġ_ location Service Interval ĊĊĠĠĠ Ġprivate Ġvar Ġget Location Service Interval Job : ĠJob Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġval Ġ_ field Of View : ĠMutable LiveData < Float > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġfield Of View : ĠLive Data < Float > Ġ= Ġ_ field Of View ĊĊĠĠĠ Ġprivate Ġvar Ġget Field Of View Job : ĠJob Ġ= ĠJob () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġget Location Service Interval () ĊĠĠĠĠĠĠĠ Ġget Field Of View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Location Service Interval () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Location Service Interval Job . cancel () ĊĠĠĠĠĠĠĠ Ġget Location Service Interval Job Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Settings Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. location Service Interval () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ location Service Interval . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonChange Location Service Interval ( interval : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Repository . set Update Interval ( interval ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Settings Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. save Location Service Interval ( interval ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Field Of View () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Field Of View Job . cancel () ĊĠĠĠĠĠĠĠ Ġget Field Of View Job Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Settings Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. field Of View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ field Of View . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonChange Fo V ( field Of View : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ field Of View . value Ġ= Ġfield Of View ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Settings Repository . save Field Of View ( field Of View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠOptions Screen ( viewModel : ĠOptions Screen ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġlocation Service Interval Ġby ĠviewModel . location Service Interval . observe As State () ĊĠĠĠ Ġval Ġfield Of View Ġby ĠviewModel . field Of View . observe As State () ĊĊĠĠĠ ĠColumn () Ġ{ ĊĠĠĠĠĠĠĠ ĠText (" Location ĠUpdate ĠInterval : Ġ$ location Service Interval ") ĊĊĠĠĠĠĠĠĠ ĠRow ( Modifier . selectable Group ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Slow ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRadio Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġlocation Service Interval Ġ== Ġ 4 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onChange Location Service Interval ( 4 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Normal ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRadio Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġlocation Service Interval Ġ== Ġ 2 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onChange Location Service Interval ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Fast ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRadio Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġlocation Service Interval Ġ== Ġ 1 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onChange Location Service Interval ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠText (" Field Ġof ĠView : Ġ$ field Of View ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSlider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfield Of View Ġ?: Ġ 4 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onChange Fo V ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Range Ġ= Ġ 1 0 f .. 1 8 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }