package Ġio . github . d roid ka igi . conf sched 2 0 1 9 . ext Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġfrom : Ġhttps :// github . com / Kotlin / kotlin x . coroutines / pull / 7 6 0 Ċ Ġ* ĠModify Ġto Ġuse Ġ[ Coroutine Plugin ] Ġfor Ġtesting Ċ Ġ* ĠReturns Ġa Ġ[ Coroutine Scope ] Ġthat Ġuses Ġ[ Dispatch ers . Main ] Ġby Ġdefault , Ġand Ġthat Ġis Ġcancelled Ġwhen Ċ Ġ* Ġthe Ġ[ Lifecycle ] Ġreaches Ġ[ Lifecycle . State . DESTROY ED ] Ġstate . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġthis Ġvalue Ġis Ġcached Ġuntil Ġthe ĠLifecycle Ġreaches Ġthe Ġdestroyed Ġstate . Ċ Ġ*/ Ċ val ĠLifecycle . coroutine Scope : ĠCor outine Scope ĊĠĠĠ Ġget () Ġ= Ġcached Lifecycle Coroutine Scopes [ this ] Ġ?: Ġjob . let Ġ{ Ġjob Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġnew Scope Ġ= ĠCor outine Scope ( job Ġ+ ĠDispatch ers . Main ) ĊĠĠĠĠĠĠĠ Ġif Ġ( job . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Lifecycle Coroutine Scopes [ this ] Ġ= Ġnew Scope ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob . invoke On Completion Ġ{ Ġ_ Ġ-> Ġcached Lifecycle Coroutine Scopes Ġ-= Ġthis Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Scope ĊĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠCalls Ġ[ Lifecycle . coroutine Scope ] Ġfor Ġthe Ġ[ Lifecycle ] Ġof Ġthis Ġ[ Lifecycle Owner ]. Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġan Ġinline Ġproperty , Ġjust Ġthere Ġfor Ġconvenient Ġusage Ġfrom Ġany Ġ[ Lifecycle Owner ], Ċ Ġ* Ġlike ĠFragment Activity , ĠAppCompatActivity , ĠFragment Ġand ĠLifecycle Service . Ċ Ġ*/ Ċ inline Ġval ĠLifecycle Owner . coroutine Scope Ġget () Ġ= Ġlifecycle . coroutine Scope Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Supervisor Job ] Ġthat Ġwill Ġbe Ġcancelled Ġas Ġsoon Ġas Ġthe Ġ[ Lifecycle ] Ġreaches Ċ Ġ* Ġ[ Lifecycle . State . DESTROY ED ] Ġstate . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġthis Ġvalue Ġis Ġcached Ġuntil Ġthe ĠLifecycle Ġreaches Ġthe Ġdestroyed Ġstate . Ċ Ġ* Ċ Ġ* ĠYou Ġcan Ġuse Ġthis Ġjob Ġfor Ġcustom Ġ[ Coroutine Scope ] s , Ġor Ġas Ġa Ġparent Ġ[ Job ]. Ċ Ġ*/ Ċ val ĠLifecycle . job : ĠJob ĊĠĠĠ Ġget () Ġ= Ġcached Lifecycle Jobs [ this ] Ġ?: Ġcreate Job (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Lifecycle Jobs [ this ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke On Completion Ġ{ Ġ_ Ġ-> Ġcached Lifecycle Jobs Ġ-= Ġthis Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ private Ġval Ġcached Lifecycle Jobs Ġ= ĠConcurrent HashMap < Lifecycle , ĠJob >() Ċ private Ġval Ġcached Lifecycle Coroutine Scopes Ġ= ĠConcurrent HashMap < Lifecycle , ĠCor outine Scope >() Ċ