package Ġde . r ki . cor on aw arn app . cor on atest . storage Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . core . content . edit Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġde . r ki . cor on aw arn app . cor on atest . server . Cor ona TestResult Ċ import Ġde . r ki . cor on aw arn app . cor on atest . type . Cor ona Test Ċ import Ġde . r ki . cor on aw arn app . cor on atest . type . pc r . PC RC or ona Test Ċ import Ġde . r ki . cor on aw arn app . cor on atest . type . rapid ant igen . R AC or ona Test Ċ import Ġde . r ki . cor on aw arn app . util . di . AppContext Ċ import Ġde . r ki . cor on aw arn app . util . serialization . Base Gson Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠCor ona Test Storage Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ AppContext Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġ@ Base Gson Ġval Ġbase Gson : ĠGson Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences (" cor on atest _ local data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgson Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Gson . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Type Adapter ( Cor ona TestResult :: class . java , ĠCor ona TestResult . Gson Adapter ()) ĊĠĠĠĠĠĠĠ Ġ}. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtype Token PC R Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠType Token < Set < PC RC or ona Test >>() Ġ{} . type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtype Token RA Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠType Token < Set < R AC or ona Test >>() Ġ{} . type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcor ona Tests : ĠCollection < Cor ona Test > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" load () ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp cr Tests : ĠSet < PC RC or ona Test > Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ġ= Ġprefs . getString ( P KEY _ DATA _ PC R , Ġnull ) Ġ?: Ġreturn @ run Ġempty Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson < Set < PC RC or ona Test >>( raw , Ġtype Token PC R ). on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" PC R Ġloaded : Ġ% s ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( it . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( it . type ) Ġ{ Ġ" PC R Ġtype Ġshould Ġnot Ġbe Ġnull , ĠG SON Ġfoot gun ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġra Tests : ĠSet < R AC or ona Test > Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ġ= Ġprefs . getString ( P KEY _ DATA _ RA , Ġnull ) Ġ?: Ġreturn @ run Ġempty Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson < Set < R AC or ona Test >>( raw , Ġtype Token RA ). on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" RA Ġloaded : Ġ% s ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( it . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( it . type ) Ġ{ Ġ" RA Ġtype Ġshould Ġnot Ġbe Ġnull , ĠG SON Ġfoot gun ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtests Ġ= Ġp cr Tests Ġ+ Ġra Tests ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" Loaded Ġ% d Ġtests .", Ġtests . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtests ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" save ( tests =% s )", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . filter Ġ{ Ġit . type Ġ== ĠCor ona Test . Type . PC R Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ġ= Ġgson . toJson ( this , Ġtype Token PC R ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" PC R Ġstoring : Ġ% s ", Ġraw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( P KEY _ DATA _ PC R , Ġraw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" No ĠP CR Ġtests Ġavailable , Ġclearing .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( P KEY _ DATA _ PC R ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . filter Ġ{ Ġit . type Ġ== ĠCor ona Test . Type . R AP ID _ ANT IG EN Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ġ= Ġgson . toJson ( this , Ġtype Token RA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" RA Ġstoring : Ġ% s ", Ġraw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( P KEY _ DATA _ RA , Ġraw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). v (" No ĠRA Ġtests Ġavailable , Ġclearing .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( P KEY _ DATA _ RA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Cor ona Test Storage " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP KEY _ DATA _ RA Ġ= Ġ" cor on atest . data . ra " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP KEY _ DATA _ PC R Ġ= Ġ" cor on atest . data . pc r " ĊĠĠĠ Ġ} Ċ } Ċ