package Ġcom . example . air quality analyzer . view _ model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . example . air quality analyzer . model . App Database Ċ import Ġcom . example . air quality analyzer . model . entities . Station Ċ import Ġcom . example . air quality analyzer . model . repositories . G ios Api Repository Ċ import Ġcom . example . air quality analyzer . model . repositories . Station Repository Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . text . Coll ator Ċ import Ġjava . util .* Ċ import Ġkotlin . Comparator Ċ Ċ class ĠStation ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstation Repository : ĠStation Repository Ġ= ĊĠĠĠĠĠĠĠ ĠStation Repository ( App Database . get Database ( application ). station Dao ()) ĊĠĠĠ Ġprivate Ġval Ġcomparator : ĠComparator < Station > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpol ish Coll ator Ġ= ĠCol lator . getInstance ( Locale (" pl ")) ĊĠĠĠĠĠĠĠ Ġcomparator Ġ= Ġcompare By ( pol ish Coll ator ) Ġ{ Ġstation : ĠStation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstation . city ?. com mune ?. province Name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By ( pol ish Coll ator ) Ġ{ Ġstation : ĠStation Ġ-> Ġstation . station Name Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġobserved St ations Ġ= ĠTransform ations . map ( station Repository . all St ations ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . sorted With ( comparator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġother St ations Ġ= Ġget Un observed St ations () ĊĊĠĠĠ Ġval Ġselected Ġ= Ġmutable Set Of < Station >() ĊĊĠĠĠ Ġlateinit Ġvar Ġstation : ĠStation ĊĊĠĠĠ Ġfun Ġadd Station ( station : ĠStation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstation Repository . add Station ( station ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Selected ( station : ĠStation ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġselected . find Ġ{ Ġit . id Ġ== Ġstation . id Ġ} Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġtoggle Selection ( station : ĠStation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ( station )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . remove ( station ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected . add ( station ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Station ( station : ĠStation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstation Repository . delete Station ( station . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Selected St ations () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected . forEach Ġ{ Ġdelete Station ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġselected . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Un observed St ations (): ĠLive Data < List < Station >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠMed iator LiveData < List < Station >>() ĊĠĠĠĠĠĠĠ Ġvar Ġall St ations : ĠList < Station > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġvar Ġobserved St ations : ĠList < Station > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġfun Ġresult Station () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstations Ġ= Ġall St ations . filter Not Ġ{ Ġstation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserved St ations . contains ( station ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . value Ġ= Ġstations . sorted With ( comparator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult . add Source ( G ios Api Repository . getAll St ations ()) ĊĠĠĠĠĠĠĠ Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall St ations Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Station () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . add Source ( station Repository . all St ations ()) ĊĠĠĠĠĠĠĠ Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserved St ations Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Station () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ }