/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . android . demo . liver pool . util Ċ Ċ import Ġandroidx . arch . core . executor . testing . Count ing Task Executor Rule Ċ import Ġandroidx . test . espress o . Id ling Registry Ċ import Ġandroidx . test . espress o . Id ling Resource Ċ import Ġorg . junit . runner . Description Ċ import Ġjava . util . UUID Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠA ĠJ unit Ġrule Ġthat Ġregisters ĠArchitecture ĠComponents ' Ġbackground Ġthreads Ġas Ġan ĠE sp ress o Ġid ling Ċ Ġ* Ġresource . Ċ Ġ*/ Ċ class ĠTask Executor With Id ling Resource Rule Ġ: ĠCount ing Task Executor Rule () Ġ{ ĊĠĠĠ Ġ// Ġgive Ġit Ġa Ġunique Ġid Ġto Ġworkaround Ġan Ġes press o Ġbug Ġwhere Ġyou Ġcannot Ġregister / unregister ĊĠĠĠ Ġ// Ġan Ġid ling Ġresource Ġw / Ġthe Ġsame Ġname . ĊĠĠĠ Ġprivate Ġval Ġid Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġprivate Ġval Ġid ling Resource : ĠId ling Resource Ġ= Ġobject Ġ: ĠId ling Resource Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" architecture Ġcomponents Ġid ling Ġresource Ġ$ id " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Idle Now (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Task Executor With Id ling Resource Rule . is Idle ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Idle Transition Callback ( callback : ĠId ling Resource . Resource Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . add ( callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcallbacks Ġ= ĠCopy On Write ArrayList < Id ling Resource . Resource Callback >() ĊĠĠĠ Ġoverride Ġfun Ġstarting ( description : ĠDescription ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). register ( id ling Resource ) ĊĠĠĠĠĠĠĠ Ġsuper . starting ( description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinished ( description : ĠDescription ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrain Tasks ( 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġcallbacks . clear () ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). unregister ( id ling Resource ) ĊĠĠĠĠĠĠĠ Ġsuper . finished ( description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Idle () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Idle () ĊĠĠĠĠĠĠĠ Ġfor Ġ( callback Ġin Ġcallbacks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Transition To Idle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ