package Ġat . r tr . r mb t . android . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġat . r mb t . util . exception . Handled Exception Ċ import Ġat . r mb t . util . io Ċ import Ġat . r tr . r mb t . android . ui . view state . Basic Result ViewState Ċ import Ġat . r tr . r mb t . android . util . Test Uuid Type Ċ import Ġat . spec ure . data . History Loop Median Ċ import Ġat . spec ure . data . entity . Q oe Info Record Ċ import Ġat . spec ure . data . entity . TestResult Graph Item Record Ċ import Ġat . spec ure . data . entity . TestResult Record Ċ import Ġat . spec ure . data . repository . History Repository Ċ import Ġat . spec ure . data . repository . Test Results Repository Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġkotlinx . coroutines . flow . on Completion Ċ import Ġkotlinx . coroutines . flow . zip Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠBasic Result ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtest Results Repository : ĠTest Results Repository , ĊĠĠĠ Ġprivate Ġval Ġhistory Repository : ĠHistory Repository Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġstate Ġ= ĠBasic Result ViewState () ĊĊĠĠĠ Ġval Ġtest Server Result LiveData : ĠLive Data < TestResult Record ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtest Results Repository . getServer TestResult ( state . test UUID ) ĊĊĠĠĠ Ġval Ġq oe Result LiveData : ĠLive Data < List < Q oe Info Record >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtest Results Repository . get Qo E Items ( state . test UUID ) ĊĊĠĠĠ Ġval Ġloop Result LiveData : ĠLive Data < History Loop Median ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ loop Median Values LiveData ĊĊĠĠĠ Ġval Ġdownload Graph LiveData : ĠLive Data < List < TestResult Graph Item Record >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtest Results Repository . get Graph Data LiveData ( state . test UUID , ĠTest Result Graph Item Record . Type . DOWNLOAD ) ĊĊĠĠĠ Ġval Ġupload Graph LiveData : ĠLive Data < List < TestResult Graph Item Record >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtest Results Repository . get Graph Data LiveData ( state . test UUID , ĠTest Result Graph Item Record . Type . UPLOAD ) ĊĊĠĠĠ Ġval Ġloading LiveData : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ loading LiveData ĊĊĠĠĠ Ġprivate Ġval Ġ_ loading LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġprivate Ġval Ġ_ loop Median Values LiveData Ġ= ĠMutable LiveData < History Loop Median >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd State Save Handler ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Test Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . uuid Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Uuid Type . TEST _ UUID Ġ-> Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Results Repository . load Test Results ( state . test UUID ). zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Results Repository . load Test Details Result ( state . test UUID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ&& Ġb Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . IO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠHand led Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading LiveData . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Uuid Type . LOOP _ UUID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . use Latest Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Repository . load History Items ( 0 , Ġ 1 0 0 , Ġtrue ). on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Repository . load Loop Median Values ( state . test UUID ). on Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading LiveData . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loop Median Values LiveData . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Repository . load Loop Median Values ( state . test UUID ). on Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading LiveData . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loop Median Values LiveData . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }