package Ġme . s aket . d ank . ui Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . plus Assign Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġfor Ġsharing ĠUi Ġevent Ġstream Ġusing Ġreplay (). auto Connect () Ċ Ġ* Ġbecause Ġit 's Ġbetter Ġthan Ġshare () Ġand Ġreplay (). ref Count (). Ċ Ġ* Ċ Ġ* Ġshare () Ġdoes Ġnot Ġwork Ġvery Ġwell Ġin Ġcases Ġwhere Ġevents Ġget Ġemitted Ġbefore Ċ Ġ* Ġall Ġsubscribers Ġare Ġable Ġto Ġsubscribe Ġto Ġshare (). Ċ Ġ* Ċ Ġ* Ġreplay (). ref Count () Ġcan Ġdispose Ġand Ġsubscribe Ġmultiple Ġtimes , Ġpotentially Ċ Ġ* Ġleading Ġto Ġrace Ġconditions Ġwhen Ġthreading Ġis Ġinvolved . Ċ Ġ* Ċ Ġ* ĠCop ied Ġfrom : Ċ Ġ* Ġhttps :// github . com / simp led ot org / simple - android / blob / master / app / src / main / java / org / simple / clin ic / Replay Until Screen Is Destroyed . kt Ċ Ġ*/ Ċ class ĠRe play Until Screen Is Destroyed ( private Ġval Ġevents : ĠObservable < Ui Event >) Ġ{ ĊĊĠ Ġprivate Ġvar Ġtransforms : ĠList < Observable Transformer < Ui Event , ĠUi Event >> Ġ= Ġempty List () ĊĊĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĠ Ġprivate Ġvar Ġdis posal Setup Ġ= Ġfalse ĊĊĠ Ġfun Ġcompose ( transformer : ĠObservable Transformer < Ui Event , ĠUi Event >): ĠRe play Until Screen Is Destroyed Ġ{ ĊĠĠĠ Ġtransforms Ġ+= Ġtransformer ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġfun Ġdispose With ( terminal Stream : ĠObservable < Screen Destroyed >): ĠRe play Until Screen Is Destroyed Ġ{ ĊĠĠĠ Ġdis posal Setup Ġ= Ġtrue ĊĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠ Ġterminal Stream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġdis pos ables . clear () Ġ}) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġfun Ġreplay (): ĠObservable < Ui Event > Ġ{ ĊĠĠĠ Ġif Ġ( dis posal Setup . not ()) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠAssertionError () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġreplay ed Events Ġ= Ġevents ĊĠĠĠĠĠĠĠ Ġ. replay () ĊĠĠĠĠĠĠĠ Ġ. auto Connect ( 1 ) Ġ{ Ġdis pos ables Ġ+= Ġit Ġ} ĊĊĠĠĠ Ġreturn Ġtransforms ĊĠĠĠĠĠĠĠ Ġ. fold ( replay ed Events ) Ġ{ Ġevents , Ġtransform Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġevents . compose ( transform ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replay () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Connect ( 1 ) Ġ{ Ġdis pos ables Ġ+= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ