/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" Activity Util ") Ċ Ċ package Ġandroidx . test . espress o . device . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . util . Log Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġandroidx . test . runner . lifecycle . Activity Lifecycle Callback Ċ import Ġandroidx . test . runner . lifecycle . Activity Lifecycle Monitor Registry Ċ import Ġandroidx . test . runner . lifecycle . Stage Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** ĠCollection Ġof Ġutility Ġmethods Ġfor Ġinteracting Ġwith Ġactivities . Ġ*/ Ċ private Ġval ĠTAG Ġ= Ġ" Activity Util " Ċ Ċ /** Ċ Ġ* ĠDetect s Ġif Ġconfiguration Ġchanges Ġare Ġhandled Ġby Ġthe Ġactivity . Ċ Ġ* Ċ Ġ* Ġ@ param Ġconfig Bit , Ġbit Ġin ĠActivity Info # config Changes Ġthat Ġindicates Ġwhether Ġthe Ġactivity Ġcan Ċ Ġ* Ġhandle Ġthis Ġtype Ġof Ġconfiguration Ġchange . Ċ Ġ* Ġ@ return Ġwhether Ġthe Ġactivity Ġhandles Ġthe Ġgiven Ġconfiguration Ġchange . Ċ Ġ*/ Ċ fun ĠActivity . is Configuration Change Handled ( config Bit : ĠInt ): ĠBoolean Ġ{ ĊĠ Ġval Ġactivity Info Ġ= Ġthis . get PackageManager (). getActivity Info ( this . getComponent Name (), Ġ 0 ) ĊĠ Ġreturn Ġ( activity Info . config Changes Ġand Ġconfig Bit ) Ġ!= Ġ 0 Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġfirst Ġactivity Ġfound Ġin Ġthe ĠRES U MED Ġstage , Ġor Ġnull Ġif Ġnone Ġare Ġfound Ġafter Ġwaiting Ġup Ċ Ġ* Ġto Ġtwo Ġseconds Ġfor Ġone . Ċ Ġ*/ Ċ fun Ġget Res umed Activity OrNull (): ĠActivity ? Ġ{ ĊĠ Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠ ĠInstrument ation Registry . get Instrumentation (). run On Main Sync Ġ{ ĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġactivities : ĠCollection < Activity > Ġ= ĊĠĠĠĠĠĠĠ ĠActivity Lifecycle Monitor Registry . getInstance (). get Activities In Stage ( Stage . RE SU MED ) ĊĠĠĠĠĠ Ġif Ġ( activities . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Names Ġ= Ġactivities . map Ġ{ Ġit . getLocal ClassName () Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠ Ġ" More Ġthan Ġone Ġactivity Ġwas Ġfound Ġin Ġthe ĠRES U MED Ġstage . ĠActiv ities Ġfound : Ġ$ activity Names " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( activities . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" No Ġactivity Ġfound Ġin Ġthe ĠRES U MED Ġstage . ĠWaiting Ġup Ġto Ġ 2 Ġseconds Ġfor Ġone .") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ ĠActivity Lifecycle Monitor Registry . getInstance () ĊĠĠĠĠĠĠĠĠĠ Ġ. add Lifecycle Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠActivity Lifecycle Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Lifecycle Changed ( new Activity : ĠActivity , Ġstage : ĠStage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stage Ġ== ĠStage . RE SU MED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Found Ġ${ new Activity . getLocal ClassName ()} Ġin Ġthe ĠRES U MED Ġstage .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Lifecycle Monitor Registry . getInstance (). remove Lifecycle Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġnew Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġactivities . elementAt OrNull ( 0 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ ĠInstrument ation Registry . get Instrumentation (). waitFor Idle Sync () ĊĠ Ġreturn Ġactivity Ċ } Ċ