package Ġcom . tu ann . product discovery . presentation . product detail Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . tu ann . product discovery . data . model . Product Ċ import Ġcom . tu ann . product discovery . data . repository . Product Repository Ċ import Ġcom . tu ann . product discovery . utils . rx . Scheduler Provider Ċ import Ġio . reactivex . Single Observer Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠProduct Detail ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠProduct Repository , ĊĠĠĠ Ġprivate Ġval Ġscheduler Provider : ĠScheduler Provider Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġ_ product Callback Ġ= ĠMutable LiveData < Product Detail State >() ĊĠĠĠ Ġval Ġproduct Callback : ĠLive Data < Product Detail State > Ġ= Ġ_ product Callback ĊĊĠĠĠ Ġfun Ġget Product ( sku : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ product Callback . value Ġ= ĠProduct Detail State . Loading ĊĠĠĠĠĠĠĠ Ġrepository . get Product ( sku ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( scheduler Provider . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( scheduler Provider . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠSingle Observer < Product > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( t : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ product Callback . value Ġ= ĠProduct Detail State . Success ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ product Callback . value Ġ= ĠProduct Detail State . Show Error ( e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }