package Ġcom . mock lets . pl uto . modules . exceptions . an rs Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġcom . mock lets . pl uto . Pl uto Ċ import Ġcom . mock lets . pl uto . core . Debug Log Ċ import Ġcom . mock lets . pl uto . core . extensions . wait Ċ import Ġcom . mock lets . pl uto . modules . exceptions . AN R Exception Ċ import Ġcom . mock lets . pl uto . modules . exceptions . AN R Listener Ċ import Ġcom . mock lets . pl uto . modules . exceptions . an rs . An r Supervisor . Companion . AN R _ WATCH ER _ THREAD _ NAME Ċ import Ġcom . mock lets . pl uto . modules . exceptions . an rs . An r Supervisor . Companion . AN R _ WATCH ER _ TIMEOUT Ċ import Ġcom . mock lets . pl uto . modules . exceptions . an rs . An r Supervisor . Companion . LOG TAG Ċ import Ġcom . mock lets . pl uto . modules . exceptions . an rs . An r Supervisor . Companion . MAIN _ THREAD _ RESPONSE _ THRESHOLD Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Runnable ] Ġtesting Ġthe ĠUI Ġthread Ġevery Ġ 1 0 s Ġuntil Ġ[ Ġ][ . stop ] Ġis Ġcalled Ċ Ġ*/ Ċ internal Ġclass ĠAn r Supervisor Runnable Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Handler ] Ġto Ġaccess Ġthe ĠUI Ġthreads Ġmessage Ġqueue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġvar Ġan r Listener : ĠAN R Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstop Ġflag ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Stopped Ġ= Ġfalse ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġthe Ġstop Ġis Ġcompleted ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġstop Ġis Ġcompleted , Ġfalse Ġif Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFlag Ġindicating Ġthe Ġstop Ġwas Ġperformed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Synchron ized ĊĠĠĠ Ġvar Ġis Stopped Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ ĠThread . currentThread (). name Ġ= ĠAN R _ WATCH ER _ THREAD _ NAME ĊĠĠĠĠĠĠĠ Ġis Stopped Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! Thread . inter rupted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Log . d ( LOG TAG , Ġ" Check Ġfor ĠAN R ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġnew Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠAn r Supervisor Callback () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPerform Ġtest , ĠHandler Ġshould Ġrun Ġthe Ġcallback Ġwithin Ġ 1 s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . wait ( MAIN _ THREAD _ RESPONSE _ THRESHOLD ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! callback . is Called ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠAN R Exception ( m Handler . lo oper . thread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan r Listener ?. on App Not Resp on ding ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPl uto . exception Repo . save AN R ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠWait Ġuntil Ġthe Ġthread Ġrespon ds Ġagain Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . wait () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Log . d ( LOG TAG , Ġ" UI ĠThread Ġrespon ded Ġwithin Ġ 1 s ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġstopped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Stopped () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠSleep Ġfor Ġnext Ġtest Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( AN R _ WATCH ER _ TIMEOUT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġstop Ġcompleted Ġflag ĊĠĠĠĠĠĠĠ Ġis Stopped Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠDebug Log . d ( LOG TAG , Ġ" AN R Ġsuper vision Ġstopped ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcheck Stopped () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Stopped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( MAIN _ THREAD _ RESPONSE _ THRESHOLD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Stopped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInterruptedException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġthe Ġcheck ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ ĠDebug Log . d ( LOG TAG , Ġ" Stopping ...") ĊĠĠĠĠĠĠĠ Ġm Stopped Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġthe Ġcheck ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġun stop () Ġ{ ĊĠĠĠĠĠĠĠ ĠDebug Log . d ( LOG TAG , Ġ" Re vert Ġstopping ...") ĊĠĠĠĠĠĠĠ Ġm Stopped Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Listener ( listener : ĠAN R Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġan r Listener Ġ= Ġlistener ĊĠĠĠ Ġ} Ċ } Ċ