package Ġcom . e ag les ak ura . ar my knife . android . reactivex Ċ Ċ import Ġandroidx . annotation . Check Result Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġcom . e ag les ak ura . ar my knife . android . extensions . subscribe With Cancel Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . channels . Channel Ċ Ċ /** Ċ Ġ* ĠMake ĠLive Data Ġfrom ĠObservable Ġin ĠRx Java . Ċ Ġ* Ċ Ġ* ĠLive Data Ġcalls Ġ" dispose ()" Ġmethod Ġat ĠIn active Ġevent . Ċ Ġ* ĠYou Ġshould Ġnot Ġcall ĠDis posable . dispose () Ġmethod . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun Ġ< T > ĠObservable < T >. to LiveData (): ĠLive Data < T > Ġ{ ĊĠĠĠ Ġreturn ĠRx LiveData ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMake ĠChannel Ġfrom ĠObservable Ġin ĠRx Java . Ċ Ġ* Ċ Ġ* ĠCA UTION !! ĠYou Ġwill Ġfinished Ġto Ġusing , Ġthen Ġshould Ġcall Ġ" Channel . close ()" Ġmethod . Ċ Ġ* ĠOr , ĠYou Ġmay Ġuse ĠChannel . consume {} Ġblock . Ċ Ġ* Ċ Ġ* ĠChannel Ġcalls Ġ" dispose ()" Ġmethod Ġat ĠChannel . close () Ġor ĠChannel . cancel (). Ċ Ġ* ĠYou Ġshould Ġnot Ġcall ĠDis posable . dispose () Ġmethod . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ċ Ġ* Ġobservable . to Channel (). consume Ġ{ Ċ Ġ* ĠĠĠĠĠ Ġ// Ġsomething ... Ċ Ġ* Ġ} ĠĠĠ Ġ// ĠChannel . close () Ġon Ġexit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ @ Check Result Ċ fun Ġ< T > ĠObservable < T >. to Channel ( dispatcher : ĠCor outine Dispatcher ): ĠChannel < T > Ġ{ ĊĠĠĠ Ġreturn ĠObserver Channel < T >( dispatcher ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle : ĠLifecycle Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġwith ( lifecycle , ĠLifecycle . Event . ON _ DESTROY ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle : ĠLifecycle , ĊĠĠĠ Ġdispose On : ĠLifecycle . Event Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġvar Ġorigin : ĠDis posable ? Ġ= Ġthis ĊĊĠĠĠ Ġlifecycle . subscribe With Cancel Ġ{ Ġevent , Ġcancel Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== Ġdispose On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Disposed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġorigin ?. is Disposed Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle : ĠLifecycle , ĊĠĠĠ Ġdispose On : ĠLifecycle . State Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġvar Ġorigin : ĠDis posable ? Ġ= Ġthis ĊĊĠĠĠ Ġlifecycle . subscribe With Cancel Ġ{ Ġ_, Ġcancel Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState Ġ== Ġdispose On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Disposed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġorigin ?. is Disposed Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle : ĠLifecycle , ĊĠĠĠ Ġdispose On : Ġ( event : ĠLifecycle . Event ) Ġ-> ĠBoolean Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġvar Ġorigin : ĠDis posable ? Ġ= Ġthis ĊĊĠĠĠ Ġlifecycle . subscribe With Cancel Ġ{ Ġevent , Ġcancel Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( dispose On ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Disposed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġorigin ?. is Disposed Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġdispose On : ĠLifecycle . Event Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġwith ( lifecycle Owner . lifecycle , Ġdispose On ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠDis posable Ġinterface Ġlink Ġto ĠLifecycle . Ċ Ġ* ĠWhen Ġlifecycle Ġto Ġdestroyed , Ġthen Ġcall ĠDis posable . dispose () Ġfunction . Ċ Ġ* Ċ Ġ* ĠIf ĠCall Ġ" Disposable . dispose ()" Ġfunction Ġbefore Ġthan Ġdestroyed . Ċ Ġ* Ġit Ġis Ġsupported , Ġyou Ġcan Ġit . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠDis posable . with ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġwith ( lifecycle Owner . lifecycle , Ġdispose On Ġ= ĠLifecycle . Event . ON _ DESTROY ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSubscribe Ġvalue Ġfrom Ġany ĠObservable Ġwith ĠLifecycle . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ @ Deprecated (" This Ġfunction Ġnot Ġworking ( can 't Ġcall Ġthis . ĠCompiler Ġselect Ġto Ġother Ġoverload Ġfunctions ). ") Ċ fun Ġ< T > ĠObservable < T >. subscribe ( ĊĠĠĠ Ġlifecycle : ĠLifecycle , ĊĠĠĠ Ġon Next : Ġ(( next : ĠT ) Ġ-> ĠUnit )? , ĊĠĠĠ ĠonError : Ġ(( err : ĠThrowable ) Ġ-> ĠUnit )? , ĊĠĠĠ ĠonComplete : Ġ(() Ġ-> ĠUnit )? Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġsubscribe ( ĊĠĠĠĠĠĠĠ Ġ{ Ġnext Ġ-> Ġon Next ?. invoke ( next ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġerr Ġ-> ĠonError ?. invoke ( err ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĠonComplete ?. invoke () Ġ} ĊĠĠĠ Ġ). with ( lifecycle , ĠLifecycle . Event . ON _ DESTROY ) Ċ } Ċ Ċ /** Ċ Ġ* ĠLifecycle Ġto ĠRx Java Ġobservable . Ċ Ġ* Ċ Ġ* ĠObservable Ġwill Ġcall Ġ" onComplete ()" Ġfunction Ġat Ġlifecycle Ġin Ġ" Event . ON _ DESTROY ". Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my knife - jet pack Ċ Ġ*/ Ċ fun ĠLifecycle . to Observable (): ĠObservable < Lifecycle . Event > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠPublish Subject . create < Lifecycle . Event >() ĊĠĠĠ Ġadd Observer ( object Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Keep ĊĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ ANY ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Any (@ Suppress (" UNUSED _ PARAMETER ") Ġsource : ĠLifecycle Owner , Ġevent : ĠLifecycle . Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . onNext ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* Ġauto Ġdispose Ġwith ĠLifecycle . State . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġ Ġauto Dispose ( lifecycle Owner , ĠState . DESTROY ED ) Ġ{ Ċ Ġ* ĠĠĠĠĠ Ġmake Observable () Ċ Ġ* Ġ Ġ} Ċ Ġ*/ Ċ inline Ġfun Ġauto Dispose ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġdispose On : ĠLifecycle . State , ĊĠĠĠ Ġblock : Ġ() Ġ-> ĠDis posable Ċ ) Ġ{ ĊĠĠĠ Ġblock (). with ( lifecycle Owner . lifecycle , Ġdispose On ) Ċ } Ċ Ċ /** Ċ Ġ* Ġauto Ġdispose Ġwith ĠLifecycle . State . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġ Ġauto Dispose ( lifecycle Owner , ĠEvent . ON _ DESTROY ) Ġ{ Ċ Ġ* ĠĠĠĠĠ Ġmake Observable () Ċ Ġ* Ġ Ġ} Ċ Ġ*/ Ċ inline Ġfun Ġauto Dispose ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġdispose On : ĠLifecycle . Event , ĊĠĠĠ Ġblock : Ġ() Ġ-> ĠDis posable Ċ ) Ġ{ ĊĠĠĠ Ġblock (). with ( lifecycle Owner . lifecycle , Ġdispose On ) Ċ } Ċ