package Ġcom . y uby f . datastore Ċ Ċ import Ġandroidx . datastore . preferences . core . Preferences Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠTest Delegate Collector Ġ: Ġ( Preferences , ĠPreferences . Key < *> ?) Ġ-> ĠUnit Ġ{ ĊĠĠĠ Ġvar Ġis Called Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġm Latch : ĠCount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠ Ġprivate Ġvar Ġwaiting Key : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( is Called ) Ġ{ Ġ" Listener Ġwas Ġnot Ġcalled " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun ĠwaitFor Change ( seconds : ĠLong , Ġwaiting Key : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . waiting Key Ġ= Ġwaiting Key ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latch . await ( seconds , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Listener Ġwait Ġwas Ġinterrupted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( prefs : ĠPreferences , Ġkey : ĠPreferences . Key < *> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Called Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( waiting Key Ġ== Ġkey ?. name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Latch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }