package Ġcom . example . biz _ detail Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . example . biz _ detail . api . Detail Api Ċ import Ġcom . example . biz _ detail . api . Favorite Api Ċ Ġimport Ġcom . example . library . rest ful . Hi CallBack Ċ import Ġcom . example . library . rest ful . Hi Response Ċ import Ġcom . example . common . http . Api Factory Ċ import Ġcom . example . biz _ detail . model . Detail Model Ċ import Ġcom . example . biz _ detail . model . Favorite Ċ import Ġjava . lang . Exception Ċ Ċ class ĠDetail ViewModel ( val Ġgoods Id : ĠString ?) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠDetail ViewModel Factory ( val Ġgoods Id : ĠString ?) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider . New Instance Factory () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġmodel Class . get Constructor ( String :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstructor . newInstance ( goods Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . create ( model Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget ( goods Id : ĠString ?, ĠviewModel Store Owner : ĠViewModel Store Owner ): ĠDetail ViewModel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewModel Provider ( viewModel Store Owner , ĠDetail ViewModel Factory ( goods Id )). get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail ViewModel :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġquery Detail Data (): ĠLive Data < Detail Model ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Data Ġ= ĠMutable LiveData < Detail Model ?> () ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( goods Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Factory . create ( Detail Api :: class . java ). query Detail ( goods Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠHi CallBack < Detail Model > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠHi Response < Detail Model >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . data Ġ!= Ġnull Ġ&& Ġresponse . successful ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Data . post Value ( response . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpage Data ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġtoggle Favorite (): ĠLive Data < Boolean ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoggle Favorite Data Ġ= ĠMutable LiveData < Boolean ?> () ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( goods Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Factory . create ( Favorite Api :: class . java ). favorite ( goods Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠHi CallBack < Favorite > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠHi Response < Favorite >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . data Ġ!= Ġnull Ġ&& Ġresponse . successful ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Favorite Data . post Value ( response . data ?. is Favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Favorite Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Favorite Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtoggle Favorite Data ĊĠĠĠ Ġ} Ċ }