package Ġcom . isa ac udy . ar che x Ċ Ċ import Ġandroid . arch . lifecycle . Lifecycle Owner Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ Ċ interface ĠLive Object < out ĠT Ġ: ĠAny > Ġ{ ĊĠĠĠ Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠLive Observer < T >) ĊĠĠĠ Ġfun Ġobserve Fore ver ( observer : ĠLive Observer < T >) ĊĠĠĠ Ġfun Ġremove Observer ( observer : ĠLive Observer < T >) ĊĠĠĠ Ġfun Ġremove Observer s ( owner : ĠLifecycle Owner ) ĊĠĠĠ Ġfun Ġhas Observer s (): ĠBoolean ĊĠĠĠ Ġfun Ġhas Active Observer s (): ĠBoolean Ċ } Ċ Ċ open Ġclass ĠLive < T Ġ: ĠAny >( initialState : ĠT ) Ġ: ĠLive Object < T > Ġ{ ĊĠĠĠ Ġinternal Ġval Ġbacking Ġ= ĠMutable LiveData < T >(). apply Ġ{ Ġvalue Ġ= ĠinitialState Ġ} ĊĊĠĠĠ Ġopen Ġval Ġstate Ġget () Ġ= Ġbacking . value !! ĊĊĠĠĠ Ġprivate Ġval Ġobserve Fore ver Map Ġ= Ġmutable Map Of < Live Observer < T >, ĠObserver < T >>() ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking . observe ( owner , Ġcreate Observer ( observer )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Fore ver ( observer : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforever Ġ= Ġcreate Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Map [ observer ] Ġ= Ġforever ĊĠĠĠĠĠĠĠ Ġbacking . observe Fore ver ( fore ver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer ( observer : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforever Ġ= Ġobserve Fore ver Map [ observer ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Map . remove ( observer ) ĊĠĠĠĠĠĠĠ Ġbacking . remove Observer ( fore ver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer s ( owner : ĠLifecycle Owner ) Ġ= Ġbacking . remove Observer s ( owner ) ĊĊĠĠĠ Ġoverride Ġfun Ġhas Observer s (): ĠBoolean Ġ= Ġbacking . has Observer s () ĊĊĠĠĠ Ġoverride Ġfun Ġhas Active Observer s (): ĠBoolean Ġ= Ġbacking . has Active Observer s () ĊĊĠĠĠ Ġfun Ġ< R Ġ: ĠAny > Ġmap ( function : Ġ( T ) Ġ-> ĠR ) Ġ: ĠLive < R > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Ġ= Ġfunction ( back ing . value !! ) ĊĠĠĠĠĠĠĠ Ġval Ġlive Ġ= ĠLive ( initial ) ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive . back ing . value Ġ= Ġfunction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Observer ( observer : ĠLive Observer < T >): ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObserver Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMutable Live < T Ġ: ĠAny >( initialState : ĠT ) Ġ: ĠLive < T >( initialState ) Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġstate ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbacking . value !! ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost ( state : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking . post Value ( state ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠLive Event < T Ġ: ĠAny > Ġ: ĠLive Object < T > Ġ{ ĊĠĠĠ Ġprotected Ġval Ġbacking Ġ= ĠMutable LiveData < T >() ĊĊĠĠĠ Ġprivate Ġval Ġobserve Fore ver Map Ġ= Ġmutable Map Of < Live Observer < T >, ĠObserver < T >>() ĊĊĠĠĠ Ġvar Ġlast Event : ĠT ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprotected Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking . observe ( owner , Ġcreate Observer ( observer )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Fore ver ( observer : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforever Ġ= Ġcreate Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Map [ observer ] Ġ= Ġforever ĊĠĠĠĠĠĠĠ Ġbacking . observe Fore ver ( fore ver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer ( observer : ĠLive Observer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforever Ġ= Ġobserve Fore ver Map [ observer ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Map . remove ( observer ) ĊĠĠĠĠĠĠĠ Ġbacking . remove Observer ( fore ver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Observer s ( owner : ĠLifecycle Owner ) Ġ= Ġbacking . remove Observer s ( owner ) ĊĊĠĠĠ Ġoverride Ġfun Ġhas Observer s (): ĠBoolean Ġ= Ġbacking . has Observer s () ĊĊĠĠĠ Ġoverride Ġfun Ġhas Active Observer s (): ĠBoolean Ġ= Ġbacking . has Active Observer s () ĊĊĠĠĠ Ġfun Ġ< R Ġ: ĠAny > Ġmap ( function : Ġ( T ) Ġ-> ĠR ) Ġ: ĠLive Event < R > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Ġ= ĠLive Event < R >() ĊĠĠĠĠĠĠĠ Ġobserve Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive . back ing . value Ġ= Ġfunction ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Observer ( observer : ĠLive Observer < T >): ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObserver Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMutable Live Event < T Ġ: Any > Ġ: ĠLive Event < T >() Ġ{ ĊĠĠĠ Ġfun Ġsend Event ( state : ĠT ){ ĊĠĠĠĠĠĠĠ Ġbacking . value Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġbacking . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlast Event Ġ= Ġstate ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠMaybe < T >( val Ġvalue : ĠT ?) Ċ Ċ type alias ĠLive Observer < T > Ġ= Ġ( T ) Ġ-> ĠUnit