package Ġcom . zero ami . common lib . rx . r xb us Ċ Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġio . reactivex . subjects . Subject Ċ Ċ /** Ċ Ġ* Ġ åŁºäºİ Rx Java å®ŀçİ° çļĦ EventBus Ċ Ġ* Ċ Ġ* Ġ@ author ĠZero ami Ċ Ġ*/ Ċ object ĠL Rx Bus Ġ{ ĊĊĠĠĠ Ġval ĠNULL Ġ= ĠL Null () ĊĠĠĠ Ġval ĠNULL _ TYPE : ĠClass < L Null > Ġ= ĠL Null :: class . java ĊĊĠĠĠ Ġprivate Ġval Ġm Subject : ĠSubject < Any > Ġby Ġlazy Ġ{ ĠPublish Subject . create < Any >(). to Serialized () Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Sticky Event Map : ĠMutable Map < Class <* >, ĠAny > Ġby Ġlazy Ġ{ ĠConcurrent HashMap < Class <* >, ĠAny >() Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Sticky ActionEvent Map : ĠMutable Map < String , ĠAny > Ġby Ġlazy Ġ{ ĠConcurrent HashMap < String , ĠAny >() Ġ} ĊĊĠĠĠ Ġfun Ġpost ( event : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Subject . onNext ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost ( event : ĠAny , Ġaction : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Subject . onNext ( L Rx Bus Event ( action , Ġevent )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Action ( action : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Subject . onNext ( L Rx Bus Event ( action , ĠNULL )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġsubscribe ( eventType : ĠClass < T >, Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Subject . of Type ( eventType ). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ{}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġsubscribe ( eventType : ĠClass < T >, Ġaction : ĠString , Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Subject . filter ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ! is ĠL Rx Bus Event ) Ġreturn @ filter Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ filter ĠeventType . is Instance ( event . data ) Ġ&& Ġaction Ġ== Ġevent . action ĊĠĠĠĠĠĠĠ Ġ}). map ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġit Ġas ĠL Rx Bus Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġevent . data Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ}). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ{}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe Action ( action : ĠString , Ġblock : Ġ() Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsubscribe ( NULL _ TYPE , Ġaction , Ġ{ Ġblock () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Sticky ( event : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky Event Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky Event Map . put ( event . java Class , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpost ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Sticky ( event : ĠAny , Ġaction : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky ActionEvent Map . put ( event . java Class . toString () Ġ+ Ġaction , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpost ( event , Ġaction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Sticky Action ( action : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky ActionEvent Map . put ( NULL . java Class . toString () Ġ+ Ġaction , ĠNULL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpost ( NULL , Ġaction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġsubscribe Sticky ( eventType : ĠClass < T >, Ġis Auto Remove : ĠBoolean , Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky Event Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġm Sticky Event Map [ eventType ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( eventType . cast ( event )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Auto Remove ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky Event Map . remove ( eventType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsubscribe ( eventType , Ġblock ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġsubscribe Sticky ( eventType : ĠClass < T >, Ġaction : ĠString , Ġis Auto Remove : ĠBoolean , Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġm Sticky ActionEvent Map [ eventType . toString () Ġ+ Ġaction ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( eventType . cast ( event )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Auto Remove ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky ActionEvent Map . remove ( eventType . toString () Ġ+ Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsubscribe ( eventType , Ġaction , Ġblock ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe Sticky Action ( action : ĠString , Ġis Auto Remove : ĠBoolean , Ġblock : Ġ() Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsubscribe Sticky ( NULL _ TYPE , Ġaction , Ġis Auto Remove , Ġ{ Ġblock () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġget Sticky Event ( eventType : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky Event Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠeventType . cast ( m Sticky Event Map [ eventType ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġget Sticky Event ( eventType : ĠClass < T >, Ġaction : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠeventType . cast ( m Sticky ActionEvent Map [ eventType . toString () Ġ+ Ġaction ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġremove Sticky Event ( eventType : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky Event Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠeventType . cast ( m Sticky Event Map . remove ( eventType )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġremove Sticky Event ( eventType : ĠClass < T >, Ġaction : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠeventType . cast ( m Sticky ActionEvent Map . remove ( eventType . toString () Ġ+ Ġaction )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Sticky Events () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky Event Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky Event Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Sticky ActionEvent Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sticky ActionEvent Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Observer s (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Subject . has Observer s () ĊĠĠĠ Ġ} Ċ } Ċ