package Ġcom . github . bin power 9 3 . h ilt test . ui . new note Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . as Flow Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġandroidx . lifecycle . map Ċ import Ġcom . github . bin power 9 3 . h ilt test . R Ċ import Ġcom . github . bin power 9 3 . h ilt test . core . Base ViewModel Ċ import Ġcom . github . bin power 9 3 . h ilt test . model . Post Ċ import Ġcom . github . bin power 9 3 . h ilt test . model . network . Post Api Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠNew Note ViewModel : ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġpost Api : ĠPost Api ĊĊĠĠĠ Ġval Ġsaving Visibility Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġsave Visibility Ġ= Ġsaving Visibility . map Ġ{ Ġif ( it Ġ== ĠView . GONE ) ĠView . VISIBLE Ġelse ĠView . GONE Ġ} ĊĠĠĠ Ġval ĠerrorMessage Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġsuccess Ġ= ĠMutable LiveData < Unit >() ĊĊĠĠĠ Ġval Ġtitle Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġcontent Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġprivate Ġvar Ġsubscription : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġtitle Error Ġ= Ġtitle . map Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( it . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . error _ title _ needed ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontent Error Ġ= Ġcontent . map Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( it . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . error _ content _ needed ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcan Submit Ġ= Ġcombine ( title Error . as Flow (), Ġcontent Error . as Flow ()) Ġ{ Ġtitle Error , Ġcontent Error Ġ-> ĊĠĠĠĠĠĠĠ Ġtitle Error Ġ== Ġnull Ġ&& Ġcontent Error Ġ== Ġnull ĊĠĠĠ Ġ}. as LiveData () ĊĊĠĠĠ Ġfun Ġsubmit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( subscription ?. is Disposed Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription ?. dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsubscription Ġ= Ġpost Api . insert Post ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPost ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle . value . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent . value . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġon Save Started () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Terminate Ġ{ Ġon Save Finished () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġon Save Success () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġon Save Failed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsaving Visibility . value Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuccess . value Ġ= ĠUnit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save Failed () Ġ{ ĊĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= ĠR . string . error _ failed _ to _ save ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save Finished () Ġ{ ĊĠĠĠĠĠĠĠ Ġsaving Visibility . value Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġsaving Visibility . value Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġclear ErrorMessage () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear ErrorMessage () Ġ{ ĊĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġsubscription ?. dispose () ĊĠĠĠ Ġ} Ċ }