// ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ // ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ċ package Ġcom . azure . android . communication . ui . calling composite demo app . util Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroidx . test . espress o . No Matching View Exception Ċ import Ġandroidx . test . espress o . View Interaction Ċ import Ġjunit . framework . Assertion Failed Error Ċ Ċ type alias ĠView Matcher Function Ptr Ġ= Ġ() Ġ-> ĠView Interaction Ċ Ċ class ĠView Is Displayed Resource Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ WAIT _ TIME Ġ= Ġ 2 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME D _ OUT _ VALUE Ġ= Ġ 5 0 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IllegalStateException :: class ) ĊĠĠĠ Ġfun Ġwait Until View Is Displayed ( id ling Check : ĠView Matcher Function Ptr ): ĠView Interaction Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtime Out Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġview Interaction : ĠView Interaction ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! is Ready Ġ&& Ġtime Out Ġ< ĠTIME D _ OUT _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Interaction Ġ= Ġid ling Check () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex Ġis ĠAssertion Failed Error Ġ|| Ġex Ġis ĠNo Matching View Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( DEFAULT _ WAIT _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Out Ġ+= ĠDEFAULT _ WAIT _ TIME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ready ) Ġreturn Ġview Interaction ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Timed Ġout Ġwaiting Ġfor Ġview ") ĊĠĠĠ Ġ} Ċ } Ċ