package Ġcom . example . after pay . details v 3 Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . after pay . android . After pay Ċ import Ġcom . after pay . android . model . Checkout V 3 Data Ċ import Ġcom . example . after pay . util . viewModel Factory Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . util . UUID Ċ Ċ class ĠDetails ViewModel ( private Ġval Ġresult Data : ĠCheckout V 3 Data ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmerchant Reference Update Ġ= ĠMutable Shared Flow < String >( replay Ġ= Ġ 1 ) ĊĊĠĠĠ Ġfun Ġmerchant Reference (): ĠFlow < String > Ġ= Ġmerchant Reference Update ĊĊĠĠĠ Ġprivate Ġfun Ġon Merchant Reference ( reference : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerchant Reference Update . try Emit ( reference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcard Valid For : ĠString ? Ġ= Ġresult Data . card Valid Until ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠDuration . between ( Instant . now (), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ duration . to Minutes ()} Ġminutes " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data . card Valid Until ?. toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Merchant Reference () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĠAfter pay . update Merchant Reference V 3 ( reference , Ġresult Data . tokens ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġon Merchant Reference ( reference ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ Ġon Merchant Reference ( it . message Ġ?: Ġ" Update Ġfailed !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfactory ( result Data : ĠCheckout V 3 Data ) Ġ= ĠviewModel Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetails ViewModel ( result Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ