package Ġcz . eman . ka al . presentation . lifecycle . channels Ċ Ċ import Ġandroidx . annotation . Any Thread Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers . Main Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . channels . Closed Send Channel Exception Ċ import Ġkotlinx . coroutines . channels . Receive Channel Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ[ Receive Channel ] Ġemit ting Ġ[ Lifecycle . Event ] Ġupdates Ċ Ġ*/ Ċ class ĠLifecycle Event Channel Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġlifecycle : ĠLifecycle , ĊĠĠĠ Ġprivate Ġval Ġchannel : ĠChannel < Lifecycle . Event >, ĊĠĠĠ Ġprivate Ġval Ġscope : ĠCor outine Scope Ċ ) Ġ: ĠLifecycle Observer , ĠReceive Channel < Lifecycle . Event > Ġby Ġchannel Ġ{ ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠĠĠĠĠ Ġcapacity : ĠInt Ġ= ĠChannel . REN DE Z VO US , ĊĠĠĠĠĠĠĠ Ġscope : ĠCor outine Scope ĊĠĠĠ Ġ) Ġ: Ġthis ( lifecycle Owner . lifecycle , ĠChannel ( capacity ), Ġscope ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Any Thread ĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch ( Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( this @ Lifecycle Event Channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchannel . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ ANY ) ĊĠĠĠ Ġfun Ġon Any ( source : ĠLifecycle Owner , Ġevent : ĠLifecycle . Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( event Ġ!= ĠLifecycle . Event . ON _ ANY ) Ġ{ Ġ" Invalid Ġevent Ġ- Ġshould Ġnot Ġnever Ġhappen " Ġ} ĊĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClosed Send Channel Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchannel Ġjust Ġclosed , Ġignore Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ