package Ġme . android box . tam bo on . presentation . view models Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġme . android box . tam bo on . data . entities . Char ities Ċ import Ġme . android box . tam bo on . data . entities . Don ation Ċ import Ġme . android box . tam bo on . data . entities . Don ation Result Ċ import Ġme . android box . tam bo on . domain . inter actors . Request Char ities Ċ import Ġme . android box . tam bo on . domain . inter actors . Request Don ation Ċ import Ġme . android box . tam bo on . utils . Esp ress o Id ling Resource Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠT am bo on ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrequest Char ities : ĠRequest Char ities , ĊĠĠĠ Ġprivate Ġval Ġrequest Don ation : ĠRequest Don ation , ĊĠĠĠ Ġprivate Ġval Ġui Scheduler : ĠScheduler , ĊĠĠĠ Ġprivate Ġval Ġbackground Scheduler : ĠScheduler Ċ ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġdon ation Data Ġ= ĠMutable LiveData < Don ation Result >() ĊĠĠĠ Ġprivate Ġval Ġchar ities Data Ġ= ĠMutable LiveData < Char ities >() ĊĊĠĠĠ Ġfun Ġget ListOf Char ities () Ġ{ ĊĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . increment () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( request Char ities . get Char ities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( background Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( ui Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġchar ities Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" on Success Ġ$ char ities ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar ities Data . value Ġ= Ġchar ities ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . decrement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" failed Ġto Ġget Ġlist Ġof Ġ${ it . localized Message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar ities Data . value Ġ= ĠChar ities ( 0 , Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . decrement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit Don ation ( don ation : ĠDon ation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . increment () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( request Don ation . make Don ation ( don ation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( background Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( ui Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ Ġdon ation Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" on Success Ġ$ don ation Result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Data . value Ġ= Ġdon ation Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . decrement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Data . value Ġ= ĠDon ation Result ( false , Ġ"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . decrement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister For Char ities (): ĠMutable LiveData < Char ities > Ġ= Ġchar ities Data ĊĊĠĠĠ Ġfun Ġregister For Don ations (): ĠMutable LiveData < Don ation Result > Ġ= Ġdon ation Data ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Requests () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠ Ġ} Ċ } Ċ