Ċ Ċ package Ġcom . shadow fx . shadow fx movie finder . util Ċ Ċ import Ġandroidx . test . espress o . Id ling Registry Ċ import Ġandroidx . test . espress o . Id ling Resource Ċ Ċ import Ġorg . junit . rules . Test Watcher Ċ 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 Ġan Ġes press o Ġid ling Ġresource Ġwhich Ġcounts Ġall Ġtasks Ġthat Ġare Ġsubmitted Ċ Ġ* Ġvia Ġ[ App Executors ]. Ċ Ġ*/ Ċ class ĠCount ing App Executors Rule Ġ: ĠTest Watcher () Ġ{ ĊĠĠĠ Ġ// Ġ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 Ġcounting App Executors Ġ= ĠCount ing App Executors Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Transition To Idle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcallbacks Ġ= ĠCopy On Write ArrayList < Id ling Resource . Resource Callback >() ĊĠĠĠ Ġprivate Ġval Ġid ling Resource : ĠId ling Resource Ġ= Ġobject Ġ: ĠId ling Resource Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" App ĠExec utors ĠId ling ĠResource Ġ$ id " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Idle Now () Ġ= Ġcounting App Executors . task Count () Ġ== Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Idle Transition Callback ( callback : ĠId ling Resource . Resource Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . add ( callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstarting ( description : ĠDescription ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). register ( id ling Resource ) ĊĠĠĠĠĠĠĠ Ġsuper . starting ( description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinished ( description : ĠDescription ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcounting App Executors . drain Tasks ( 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġcallbacks . clear () ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). unregister ( id ling Resource ) ĊĠĠĠĠĠĠĠ Ġsuper . finished ( description ) ĊĠĠĠ Ġ} Ċ }