package Ġcom . jo er ac osta . covid tracker . view model Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . databinding . Bind able Ċ import Ġcom . github . mike phil . chart ing . data . Entry Ċ import Ġcom . jo er ac osta . covid tracker . Base Observable ViewModel Ċ import Ġcom . jo er ac osta . covid tracker . R Ċ import Ġcom . jo er ac osta . covid tracker . Time Util Ċ import Ġcom . jo er ac osta . covid tracker . Time Util . ALL _ TIME _ DAYS Ċ import Ġcom . jo er ac osta . covid tracker . Time Util . DAY _ M ILL IS Ċ import Ġcom . jo er ac osta . covid tracker . data .* Ċ import Ġcom . jo er ac osta . covid tracker . data . db . Cov id Data Dao Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠC ov id ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġcov id Tracking Project Api : ĠC ov id Tracking Project Api , ĊĠĠĠ Ġprivate Ġval Ġour World In Data Api : ĠOur World In Data Api , ĊĠĠĠ Ġprivate Ġval Ġcov id Data Dao : ĠC ov id Data Dao , ĊĠĠĠ Ġprivate Ġval Ġlast Updated Data : ĠLast Updated Data , ĊĠĠĠ Ġprivate Ġval Ġstring Getter : ĠString Getter , ĊĠĠĠ Ġprivate Ġval Ġapp Resources : ĠResources Ċ ) Ġ: ĠBase Observable ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault State Ġ= ĠC ov id State ( ĊĠĠĠĠĠĠĠ Ġselected Us a Location Ġ= Ġlast Updated Data . getSelected US State () Ġ?: ĠLocation . UNIT ED _ STAT ES , ĊĠĠĠĠĠĠĠ Ġamount Of Days Ago To Show Ġ= Ġlast Updated Data . get Amount Of Days Ago To Show () Ġ?: ĠALL _ TIME _ DAYS , ĊĠĠĠĠĠĠĠ Ġdata To Plot Ġ= Ġlast Updated Data . getData To Plot () Ġ?: ĠData To Plot . NEW _ CASE S ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġvar Ġupdate Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġval Ġstate Subject Ġ= ĠBehavior Subject . create Default ( default State ) ĊĊĠĠĠ Ġval Ġerror Display Ġ= ĠPublish Subject . create < Boolean >() ĊĊĠĠĠ Ġprivate Ġvar Ġdao Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcurrent State : ĠC ov id State ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Subject . value Ġ?: Ġdefault State ĊĊĠĠĠ Ġprivate Ġval Ġcov id Data Repo Ġ= ĠC ov id Data Repo ( ĊĠĠĠĠĠĠĠ Ġcov id Tracking Project Api Ġ= Ġcov id Tracking Project Api , ĊĠĠĠĠĠĠĠ Ġour World In Data Api Ġ= Ġour World In Data Api , ĊĠĠĠĠĠĠĠ Ġcomposite Disposable Ġ= Ġcomposite Disposable , ĊĠĠĠĠĠĠĠ Ġcov id Data Dao Ġ= Ġcov id Data Dao ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Connection To DB Data () ĊĠĠĠĠĠĠĠ Ġval Ġupdated More Than AD ay Ago Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Data . getLast Updated Time () Ġ+ ĠDAY _ M ILL IS Ġ< ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( updated More Than AD ay Ago ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcov id Data Plot Index Listener : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠsetData To Plot ( DataTo Plot . NEW _ CASE S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠsetData To Plot ( DataTo Plot . NEW _ DE ATH S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġv accine Data Plot Index Listener : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠsetData To Plot ( DataTo Plot . NEW _ V ACC IN ATIONS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠsetData To Plot ( DataTo Plot . TOTAL _ V ACC IN ATIONS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠsetData To Plot ( DataTo Plot . PERCENT _ V ACC IN ATED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtime Frame Index Listener : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠsetSelected Time Frame ( Time Util . ALL _ TIME _ DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠsetSelected Time Frame ( Time Util . SIX _ MONTH S _ DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠsetSelected Time Frame ( Time Util . TH REE _ MONTH S _ DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠsetSelected Time Frame ( Time Util . ONE _ MONTH _ DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠsetSelected Time Frame ( Time Util . TWO _ W EE KS _ DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> ĠsetSelected Time Frame ( Time Util . FI VE _ DAYS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠ Ġfun Ġget X Axis Formatter (): Ġ( Float ) Ġ-> ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlabel Cal ender Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" MM / dd ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Cal ender . time In Millis Ġ= Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġformat . format ( label Cal ender . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Updating Data (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent State . updating Data Ġ== Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Chart Title (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( currentState . data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ CASE S Ġ-> Ġstring Getter . getString ( R . string . new _ cases _ chart _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ DE ATH S Ġ-> Ġstring Getter . getString ( R . string . new _ deaths _ chart _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ V ACC IN ATIONS Ġ-> Ġstring Getter . getString ( R . string . new _ v acc inations _ chart _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . TOTAL _ V ACC IN ATIONS Ġ-> Ġstring Getter . getString ( R . string . total _ v acc inations _ chart _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . PERCENT _ V ACC IN ATED Ġ-> Ġstring Getter . getString ( R . string . percent _ v acc inated _ chart _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun ĠgetLast Updated Text (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( get Updating Data ()) Ġreturn Ġstring Getter . getString ( R . string . updating ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Updated Time Ġ= Ġlast Updated Data . getLast Updated Time () ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Last Updated Ġ= ĠCalendar . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime In Millis Ġ= Ġlast Updated Time ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" MM / dd Ġhh : mm Ġaa ") ĊĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= Ġformat . format ( time Last Updated . time ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( last Updated Time Ġ== Ġ 0 L ) Ġstring Getter . getString ( R . string . never _ updated ) Ġelse Ġ" Last ĠUpdated Ġ$ formatted " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Dis claimer Text (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( currentState . data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Subtitle Text (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( currentState . data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ CASE S , ĠData To Plot . NEW _ V ACC IN ATIONS , ĠData To Plot . NEW _ DE ATH S Ġ-> Ġstring Getter . getString ( R . string . chart _ subtitle _ se ven _ day _ avg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Background For Date RadioButton (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( currentState . data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ CASE S , ĠData To Plot . NEW _ DE ATH S Ġ-> ĠR . drawable . radio _ flat _ selector _ red ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ V ACC IN ATIONS , ĠData To Plot . TOTAL _ V ACC IN ATIONS , ĠData To Plot . PERCENT _ V ACC IN ATED Ġ-> ĠR . drawable . radio _ flat _ selector _ blue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . radio _ flat _ selector _ red ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Chart Entries From Datum ( covid Datum : ĠList < Cov id Data > ?, Ġdata To Plot : ĠData To Plot ?): ĠList < Entry > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġarray ListOf < Entry >() ĊĠĠĠĠĠĠĠ Ġval Ġlatest Day With V acc ination Totals Ġ= Ġcov id Datum ?. find Last Ġ{ Ġit . total People V acc inated Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlatest Day With V acc ination Totals Index Raw Ġ= Ġcov id Datum ?. indexOf ( latest Day With V acc ination Totals ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlatest Day With V acc ination Totals Index Ġ= Ġif Ġ( latest Day With V acc ination Totals Index Raw Ġ== Ġ- 1 Ġ|| Ġlatest Day With V acc ination Totals Index Raw Ġ== Ġnull ) ĠInt . MAX _ VALUE Ġelse Ġlatest Day With V acc ination Totals Index Raw ĊĊĠĠĠĠĠĠĠ Ġcov id Datum ?. forEach Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Float Ġ= Ġit . date ?. time ?. toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata To Display Ġ= Ġwhen Ġ( data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ CASE S Ġ-> Ġit . new Cases Se ven Day Avg ?. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ DE ATH S Ġ-> Ġit . new Death s Se ven Day Avg ?. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ V ACC IN ATIONS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// don 't Ġplot Ġdays Ġwe Ġdon 't Ġhave Ġdata Ġfor Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġlatest Day With V acc ination Totals Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . new V acc inations Se ven Day Avg ?. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . TOTAL _ V ACC IN ATIONS Ġ-> Ġit . total People V acc inated ?. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . PERCENT _ V ACC IN ATED Ġ-> Ġit . percent Of Population V acc inated ?. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Float Ġ!= Ġnull Ġ&& Ġdata To Display Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add ( Entry ( date Float , Ġdata To Display )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġentries ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget Chart Visibility (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries To Show Ġ= Ġget Chart Entries From Datum ( currentState . chart ed Data , Ġcurrent State . data To Plot ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( entries To Show . isEmpty ()) ĠView . IN VISIBLE Ġelse ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget No Data Visibility (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries To Show Ġ= Ġget Chart Entries From Datum ( currentState . chart ed Data , Ġcurrent State . data To Plot ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( entries To Show . isEmpty ()) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bind able ĊĠĠĠ Ġfun Ġget TextColor For Date RadioButton (): ĠColor State List ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Id Ġ= Ġwhen Ġ( currentState . data To Plot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ CASE S , ĠData To Plot . NEW _ DE ATH S Ġ-> ĠR . drawable . radio _ flat _ text _ selector _ red ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData To Plot . NEW _ V ACC IN ATIONS , ĠData To Plot . TOTAL _ V ACC IN ATIONS , ĠData To Plot . PERCENT _ V ACC IN ATED Ġ-> ĠR . drawable . radio _ flat _ text _ selector _ blue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . radio _ flat _ text _ selector _ red ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResources Compat . getColor State List ( app Resources , Ġresource Id , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( updating Data Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġupdate Disposable Ġ= Ġcov id Data Repo . fetch Latest Cov id Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( updating Data Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Data . set Last Updated Time ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Display . onNext ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Connection To DB Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Us a State Ġ= Ġcurrent State . selected Us a Location ĊĠĠĠĠĠĠĠ Ġval Ġamount Of Days Ago To Show Ġ= Ġcurrent State . amount Of Days Ago To Show ĊĊĠĠĠĠĠĠĠ Ġval Ġselected After Date Ġ= Ġget Date To Show From ( amount Of Days Ago To Show ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( selected Us a State Ġ!= Ġnull Ġ&& Ġselected After Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Disposable Ġ= Ġcov id Data Dao . getC ov id Data After Date ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Us a State . postal Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected After Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . selected Us a Location ?. let ( last Updated Data :: setSelected US State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart ed Data Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Display . onNext ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected US State ( selected US AL ocation : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected US AL ocation Ġ== Ġcurrent State . selected Us a Location ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Us a Location Ġ= Ġselected US AL ocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData To Plot ( data To Plot : ĠData To Plot ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Updated Data . setData To Plot ( data To Plot ) ĊĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata To Plot Ġ= Ġdata To Plot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Time Frame ( amount Of Days Ago To Show : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Updated Data . set Amount Of Days Ago To Show ( amount Of Days Ago To Show ) ĊĠĠĠĠĠĠĠ Ġupdate State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Of Days Ago To Show Ġ= Ġamount Of Days Ago To Show ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate State ( new Cov id State : ĠC ov id State ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Selected Before Ġ= Ġcurrent State . selected Us a Location ĊĠĠĠĠĠĠĠ Ġval Ġamount Of Days Ago To Show Ġ= Ġcurrent State . amount Of Days Ago To Show ĊĠĠĠĠĠĠĠ Ġstate Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Cov id State ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnotify Change () ĊĊĠĠĠĠĠĠĠ Ġ// only Ġcheck Ġif Ġdata Ġis Ġnew ĊĠĠĠĠĠĠĠ Ġif Ġ( state Selected Before Ġ!= Ġcurrent State . selected Us a Location Ġ|| Ġamount Of Days Ago To Show Ġ!= Ġcurrent State . amount Of Days Ago To Show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Connection To DB Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Date To Show From ( amount Of Days Ago To Show : ĠInt ?): ĠDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( amount Of Days Ago To Show Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġ( amount Of Days Ago To Show Ġ* ĠDAY _ M ILL IS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġdao Disposable ?. dispose () ĊĠĠĠ Ġ} Ċ Ċ }