package Ġca . bc . gov . b che alth . ui . login Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . work . Work Manager Ċ import Ġca . bc . gov . common . exceptions . Must Be Queued Exception Ċ import Ġca . bc . gov . common . model . Authentication Status Ċ import Ġca . bc . gov . common . model . patient . Patient Dto Ċ import Ġca . bc . gov . common . utils . to Unique Patient Name Ċ import Ġca . bc . gov . repository . Clear Storage Repository Ċ import Ġca . bc . gov . repository . Patient With BC SC Login Repository Ċ import Ġca . bc . gov . repository . Profile Repository Ċ import Ġca . bc . gov . repository . Queue It Token Repository Ċ import Ġca . bc . gov . repository . bc sc . BACKGROUND _ AUTH _ RECORD _ FETCH _ WORK _ NAME Ċ import Ġca . bc . gov . repository . bc sc . Bc sc Auth Repo Ċ import Ġca . bc . gov . repository . bc sc . Post Login Check Ċ import Ġca . bc . gov . repository . patient . Patient Repository Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . as State Flow Ċ import Ġkotlinx . coroutines . flow . update Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ /* Ċ * Ġ@ auth er Ġa mit _ met ri Ġon Ġ 0 5 , January , 2 0 2 2 Ċ */ Ċ @ H ilt ViewModel Ċ class ĠB csc Auth ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbc sc Auth Repo : ĠB csc Auth Repo , ĊĠĠĠ Ġprivate Ġval Ġqueue It Token Repository : ĠQueue It Token Repository , ĊĠĠĠ Ġprivate Ġval Ġclear Storage Repository : ĠClear Storage Repository , ĊĠĠĠ Ġprivate Ġval Ġprofile Repository : ĠProfile Repository , ĊĠĠĠ Ġprivate Ġval Ġpatient Repository : ĠPatient Repository , ĊĠĠĠ Ġprivate Ġval Ġpatient With BC SC Login Repository : ĠPatient With BC SC Login Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ auth Status Ġ= ĠMutable State Flow ( Auth Status ()) ĊĠĠĠ Ġval Ġauth Status : ĠState Flow < Auth Status > Ġ= Ġ_ auth Status . as State Flow () ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠTh rottle Ġcalls Ġto ĠBC SC Ġlogin ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġverify Load () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcan Init iate Bc sc Login Ġ= Ġbc sc Auth Repo . verify Load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Init iate Bc sc Login Ġ= Ġcan Init iate Bc sc Login ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMust Be Queued Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Url Ġ= Ġe . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠBC SC ĠLogin ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġinitiate Login () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Request Intent Ġ= Ġbc sc Auth Repo . init iate Login () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Request Intent Ġ= Ġauth Request Intent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Auth Response ( data : ĠIntent ?) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Logged Success Ġ= Ġbc sc Auth Repo . process Auth Response ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Logged Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Storage Repository . clear Med ication Preferences () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status Ġ= ĠLogin Status . ACTIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Post Login Check ( Post Login Check . IN _ PROGRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠBC SC Ġlogout ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġget End Session Intent () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Session Intent Ġ= Ġbc sc Auth Repo . getEnd Session Intent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Session Intent Ġ= Ġend Session Intent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Logout Response ( context : ĠContext ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ). cancel Unique Work ( BACKGROUND _ AUTH _ RECORD _ FETCH _ WORK _ NAME ) ĊĠĠĠĠĠĠĠ Ġbc sc Auth Repo . process Logout Response () ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status Ġ= ĠLogin Status . EXPI RED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Post Login Check ( Post Login Check . COMPLETE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠCheck ĠBC SC Ġlogin ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġcheck Session () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis Logged Success Ġ= Ġbc sc Auth Repo . check Session () ĊĠĠĠĠĠĠĠ Ġvar ĠuserName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Repository . find Patient By Auth Status ( Authentication Status . AUTHENT IC ATED ). fullName ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġimplementation Ġrequired . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlogin Session Status Ġ= Ġif Ġ( is Logged Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Status . ACTIVE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Status . EXPI RED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= ĠuserName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status Ġ= Ġlogin Session Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Auth Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Request Intent Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Session Intent Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Token Updated Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Limit Check Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Init iate Bc sc Login Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto s Accepted Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Que It Token ( token : ĠString ?) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue It Token Repository . set Que It Token ( token ) ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Token Updated Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Age Limit () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Parameters Ġ= Ġbc sc Auth Repo . get Auth Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Within Age Limit Ġ= Ġprofile Repository . check Age Limit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Limit Check Ġ= Ġif Ġ( is Within Age Limit ) ĠAge Limit Check . PAS SED Ġelse ĠAge Limit Check . FAILED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMust Be Queued Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Url Ġ= Ġe . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Terms Of Service Accepted () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Parameters Ġ= Ġbc sc Auth Repo . get Auth Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis T os Accepted Ġ= Ġprofile Repository . is Terms Of Service Accepted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġperform Patient Detail Check ( auth Parameters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto s Accepted Ġ= Ġif Ġ( is T os Accepted ) ĠT OS Accepted . ACCEPT ED Ġelse ĠT OS Accepted . NOT _ ACCEPT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMust Be Queued Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Url Ġ= Ġe . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġperform Patient Detail Check ( auth Parameters : ĠPair < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpatient From Remote Source : ĠPatient Dto ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatient From Remote Source Ġ= Ġpatient With BC SC Login Repository . get Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatient From Local Source Ġ= Ġpatient Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Patient By Auth Status ( Authentication Status . AUTHENT IC ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġuser Ġlogs Ġin Ġusing Ġdifferent Ġuser Ġcredentials Ġpost Ġsession Ġexpiry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġexiting ĠBC SC Ġuser Ġis Ġdeleted Ġand Ġnew ĠBC SC Ġuser Ġdetails Ġinserted Ġimmediately . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! patient From Local Source . fullName . to Unique Patient Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient From Remote Source . fullName . to Unique Patient Name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Repository . delete By Patient Id ( patient From Local Source . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Repository . insert Authenticated Patient ( patient From Remote Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf ĠAUTH ENT IC ATED ĠUSER Ġis Ġnot Ġfound Ġpatient Ġdetails Ġare Ġinserted Ġat Ġthis Ġstage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġto Ġshow Ġpatient Ġname Ġsoon Ġafter Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatient From Remote Source ?. let Ġ{ Ġpatient Repository . insert Authenticated Patient ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaccept Terms And Service () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Parameters Ġ= Ġbc sc Auth Repo . get Auth Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis T os Accepted Ġ= Ġprofile Repository . accept Terms Of Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Parameters . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is T os Accepted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto s Accepted Ġ= ĠT OS Accepted . ACCEPT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget End Session Intent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMust Be Queued Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Must Be Queued Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġque It Url Ġ= Ġe . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ auth Status . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Post Login Check ( post Login Check : ĠPost Login Check ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbc sc Auth Repo . set Post Login Check ( post Login Check ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute One Time Data Fetch () Ġ= Ġbc sc Auth Repo . execute One Time Dat Fetch () Ċ } Ċ Ċ data Ġclass ĠAuth Status ( ĊĠĠĠ Ġval Ġshow Loading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġauth Request Intent : ĠIntent ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġend Session Intent : ĠIntent ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġis Error : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval ĠuserName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġque It Token Updated : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġon Must Be Queued : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġque It Url : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġlogin Status : ĠLogin Status ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġage Limit Check : ĠAge Limit Check ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġcan Init iate Bc sc Login : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġto s Accepted : ĠT OS Accepted ? Ġ= Ġnull Ċ ) Ċ Ċ enum Ġclass ĠLogin Status Ġ{ ĊĠĠĠ ĠACT IVE , ĊĠĠĠ ĠEX PI RED Ċ } Ċ Ċ enum Ġclass ĠAge Limit Check Ġ{ ĊĠĠĠ ĠPAS SED , ĊĠĠĠ ĠFAILED Ċ } Ċ Ċ enum Ġclass ĠT OS Accepted Ġ{ ĊĠĠĠ ĠAC CEPT ED , ĊĠĠĠ ĠNOT _ ACCEPT ED , ĊĠĠĠ ĠUSER _ DECL IN ED Ċ } Ċ