package Ġio . github . w binary tree . base Ċ Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġio . github . w binary tree . R allet te Application Ċ import Ġio . github . w binary tree . di . Repository Component Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġio . reactivex . subjects . Subject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġya oda Ġon Ġ 1 / 3 0 / 1 8 . Ċ Ġ*/ Ċ abstract Ġclass ĠBase Translator < R , ĠU > Ġ: ĠAndroid ViewModel ( R allet te Application . instance ), ĠRepository Component . Injectable Ġ{ ĊĠĠĠ Ġval Ġactions : ĠSubject < R > Ġ= ĠPublish Subject . create < R >() Ċ // ĠĠĠ Ġabstract Ġval Ġresult : ĠObservable < U > ĊĊĠĠĠ Ġval Ġstate : ĠObservable < U > Ġ= Ġactions . flatMap Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠ ĠObservable . just ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. publish Ġ{ Ġit . reduce () Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġuse Ġshare Ġor Ġreplay ( 1 ). auto Connect () Ġor ĠRx Replay ing Share ĊĠĠĠĠĠĠĠ Ġ. share () ĊĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĊĠĠĠ Ġabstract Ġfun ĠObservable < R >. reduce (): ĠObservable < U > ĊĊĠĠĠ Ġopen Ġfun Ġsend Action ( action : ĠObservable < R >): Disposable Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġmake Ġsure Ġsubject Ġwon 't Ġreceive ĠonError Ġor ĠonComplete Ġfrom Ġthe Ġaction ĊĠĠĠĠĠĠĠ Ġreturn Ġaction . subscribe ( actions :: onNext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Ui Model (): ĠObservable < U > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ: ĠViewModel Provider . New Instance Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġsuper . create ( model Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġis ĠRepository Component . Injectable ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . inject ( S co op Application . context . repo Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġandroidx . fragment . app . Fragment Activity . get ViewModel (): ĠVM Ġ{ ĊĠĠĠ Ġreturn ĠViewModel Providers . of ( this , ĠBase Translator ). get ( VM :: class . java ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġandroidx . fragment . app . Fragment Activity . get ViewModel ( id : ĠString ): ĠVM Ġ{ ĊĠĠĠ Ġreturn ĠViewModel Providers . of ( this , ĠBase Translator ). get ( id , ĠVM :: class . java ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġandroidx . fragment . app . Fragment . get ViewModel ( id : ĠString ): ĠVM Ġ{ ĊĠĠĠ Ġreturn ĠViewModel Providers . of ( activity !! , ĠBase Translator ). get ( id , ĠVM :: class . java ) Ċ } Ċ