package Ġru . luck yc act us . steam ro u lette . presentation . utils . extensions Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle .* Ċ import Ġru . luck yc act us . steam ro u lette . domain . core . Event Ċ Ċ val ĠFragment . view Lifecycle Scope : ĠLifecycle Coroutine Scope ĊĠĠĠ Ġget () Ġ= Ġview Lifecycle Owner . lifecycle Scope Ċ Ċ val ĠFragment . view Lifecycle : ĠLifecycle ĊĠĠĠ Ġget () Ġ= Ġview Lifecycle Owner . lifecycle Ċ Ċ fun ĠFragment . get Lifecycle Owner ( use View Lifecycle : ĠBoolean ) Ġ= ĊĠĠĠ Ġif Ġ( use View Lifecycle ) Ġview Lifecycle Owner Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠFragment . observe ( ĊĠĠĠ Ġlive Data : ĠLive Data < T >, ĊĠĠĠ Ġuse View Lifecycle : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġcross inline ĠonChanged : Ġ( T ) Ġ-> ĠUnit Ċ ) Ġ= Ġlive Data . observe ( get Lifecycle Owner ( use View Lifecycle ), ĠonChanged ) Ċ Ċ inline Ġfun Ġ< T > ĠFragment . observe Event ( ĊĠĠĠ Ġlive Data : ĠLive Data < Event < T >>, ĊĠĠĠ Ġuse View Lifecycle : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġcross inline ĠonChanged : Ġ( T ) Ġ-> ĠUnit Ċ ): ĠObserver < Event < T >> Ġ= Ġlive Data . observe Event ( get Lifecycle Owner ( use View Lifecycle ), ĠonChanged ) Ċ Ċ inline Ġfun Ġ< T > ĠAppCompatActivity . observe ( ĊĠĠĠ Ġlive Data : ĠLive Data < T >, ĊĠĠĠ Ġcross inline Ġbody : Ġ( T ) Ġ-> ĠUnit Ċ ) Ġ= Ġlive Data . observe ( this , Ġbody ) Ċ Ċ inline Ġfun Ġ< T > ĠAppCompatActivity . observe Event ( ĊĠĠĠ Ġlive Data : ĠLive Data < Event < T >>, ĊĠĠĠ Ġcross inline Ġbody : Ġ( T ) Ġ-> ĠUnit Ċ ): ĠObserver < Event < T >> Ġ= Ġlive Data . observe Event ( this , Ġbody ) Ċ Ċ inline Ġfun Ġ< T > ĠLive Data < Event < T >> . observe Event ( ĊĠĠĠ Ġowner : ĠLifecycle Owner , ĊĠĠĠ Ġcross inline Ġon Event : Ġ( T ) Ġ-> ĠUnit Ċ ): ĠObserver < Event < T >> Ġ= Ġobserve ( owner ) Ġ{ Ġevent Ġ-> ĊĠĠĠ Ġevent . if Not Handled Ġ{ ĊĠĠĠĠĠĠĠ Ġon Event . invoke ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠLive Data < T >. first ( block : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobserve Fore ver ( object Ġ: ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ inline Ġfun Ġ< X , ĠY > ĠLive Data < X ?> . nullable Switch Map ( ĊĠĠĠ Ġcross inline Ġtransform : Ġ( X ) Ġ-> ĠLive Data < Y > Ċ ): ĠLive Data < Y ?> Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠMed iator LiveData < Y ?> () ĊĠĠĠ Ġresult . add Source ( this , Ġobject Ġ: ĠObserver < X ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm Source : ĠLive Data < out ĠY ?> ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( x : ĠX ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew LiveData Ġ= Ġx ?. let Ġ{ Ġtransform ( x ) Ġ} Ġ?: ĠMutable LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Source Ġ=== Ġnew LiveData ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Source Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove Source ( m Source !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Source Ġ= Ġnew LiveData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Source Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add Source ( m Source !! ) Ġ{ Ġy Ġ-> Ġresult . value Ġ= Ġy Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ inline Ġfun Ġ< X , ĠY > ĠLive Data < X ?> . nullable Switch Map ( ĊĠĠĠ Ġnull Value : ĠY , ĊĠĠĠ Ġcross inline Ġtransform : Ġ( X ) Ġ-> ĠLive Data < Y > Ċ ): ĠLive Data < Y > Ġ{ ĊĠĠĠ Ġreturn Ġswitch Map Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġx ?. let Ġ{ Ġit Ġ-> Ġtransform ( it ) Ġ} Ġ?: ĠMutable LiveData < Y >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Value ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠLive Data < T ?> . filter NotNull (): ĠLive Data < T > Ġ{ ĊĠĠĠ Ġreturn ĠMed iator LiveData < T >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( this @ filter NotNull ) Ġ{ Ġit ?. let Ġ{ Ġvalue Ġ= Ġit Ġ} Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< A , ĠB , ĠResult > ĠLive Data < A >. combine ( ĊĠĠĠ Ġother : ĠLive Data < B >, ĊĠĠĠ Ġcombin er : Ġ( A , ĠB ) Ġ-> ĠResult Ċ ): ĠLive Data < Result > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠMed iator LiveData < Result >() ĊĠĠĠ Ġresult . add Source ( this ) Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġother . value ĊĠĠĠĠĠĠĠ Ġif Ġ( b Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . post Value ( combin er ( a , Ġb )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġresult . add Source ( other ) Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġthis @ combine . value ĊĠĠĠĠĠĠĠ Ġif Ġ( a Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . post Value ( combin er ( a , Ġb )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ }