package Ġid . riz ma ul ana . covid 1 9 . ui . overview Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . TextView Ċ import Ġcom . github . mike phil . chart ing . animation . E asing Ċ import Ġcom . github . mike phil . chart ing . data . Pie Data Ċ import Ġcom . github . mike phil . chart ing . data . Pie DataSet Ċ import Ġcom . github . mike phil . chart ing . data . Pie Entry Ċ import Ġid . riz ma ul ana . covid 1 9 . R Ċ import Ġid . riz ma ul ana . covid 1 9 . data . model . Cov id Daily Ċ import Ġid . riz ma ul ana . covid 1 9 . data . model . Cov id Overview Ċ import Ġid . riz ma ul ana . covid 1 9 . ui . adapter . Daily Adapter Ċ import Ġid . riz ma ul ana . covid 1 9 . ui . base . Base Activity Ċ import Ġid . riz ma ul ana . covid 1 9 . ui . detail . Detail Activity Ċ import Ġid . riz ma ul ana . covid 1 9 . util . Case Type Ċ import Ġid . riz ma ul ana . covid 1 9 . util . Number Utils Ċ import Ġid . riz ma ul ana . covid 1 9 . util . ext . color Ċ import Ġid . riz ma ul ana . covid 1 9 . util . ext . observe Ċ import Ġkotlinx . android . synt hetic . main . activity _ dashboard .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ class ĠDashboard Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Dashboard ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġdaily Adapter Ġby Ġlazy Ġ{ ĠDaily Adapter () Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ dashboard ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Overview () ĊĠĠĠĠĠĠĠ ĠviewModel . get Daily Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( recycler _ view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġdaily Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Nested Scrolling Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlayout _ confirmed . setOnClickListener Ġ{ Ġpermission ( Case Type . CON FI R MED ) Ġ} ĊĠĠĠĠĠĠĠ Ġlayout _ re covered . setOnClickListener Ġ{ Ġpermission ( Case Type . RE COVER ED ) Ġ} ĊĠĠĠĠĠĠĠ Ġlayout _ death . setOnClickListener Ġ{ Ġpermission ( Case Type . DE ATH S ) Ġ} ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġpermission ( Case Type . FULL ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpermission ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpermission Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Activity . startActivity ( this , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . loading , Ġ:: loading ) ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . overview Data , Ġ:: overview Loaded ) ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . daily List Data , Ġ:: on Daily Loaded ) ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . errorMessage , Ġ:: show Snackbar Message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġoverview Loaded ( overview : ĠC ov id Overview ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Number Change Animator ( overview . confirmed ?. value , Ġtxt _ confirmed ) ĊĠĠĠĠĠĠĠ Ġstart Number Change Animator ( overview . deaths ?. value , Ġtxt _ deaths ) ĊĠĠĠĠĠĠĠ Ġstart Number Change Animator ( overview . re covered ?. value , Ġtxt _ re covered ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpie DataSet Ġ= ĠP ie DataSet ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ie Entry ( overview . confirmed ?. value ?. toFloat () Ġ?: Ġ 0 f , Ġ" Confirmed "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ie Entry ( overview . re covered ?. value ?. toFloat () Ġ?: Ġ 0 f , Ġ" Re covered "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ie Entry ( overview . deaths ?. value ?. toFloat () Ġ?: Ġ 0 f , Ġ" Death s ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ" CO VID 1 9 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtxt _ cases . text Ġ= ĠNumber Utils . number Format ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( overview . confirmed ?. value ?. plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview . re covered ?. value Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. plus ( overview . deaths ?. value Ġ?: Ġ 0 ) Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ). toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . color _ confirmed ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . color _ re covered ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . color _ death ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġpie DataSet . colors Ġ= Ġcolors ĊĊĠĠĠĠĠĠĠ Ġval Ġpie Data Ġ= ĠP ie Data ( pie DataSet ) ĊĠĠĠĠĠĠĠ Ġpie Data . set Draw Values ( false ) ĊĊĠĠĠĠĠĠĠ Ġwith ( pie _ chart ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġpie Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhole Radius Ġ= ĠP IE _ RADIUS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hole Color ( Color . parse Color ("# 1 7 1 B 1 E ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Entry Labels ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Y ( PI E _ ANIM ATION _ DURATION , ĠE asing . E ase InOut Qu art ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Number Change Animator ( final Value : ĠInt ?, Ġview : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Value Ġ= ĠNumber Utils . extract Digit ( view . text . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Animator Ġ= ĠValue Animator . of Int ( initial Value , Ġfinal Value Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġvalue Animator . duration Ġ= ĠTEXT _ ANIM ATION _ DURATION ĊĠĠĠĠĠĠĠ Ġvalue Animator . add Update Listener Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= ĠNumber Utils . number Format ( value . animated Value . toString (). toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalue Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Daily Loaded ( daily : ĠList < Cov id Daily >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdaily Adapter . addAll ( daily ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ ANIM ATION _ DURATION Ġ= Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP IE _ ANIM ATION _ DURATION Ġ= Ġ 1 5 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP IE _ RADIUS Ġ= Ġ 7 5 f ĊĠĠĠ Ġ} Ċ Ċ } Ċ