package Ġeu . ye ger . k offee . ui Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġandroidx . lifecycle . map Ċ import Ġeu . ye ger . k offee . Build Config Ċ import Ġeu . ye ger . k offee . domain . Transaction Ċ import Ġeu . ye ger . k offee . repository . Item Repository Ċ import Ġeu . ye ger . k offee . repository . Transaction Repository Ċ import Ġeu . ye ger . k offee . repository . UserRepository Ċ import Ġeu . ye ger . k offee . utility . Simple Timer Ċ import Ġeu . ye ger . k offee . utility . s ourced LiveData Ċ Ċ /** Ċ Ġ* ĠViewModel Ġthat Ġenables Ġrefund ing Ġof Ġpurch ases . Ċ Ġ* Ċ Ġ* Ġ@ property ĠitemId ĠThe Ġid Ġof Ġan Ġitem . ĠOptional . ĠShould Ġbe Ġnull Ġif Ġthis ĠViewModel Ġis Ġfor Ġusers . Ċ Ġ* Ġ@ property ĠuserId ĠThe Ġid Ġof Ġthe Ġuser . Ċ Ġ* Ġ@ property Ġitem Repository Ġ[ Item Repository ] Ġfor Ġrefresh ing Ġitem Ġdata Ġafter Ġrefund s . Ċ Ġ* Ġ@ property Ġtransaction Repository Ġ[ Transaction Repository ] Ġfor Ġrefund ing Ġand Ġevaluating Ġrefund able Ġpurch ases . Ċ Ġ* Ġ@ property Ġuser Repository Ġ[ UserRepository ] Ġfor Ġrefresh ing Ġuser Ġdata Ġafter Ġrefund s . Ċ Ġ* Ġ@ property Ġrefund able ĠA Ġ[ LiveData ]( https :// developer . android . com / reference / android x / lifecycle / LiveData ) Ġthat Ġcontains Ġa Ġrefund able Ġ[ Transaction . Purchase ]. Ċ Ġ* Ġ@ property Ġcan Refund ĠIndicates Ġthat Ġa Ġrefund able Ġ[ Transaction . Purchase ] Ġexists . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJan ĠM Ã¼ ller Ċ Ġ*/ Ċ class ĠRef und ViewModel ( ĊĠĠĠ Ġprivate Ġval ĠitemId : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval ĠuserId : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġitem Repository : ĠItem Repository , ĊĠĠĠ Ġprivate Ġval Ġtransaction Repository : ĠTransaction Repository , ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository Ċ ) Ġ: ĠCor outine ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrefund Timer Ġ= ĠSimple Timer Ġ{ ĊĠĠĠĠĠĠĠ Ġis Within Refund Interval . post Value ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġis Within Refund Interval Ġ= ĠMutable LiveData ( true ) ĊĊĠĠĠ Ġval Ġrefund able Ġ= ĊĠĠĠĠĠĠĠ Ġtransaction Repository . getLast Refund able Transaction By UserId Flow ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtransaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefund Timer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ=== Ġnull Ġ-> Ġnull Ġ// Ġno Ġrefund able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemId Ġ!= Ġnull Ġ&& ĠitemId Ġ!= Ġtransaction . itemId Ġ-> Ġnull Ġ// Ġrefund able Ġis Ġnot Ġthis Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Time Ġ= ĠSystem . currentTimeMillis () Ġ- Ġtransaction . timestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining Time Ġ= ĠBuild Config . REF UND _ INTERVAL Ġ- Ġelapsed Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Time Ġ> Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Within Refund Interval . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefund Timer . start ( remaining Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcan Refund Ġ= Ġs ourced LiveData ( is Within Refund Interval , Ġrefund able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Within Refund Interval . value Ġ== Ġtrue Ġ&& Ġrefund able . value Ġ!== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequests Ġa Ġrefund Ġand Ġref res hes Ġitem Ġand Ġuser Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefund Purchase () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= Ġrefund able . value ?. itemId ĊĊĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ=== Ġnull Ġ|| ĠitemId Ġ=== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġon ViewModel Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Repository . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefund Purchase ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Transactions By UserId ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository . fetch User ById ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Repository . fetch Item ById ( itemId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe ĠViewModel Ġand Ġstops Ġany Ġactive Ġtimers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġrefund Timer . stop () ĊĠĠĠ Ġ} Ċ } Ċ