package Ġeventually . test . client Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ fun Ġ< T > ĠLive Data < T >. await (): ĠT Ġ= Ġawait ( duration Ġ= ĠDuration . of Seconds ( 3 )) Ċ Ċ fun Ġ< T > ĠLive Data < T >. await ( duration : ĠDuration ): ĠT Ġ{ ĊĠĠĠ Ġvar Ġresult : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġcount Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠ Ġ( object Ġ: ĠObserver < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ await . remove Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}). apply (:: observe Fore ver ) ĊĊĠĠĠ Ġcount . await ( duration . to Millis (), ĠTimeUnit . MILLISECONDS ) ĊĊĠĠĠ Ġreturn Ġresult Ġ?: Ġthrow ĠTimeout Exception (" Failed Ġto Ġretrieve Ġdata ") Ċ } Ċ