package Ġcom . mobile cor on at rack er . ui . countries list Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . mobile cor on at rack er . data . repository . Countries Data Repo Ċ import Ġcom . mobile cor on at rack er . data . repository . Countries Follow Repo Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util . Locale ĊĊ Ċ @ Experimental Cor outines Api Ċ class ĠCount ries List ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġcountries Follow Repo : ĠCount ries Follow Repo , ĊĠĠĠ Ġprivate Ġval Ġcountries Data Repo : ĠCount ries Data Repo Ċ ) Ġ: ĠViewModel (), ĊĠĠĠ ĠCount ries List ViewModel able Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent List : ĠList < Countries List ViewModel able . Country Report > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Filter Text : ĠString Ġ= Ġ"" ĊĠĠĠ Ġoverride Ġval Ġcountry Reports Ġ= ĠMutable LiveData < List < Countries List ViewModel able . Country Report >>() ĊĠĠĠ Ġoverride Ġval Ġis Refresh ing Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġoverride Ġval Ġnavigation To Country Requested Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! countries Data Repo . has Today Country Data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountries Data Repo . getAll Countries Today Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine ( countries Data Repo . getAll Countries Y esterday Data ()) Ġ{ Ġtoday , Ġyesterday Ġ-> Ġtoday Ġto Ġyesterday Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġ( today List , Ġyesterday List ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoday Map Ġ= Ġtoday List . map Ġ{ Ġit . iso 2 Ġto Ġit Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelt as Ġ= Ġyesterday List . map NotNull Ġ{ Ġyesterday Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoday Ġ= Ġtoday Map [ y esterday . iso 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcases Delta Ġ= Ġit . cases . minus ( y esterday . cases ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeath s Delta Ġ= Ġit . deaths . minus ( y esterday . deaths ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre covered Delta Ġ= Ġit . re covered . minus ( y esterday . re covered ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCount ries List ViewModel able . Country Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcases Delta Ġ= Ġcases Delta , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeath s Delta Ġ= Ġdeath s Delta , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre covered Delta Ġ= Ġre covered Delta , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Report Ġ= Ġtoday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent List Ġ= Ġdelt as ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Filter edList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Filter TextChanged ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Filter Text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġpost Filter edList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh Requested () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Country Follow ed ( country Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcountries Follow Repo . add Follow ed Country ( country Name ) ĊĠĠĠĠĠĠĠ Ġpost Filter edList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Country Un follow ed ( country Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcountries Follow Repo . remove Follow ed Country ( country Name ) ĊĠĠĠĠĠĠĠ Ġpost Filter edList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Share Report ( report : ĠCount ries List ViewModel able . Country Report ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( Countries List ViewModel :: class . java . simple Name , Ġ" on Share Report () Ġnot Ġimplemented !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Country Analysis Requested ( country Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation To Country Requested . post Value ( country Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Refresh ing . post Value ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountries Data Repo . fetch Today Countries Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Filter edList () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Ġ= Ġget Filter edList () ĊĠĠĠĠĠĠĠ Ġcountry Reports . post Value ( get Follow Status List ( filtered )) ĊĠĠĠĠĠĠĠ Ġis Refresh ing . post Value ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filter edList (): ĠList < Countries List ViewModel able . Country Report > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent List . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Name Ġ= Ġit . country Report . country . lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Iso Ġ= Ġit . country Report . iso 2 . lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Name . contains ( current Filter Text ) Ġ|| Ġcountry Iso . contains ( current Filter Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Follow Status List ( filtered : ĠList < Countries List ViewModel able . Country Report >): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList < Countries List ViewModel able . Country Report > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfollowed Countries Ġ= Ġcountries Follow Repo . get Follow ed Countries () ĊĠĠĠĠĠĠĠ Ġval Ġfollowed Ġ= Ġfiltered . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfollowed Countries . contains ( it . country Report . country ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . country Report . follow ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnot Follow ed Ġ= Ġfiltered . filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfollowed Countries . contains ( it . country Report . country ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . country Report . follow ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfollowed Ġ+ Ġnot Follow ed ĊĠĠĠ Ġ} Ċ } Ċ