package Ġcz . covid 1 9 cz . erous ka . db Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . MODE _ PRIVATE Ċ import Ġandroid . content . SharedPreferences Ċ import Ġarch . li ved ata . Safe Mutable LiveData Ċ import Ġcz . covid 1 9 cz . erous ka . AppConfig Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠShared Prefs Repository Ġ@ Inject Ġconstructor (@ ApplicationContext Ġc : ĠContext ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAPP _ PA USED Ġ= Ġ" preference . app _ paused " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ KEY _ IMPORT Ġ= Ġ" preference . last _ import " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ KEY _ IMPORT _ TIME Ġ= Ġ" preference . last _ import _ time " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ NOT IFI ED _ EX POS URE Ġ= Ġ" last Not ified Exposure " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ IN _ APP _ NOT IFI ED _ EX POS URE Ġ= Ġ" last In App Not ified Exposure " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX POS URE _ NOTIFICATION S _ ENABLED Ġ= Ġ" ex posure Notifications Enabled " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ SET _ DIAG NO SIS _ KEYS _ DATA _ MAPPING Ġ= Ġ" last Set Di agnosis Keys Data Mapping " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREPORT _ TYPE _ WEIGHT S Ġ= Ġ" report Type Weights " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINF ECT IOUS NESS _ WEIGHT S Ġ= Ġ" inf ect ious ness Weights " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠATT ENU ATION _ BUCKET _ THRESHOLD _ DB Ġ= Ġ" att enuation Bucket Threshold Db " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠATT ENU ATION _ BUCKET _ WEIGHT S Ġ= Ġ" att enuation Bucket Weights " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIN IMUM _ WINDOW _ SCORE Ġ= Ġ" minimum Window Score " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE V ISION _ TOKEN Ġ= Ġ" revision Token " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLAST _ STATS _ UPDATE Ġ= Ġ" last Stats Update " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEST S _ TOTAL Ġ= Ġ" tests Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEST S _ INCRE ASE Ġ= Ġ" tests Increase " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON FI R MED _ CASE S _ TOTAL Ġ= Ġ" confirmed Cases Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON FI R MED _ CASE S _ INCRE ASE Ġ= Ġ" confirmed Cases Increase " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACT IVE _ CASE S _ TOTAL Ġ= Ġ" active Cases Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACT IVE _ CASE S _ INCRE ASE Ġ= Ġ" active Cases Increase " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠC URE D _ TOTAL Ġ= Ġ" c ured Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠC URE D _ INCRE ASE Ġ= Ġ" c ured Increase " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDE CE ASE D _ TOTAL Ġ= Ġ" de ce ased Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDE CE ASE D _ INCRE ASE Ġ= Ġ" de ce ased Increase " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCURRENT LY _ HO SP ITAL IZED _ TOTAL Ġ= Ġ" currently Ho spital ized Total " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCURRENT LY _ HO SP ITAL IZED _ INCRE ASE Ġ= Ġ" currently Ho spital ized Increase " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprefs : ĠSharedPreferences Ġ= Ġc . get SharedPreferences (" prefs ", ĠMODE _ PRIVATE ) ĊĠĠĠ Ġval Ġlast Key Import Live Ġ= ĠSafe Mutable LiveData ( getLast Key Import ()) ĊĊĠĠĠ Ġfun Ġlast Key Export FileName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( LAST _ KEY _ IMPORT , Ġ"") Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last Key Export FileName ( filename : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( LAST _ KEY _ IMPORT , Ġfilename ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last Key Import () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġprefs . edit (). put Long ( LAST _ KEY _ IMPORT _ TIME , Ġtimestamp ). apply () ĊĠĠĠĠĠĠĠ Ġlast Key Import Live . post Value ( timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Key Import (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getLong ( LAST _ KEY _ IMPORT _ TIME , Ġ 0 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last Set Di agnosis Keys Data Mapping () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). put Long ( LAST _ SET _ DIAG NO SIS _ KEYS _ DATA _ MAPPING , ĠSystem . currentTimeMillis ()). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Set Di agnosis Keys Data Mapping (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getLong ( LAST _ SET _ DIAG NO SIS _ KEYS _ DATA _ MAPPING , Ġ 0 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last Not ified Exposure ( days Since Epoch : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). put Int ( LAST _ NOT IFI ED _ EX POS URE , Ġdays Since Epoch ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Not ified Exposure (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( LAST _ NOT IFI ED _ EX POS URE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last In App Not ified Exposure ( days Since Epoch : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). put Int ( LAST _ IN _ APP _ NOT IFI ED _ EX POS URE , Ġdays Since Epoch ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast In App Not ified Exposure (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( LAST _ IN _ APP _ NOT IFI ED _ EX POS URE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Out dated Key Data (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Timestamp Ġ= ĠgetLast Key Import () ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Timestamp Ġ!= Ġ 0 L Ġ&& Ġ( System . currentTimeMillis () Ġ- Ġlast Timestamp ) Ġ/ Ġ( 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ> ĠApp Config . key Import Data Out dated Hours ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Last Key Export FileName () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). remove ( LAST _ KEY _ IMPORT ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Last Key Import Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). remove ( LAST _ KEY _ IMPORT _ TIME ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Update From Legacy Version () Ġ= Ġprefs . contains ( APP _ PA USED ) ĊĊĠĠĠ Ġfun Ġmark Update From Legacy Version Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). remove ( APP _ PA USED ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Exposure Notifications Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getBoolean ( EX POS URE _ NOTIFICATION S _ ENABLED , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Exposure Notifications Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). put Boolean ( EX POS URE _ NOTIFICATION S _ ENABLED , Ġenabled ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Revision Token ( token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( REVISION _ TOKEN , Ġtoken ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Revision Token (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( REVISION _ TOKEN , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Custom Config () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( REPORT _ TYPE _ WEIGHT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( ATT ENU ATION _ BUCKET _ THRESHOLD _ DB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( ATT ENU ATION _ BUCKET _ WEIGHT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( MIN IMUM _ WINDOW _ SCORE ) ĊĠĠĠĠĠĠĠ Ġ}. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Report Type Weights ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( REPORT _ TYPE _ WEIGHT S , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Inf ect ious ness Weights ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( INF ECT IOUS NESS _ WEIGHT S , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Att enuation Bucket Threshold Db ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( ATT ENU ATION _ BUCKET _ THRESHOLD _ DB , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Att enuation Bucket Weights ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( ATT ENU ATION _ BUCKET _ WEIGHT S , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Minimum Window Score ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( MIN IMUM _ WINDOW _ SCORE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Report Type Weights (): ĠList < Double >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( REPORT _ TYPE _ WEIGHT S , Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . split ("; "). map NotNull Ġ{ Ġit . toDouble OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Inf ect ious ness Weights (): ĠList < Double >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( INF ECT IOUS NESS _ WEIGHT S , Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . split ("; "). map NotNull Ġ{ Ġit . toDouble OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Att enuation Bucket Threshold Db (): ĠList < Int >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( ATT ENU ATION _ BUCKET _ THRESHOLD _ DB , Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . split ("; "). map NotNull Ġ{ Ġit . toInt OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Att enuation Bucket Weights (): ĠList < Double >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( ATT ENU ATION _ BUCKET _ WEIGHT S , Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . split ("; "). map NotNull Ġ{ Ġit . toDouble OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Minimum Window Score (): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( MIN IMUM _ WINDOW _ SCORE , Ġnull )?. toDouble OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Stats Update (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getLong ( LAST _ STATS _ UPDATE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Last Stats Update ( modified : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Long ( LAST _ STATS _ UPDATE , Ġmodified ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tests Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( TESTS _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Tests Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( TESTS _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tests Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( TESTS _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Tests Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( TESTS _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Confirmed Cases Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( CON FI R MED _ CASE S _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Confirmed Cases Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( CON FI R MED _ CASE S _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Confirmed Cases Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( CON FI R MED _ CASE S _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Confirmed Cases Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( CON FI R MED _ CASE S _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Active Cases Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( ACTIVE _ CASE S _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Active Cases Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( ACTIVE _ CASE S _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Active Cases Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( ACTIVE _ CASE S _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Active Cases Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( ACTIVE _ CASE S _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetC ured Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( C URE D _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset C ured Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( C URE D _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetC ured Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( C URE D _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset C ured Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( C URE D _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget De ce ased Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( DE CE ASE D _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset De ce ased Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( DE CE ASE D _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget De ce ased Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( DE CE ASE D _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset De ce ased Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( DE CE ASE D _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Currently Ho spital ized Total (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( CURRENT LY _ HO SP ITAL IZED _ TOTAL , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Currently Ho spital ized Total ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( CURRENT LY _ HO SP ITAL IZED _ TOTAL , Ġvalue ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Currently Ho spital ized Increase (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getInt ( CURRENT LY _ HO SP ITAL IZED _ INCRE ASE , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Currently Ho spital ized Increase ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . edit (). put Int ( CURRENT LY _ HO SP ITAL IZED _ INCRE ASE , Ġvalue ). apply () ĊĠĠĠ Ġ} Ċ }