@ file : Suppress (" unused ") Ċ Ċ package Ġcom . e ag les ak ura . ar my knife . android . extensions Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . e ag les ak ura . ar my knife . runtime . extensions . send Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* ĠOb serve Ġdata Ġwhen ĠLifecycle Ġalive . Ċ Ġ* ĠThis Ġmethod Ġcall Ġobserve Ġalways ( Example , ĠActivity / Fragment Ġpaused Ġand Ġmore ). Ċ Ġ* ĠIf Ġobserver Ġshould Ġhandle Ġdata Ġevery Ġtime Ġand Ġalways , ĠMay Ġuse Ġthis Ġmethod . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġfun ĠonCreate () Ġ{ Ċ Ġ* ĠĠĠĠĠ Ġexample Value . observe Alive ( this ) Ġ{ Ġvalue Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġsomething , Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġmessage Ġreceive Ġon Ġpa using . Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠ Ġexample Value . observe ( this ) Ġ{ Ġvalue Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġsomething , Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġmessage Ġ" NOT " Ġreceive Ġon Ġpa using . Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ@ author Ġ@ e ag les ak ura Ċ Ġ* Ġ@ link Ġhttps :// github . com / e ag les ak ura / ar my - knife Ċ Ġ*/ Ċ fun Ġ< T > ĠLive Data < T >. observe Alive ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < T >) Ġ{ ĊĠĠĠ Ġobserve Fore ver ( observer ) ĊĠĠĠ Ġowner . lifecycle . subscribe Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAwait Ġreceive Ġa Ġdata Ġin ĠCor outines . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġval Ġlive Data : ĠLive Data < String > Ġ= Ġ... Ċ Ġ* Ġ// Ġawait ĠLive Data 's Ġdata Ċ Ġ* Ġval Ġurl Ġ= Ġlive Data . await () Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġval Ġlive Data : ĠLive Data < String > Ġ= Ġ... Ċ Ġ* Ġ// Ġawait Ġwith Ġfilter Ċ Ġ* Ġval Ġurl Ġ= Ġlive Data . await Ġ{ Ġit . startsWith (" http ") Ġ} Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > ĠLive Data < T >. await ( filter : Ġ( value : ĠT ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ}): ĠT Ġ{ ĊĠĠĠ Ġ// Ġcheck Ġinitial Ġvalue . ĊĠĠĠ Ġvalue ?. also Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchannel Ġ= ĠChannel < T >() ĊĠĠĠ Ġval Ġobserver Ġ= ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠ Ġif Ġ( filter ( newValue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( Dispatch ers . Main , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchannel . receive () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Observer ( observer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAwait Ġreceive Ġa Ġdata Ġin ĠCor outines . Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġval Ġlive Data : ĠLive Data < String > Ġ= Ġ... Ċ Ġ* Ġ// Ġawait ĠLive Data 's Ġdata Ċ Ġ* Ġval Ġurl Ġ= Ġlive Data . await () Ċ Ġ* Ċ Ġ* Ġe . g .) Ċ Ġ* Ġval Ġlive Data : ĠLive Data < String > Ġ= Ġ... Ċ Ġ* Ġ// Ġawait Ġwith Ġfilter Ċ Ġ* Ġval Ġurl Ġ= Ġlive Data . await Ġ{ Ġit . startsWith (" http ") Ġ} Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > ĠLive Data < T >. await ( ĊĠĠĠ Ġcheck Initial Value : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġfilter : Ġ( value : ĠT ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ} Ċ ): ĠT Ġ{ ĊĠĠĠ Ġ// Ġcheck Ġinitial Ġvalue . ĊĠĠĠ Ġif Ġ( check Initial Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchannel Ġ= ĠChannel < T >() ĊĠĠĠ Ġval Ġobserver Ġ= ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠ Ġif Ġ( filter ( newValue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( Dispatch ers . Main , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġchannel . receive () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }