/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠF ut ur ice ĠGmbH Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . fut ur ice . fre es ound . arch . m vi . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . fut ur ice . fre es ound . arch . m vi . Transition Event Ċ import Ġcom . fut ur ice . fre es ound . arch . m vi . Transition Observer Ċ import Ġcom . fut ur ice . fre es ound . feature . common . scheduling . Scheduler Provider Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . dis pos ables . Serial Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġprovides Ġthe Ġbasic Ġmechanism Ġto Ġtransform Ġa Ġstream Ġof ĠEvents Ġto Ġa Ġstream Ġof ĠStates . Ċ Ġ*/ Ċ abstract Ġclass ĠBase ViewModel < E , ĠS >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinitial Event : ĠE , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġscheduler Provider : ĠScheduler Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtransition Observer : ĠTransition Observer , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtag : ĠString ) Ġ: ĠViewModel (), ĠM vi ViewModel < E , ĠS > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġevents : ĠPublish Subject < E > Ġ= ĠPublish Subject . create () ĊĠĠĠ Ġprivate Ġval Ġstate : ĠMutable LiveData < S > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġdis posable : ĠSerial Disposable Ġ= ĠSerial Disposable () ĊĊĠĠĠ Ġprotected Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . start With ( initial Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( scheduler Provider . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Ui Event Flow able () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose Ġ{ Ġupstream Ġ-> Ġmap Event To State Stream ( upstream ). as Ui Model Flow able () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstate . post Value ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġon Transition ( Transition Event . Error ( it )) Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġui Events ( ui Event : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevents . onNext ( ui Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġui Models (): ĠLive Data < S > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Transition ( transition Event : ĠTransition Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition Observer . on Transition ( tag , Ġtransition Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġmap Event To State Stream ( event : ĠFlow able < E >): ĠFlow able < S > Ċ Ċ } Ċ