/*** Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠH adi ĠL ash k ari ĠG hou chan i Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* Ġ*/ Ċ Ċ package Ġcom . github . had il q . cor out inel ifecycle handler Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . github . had il q . android lifecycle handler . Android Life Handler Impl Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . channels . Broadcast Channel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Flow Collector Ċ import Ġkotlin . coroutines . Empty Coroutine Context Ċ Ċ /*** Ċ Ġ* ĠCreates Ġa Ġhandler Ġto Ġsync Ġthe Ġsubscription . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġuse : Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy Android Activity Ġ: ĠComponent Activity , ĠCor outine Scope Ġby ĠMain Scope (){ Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġflow Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. observe In ( this )() Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġ[ Flow ] Ġis Ġthe Ġupstream . Ċ Ġ* ĠThe Ġ[ scope ] Ġis Ġan Ġoptional ĠScope Ġto Ġhave Ġmore Ġcontrol Ġon Ġthe Ġcancell ations . Ċ Ġ* ĠThe Ġ[ handler ] Ġto Ġhelp Ġyou Ġwith Ġdependency Ġin version Ġprinciple . Ċ Ġ* ĠThe Ġ[ Lifecycle Owner ] Ġis Ġthe ĠActivity Ġor ĠFragment . Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ fun Ġ< T > ĠFlow < T >. observe In ( ĊĠĠĠ Ġscope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Empty Coroutine Context ), ĊĠĠĠ Ġhandler : ĠCor outine Life Handler < T > Ġ= ĠCor outine Life Handler Impl ( Android Life Handler Impl ()) Ċ ): ĠLifecycle Owner . () Ġ-> ĠUnit Ġ= Ġhandler . observe In ( this , Ġscope ) Ċ Ċ /*** Ċ Ġ* ĠCreates Ġa Ġhandler Ġto Ġsync Ġthe Ġsubscription . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġuse : Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy Android Activity Ġ: ĠComponent Activity , ĠCor outine Scope Ġby ĠMain Scope (){ Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġflow Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this ) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġ[ Flow ] Ġis Ġthe Ġupstream . Ċ Ġ* ĠThe Ġ[ scope ] Ġis Ġan Ġoptional ĠScope Ġto Ġhave Ġmore Ġcontrol Ġon Ġthe Ġcancell ations . Ċ Ġ* ĠThe Ġ[ handler ] Ġto Ġhelp Ġyou Ġwith Ġdependency Ġin version Ġprinciple . Ċ Ġ* ĠThe Ġ[ Lifecycle Owner ] Ġis Ġthe ĠActivity Ġor ĠFragment . Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ fun Ġ< T > ĠFlow < T >. observe ( ĊĠĠĠ Ġscope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Empty Coroutine Context ), ĊĠĠĠ Ġhandler : ĠCor outine Life Handler < T > Ġ= ĠCor outine Life Handler Impl ( Android Life Handler Impl ()) Ċ ): ĠLifecycle Owner .( ĊĠĠĠ Ġsuspend Ġ( T ) Ġ-> ĠUnit Ċ ) Ġ-> ĠUnit Ġ= Ġhandler . observe ( this , Ġscope ) Ċ Ċ /*** Ċ Ġ* ĠCreates Ġa Ġhandler Ġto Ġsync Ġthe Ġsubscription . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġuse : Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy Android Activity Ġ: ĠComponent Activity , ĠCor outine Scope Ġby ĠMain Scope () Ġ{ Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġ( flow . observe OnError ( this )) (:: handle String , Ġhandle Error ()) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġ[ Flow ] Ġis Ġthe Ġupstream . Ċ Ġ* ĠThe Ġ[ scope ] Ġis Ġan Ġoptional ĠScope Ġto Ġhave Ġmore Ġcontrol Ġon Ġthe Ġcancell ations . Ċ Ġ* ĠThe Ġ[ handler ] Ġto Ġhelp Ġyou Ġwith Ġdependency Ġin version Ġprinciple . Ċ Ġ* ĠThe Ġ[ Lifecycle Owner ] Ġis Ġthe ĠActivity Ġor ĠFragment . Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ fun Ġ< T > ĠFlow < T >. observe OnError ( ĊĠĠĠ Ġscope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Empty Coroutine Context ), ĊĠĠĠ Ġhandler : ĠCor outine Life Handler < T > Ġ= ĠCor outine Life Handler Impl ( Android Life Handler Impl ()) Ċ ): ĠLifecycle Owner .( ĊĠĠĠ Ġsuspend Ġ( T ) Ġ-> ĠUnit , Ġsuspend ĠFlow Collector < T >. ( Throwable ) Ġ-> ĠUnit Ċ ) Ġ-> ĠUnit Ġ= Ġhandler . observe OnError ( this , Ġscope ) Ċ Ċ /*** Ċ Ġ* ĠCreates Ġa Ġhandler Ġto Ġsync Ġthe Ġsubscription . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġuse : Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy Android Activity Ġ: ĠComponent Activity , ĠCor outine Scope Ġby ĠMain Scope () Ġ{ Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġ( flow . observe OnError On Completion ( this )) (:: handle String , Ġhandle Error (), Ġhandle Completion ()) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġ[ Flow ] Ġis Ġthe Ġupstream . Ċ Ġ* ĠThe Ġ[ scope ] Ġis Ġan Ġoptional ĠScope Ġto Ġhave Ġmore Ġcontrol Ġon Ġthe Ġcancell ations . Ċ Ġ* ĠThe Ġ[ handler ] Ġto Ġhelp Ġyou Ġwith Ġdependency Ġin version Ġprinciple . Ċ Ġ* ĠThe Ġ[ Lifecycle Owner ] Ġis Ġthe ĠActivity Ġor ĠFragment . Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ fun Ġ< T > ĠFlow < T >. observe OnError On Completion ( ĊĠĠĠ Ġscope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Empty Coroutine Context ), ĊĠĠĠ Ġhandler : ĠCor outine Life Handler < T > Ġ= ĠCor outine Life Handler Impl ( ĊĠĠĠĠĠĠĠ ĠAndroid Life Handler Impl () ĊĠĠĠ Ġ) Ċ ): ĠLifecycle Owner .( ĊĠĠĠ Ġsuspend Ġ( T ) Ġ-> ĠUnit , ĊĠĠĠ Ġsuspend ĠFlow Collector < T >. ( Throwable ) Ġ-> ĠUnit , ĊĠĠĠ Ġsuspend ĠFlow Collector < T >. ( cause : ĠThrowable ?) Ġ-> ĠUnit Ċ ) Ġ-> ĠUnit Ġ= Ġhandler . observe OnError On Completion ( this , Ġscope ) Ċ Ċ /*** Ċ Ġ* ĠTo Ġwrap Ġup Ġthe Ġ[ Broadcast Channel ] Ġand Ġhide Ġit Ġfrom Ġthe Ġ[ Lifecycle Owner ], Ġwhich Ġis Ġan ĠActivity Ġor Ġa Ċ Ġ* ĠFragment . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġuse : Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy ViewModel Ġ: ĠViewModel () Ġ{ Ċ Ġ* Ċ Ġ* ĠĠ Ġprivate Ġval Ġpublisher Ġ= ĠBroadcast Channel < String >( CON FL ATED ) Ċ Ġ* ĠĠ Ġval Ġstring Emitter Ġ= Ġpublisher . to Lifecycle Aware () Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġ[ handler ] Ġto Ġhelp Ġyou Ġwith Ġdependency Ġin version Ġprinciple . Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ @ Flow Preview Ċ fun Ġ< T > ĠBroadcast Channel < T >. to Life Aware ( ĊĠĠĠ Ġhandler : ĠCor outine Life Handler < T > Ġ= ĠCor outine Life Handler Impl ( ĊĠĠĠĠĠĠĠ ĠAndroid Life Handler Impl () ĊĠĠĠ Ġ) Ċ ): ĠLife Aware < T > Ġ= ĠLife Aware Impl ( this , Ġhandler ) Ċ