package Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Factory Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġde . r ki . cor on aw arn app . c cl . dcc ad mission . calculation . D cc Ad mission Check Sc enarios Calculation Ċ import Ġde . r ki . cor on aw arn app . c cl . ui . text . C cl Text Formatter Ċ import Ġde . r ki . cor on aw arn app . covid certificate . common . repository . Test Certificate Container Id Ċ import Ġde . r ki . cor on aw arn app . covid certificate . expiration . D cc Expiration Notification Service Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . core . Migration Check Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . core . Person Certificates Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . core . Person Certificates Provider Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . ad mission . Ad mission Sc enarios Shared ViewModel Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview . items . Ad mission Tile Provider Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview . items . Cov id Test Certificate Pending Card Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview . items . Person Certificate Card Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview . items . Person Certificate Card . Item . Overview Certificate Ċ import Ġde . r ki . cor on aw arn app . covid certificate . person . ui . overview . items . Person Certificates Item Ċ import Ġde . r ki . cor on aw arn app . covid certificate . test . core . Test Certificate Ċ import Ġde . r ki . cor on aw arn app . covid certificate . test . core . Test Certificate Repository Ċ import Ġde . r ki . cor on aw arn app . covid certificate . test . core . Test Certificate Wrapper Ċ import Ġde . r ki . cor on aw arn app . util . coroutine . App Scope Ċ import Ġde . r ki . cor on aw arn app . util . coroutine . Dispatcher Provider Ċ import Ġde . r ki . cor on aw arn app . util . ui . Single Live Event Ċ import Ġde . r ki . cor on aw arn app . util . view model . C WA ViewModel Ċ import Ġde . r ki . cor on aw arn app . util . view model . C WA ViewModel Factory Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . onStart Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Suppress (" Long Parameter List ") Ċ class ĠPerson Overview ViewModel Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠ Ġdispatcher Provider : ĠDispatcher Provider , ĊĠĠĠ Ġcertificates Provider : ĠPerson Certificates Provider , ĊĠĠĠ Ġd cc Ad mission Tile Provider : ĠAd mission Tile Provider , ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġad mission Sc enarios Shared ViewModel : ĠAd mission Sc enarios Shared ViewModel , ĊĠĠĠ Ġ@ App Scope Ġprivate Ġval Ġapp Scope : ĠCor outine Scope , ĊĠĠĠ Ġprivate Ġval Ġtest Certificate Repository : ĠTest Certificate Repository , ĊĠĠĠ Ġprivate Ġval Ġexpiration Notification Service : ĠD cc Expiration Notification Service , ĊĠĠĠ Ġprivate Ġval Ġformat : ĠC cl Text Formatter , ĊĠĠĠ Ġprivate Ġval Ġad mission Check Sc enarios Calculation : ĠD cc Ad mission Check Sc enarios Calculation , ĊĠĠĠ Ġprivate Ġval Ġmigration Check : ĠMigration Check Ċ ) Ġ: ĠC WA ViewModel ( dispatcher Provider ) Ġ{ ĊĊĠĠĠ Ġval Ġad mission Tile Ġ= Ġd cc Ad mission Tile Provider . ad mission Tile . as LiveData 2 () ĊĠĠĠ Ġval Ġevents Ġ= ĠSingle Live Event < Person Overview Fragment Events >() ĊĠĠĠ Ġval Ġui State : ĠLive Data < Ui State > Ġ= Ġcombine < Set < Person Certificates >, ĠSet < Test Certificate Wrapper >, ĠUi State >( ĊĠĠĠĠĠĠĠ Ġcertificates Provider . person Certificates , ĊĠĠĠĠĠĠĠ Ġtest Certificate Repository . certificates , ĊĠĠĠ Ġ) Ġ{ Ġpersons , Ġtc Wrappers Ġ-> ĊĊĠĠĠĠĠĠĠ Ġif Ġ( migration Check . should Show Migration Info ( persons )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( Show Migration Info Dialog ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠUi State . Done ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf < Person Certificates Item >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Person Items ( persons , Ġtc Wrappers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. onStart Ġ{ Ġemit ( Ui State . Loading ) Ġ}. as LiveData 2 () ĊĊĠĠĠ Ġfun Ġdelete Test Certificate ( container Id : ĠTest Certificate Container Id ) Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Certificate Repository . delete Certificate ( container Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠMutable List < Person Certificates Item >. add Person Items ( ĊĠĠĠĠĠĠĠ Ġpersons : ĠSet < Person Certificates >, ĊĠĠĠĠĠĠĠ Ġtc Wrappers : ĠSet < Test Certificate Wrapper >, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Pending Cards ( tc Wrappers ) ĊĠĠĠĠĠĠĠ Ġadd Certificate Cards ( persons ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠMutable List < Person Certificates Item >. add Certificate Cards ( ĊĠĠĠĠĠĠĠ Ġpersons : ĠSet < Person Certificates >, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpersons . filter Not Pending (). forEach Indexed Ġ{ Ġindex , Ġperson Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġad mission State Ġ= Ġperson . dcc Wallet Info ?. ad mission State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcertificates Ġ= Ġperson . verification Certificates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠPerson Color Shade . shade For ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( certificates . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson Certificate Card . Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Certificates Ġ= Ġcertificates . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOverview Certificate ( it . c wa Certificate , Ġformat ( it . button Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad mission Badge Text Ġ= Ġformat ( ad mission State ?. badge Text ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Shade Ġ= Ġcolor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Count Ġ= Ġperson . badge Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Action Ġ= Ġ{ Ġ_, Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson . person Identifier ?. let Ġ{ Ġperson Identifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Person Details Fragment ( person Identifier . code SHA 2 5 6 , Ġposition , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Cov Pass Info Action Ġ= Ġ{ Ġevents . post Value ( Open Cov Pass Info ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMutable List < Person Certificates Item >. add Pending Cards ( tc Wrappers : ĠSet < Test Certificate Wrapper >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtc Wrappers . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Certificate Retrie val Pending ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġcertificate Wrapper Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ov id Test Certificate Pending Card . Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Ġ= Ġcertificate Wrapper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Retry Action Ġ= Ġ{ Ġrefresh Certificate ( certificate Wrapper . container Id ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Action Ġ= Ġ{ Ġevents . post Value ( Show Delete Dialog ( certificate Wrapper . container Id )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPerson Certificates . has Pending Test Certificate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcertificate Ġ= Ġhighest Priority Certificate ĊĠĠĠĠĠĠĠ Ġreturn Ġcertificate Ġis ĠTest Certificate Ġ&& Ġcertificate . is Certificate Retrie val Pending ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSet < Person Certificates >. filter Not Pending () Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . has Pending Test Certificate () Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . highest Priority Certificate ?. fullName Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġit . is C wa User Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Certificate ( container Id : ĠTest Certificate Container Id ) Ġ= Ġlaunch ( scope Ġ= Ġapp Scope ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Results Ġ= Ġtest Certificate Repository . refresh ( container Id ) ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġrefresh Results . map NotNull Ġ{ Ġit . error Ġ}. single OrNull () ĊĠĠĠĠĠĠĠ Ġerror ?. let Ġ{ Ġevents . post Value ( Show Refresh Error Dialog ( error )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Expiration () Ġ= Ġlaunch ( scope Ġ= Ġapp Scope ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" check Expiration () ") ĊĠĠĠĠĠĠĠ Ġexpiration Notification Service . show Notification If StateChanged ( ignore Last Check Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Ad mission Scenario Screen () Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġad mission Check Sc enarios Calculation . get D cc Ad mission Check Sc enarios () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ Ġevents . post Value ( Show Ad mission Scenario Error ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad mission Sc enarios Shared ViewModel . set Ad mission Sc enarios ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( Open Ad mission Scenario Screen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠUi State Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Ġ: ĠUi State () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠDone ( val Ġperson Certificates : ĠList < Person Certificates Item >) Ġ: ĠUi State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ass isted Factory ĊĠĠĠ Ġinterface ĠFactory Ġ: ĠC WA ViewModel Factory < Person Overview ViewModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad mission Sc enarios Shared ViewModel : ĠAd mission Sc enarios Shared ViewModel ĊĠĠĠĠĠĠĠ Ġ): ĠPerson Overview ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Person Overview ViewModel " ĊĠĠĠ Ġ} Ċ } Ċ