package Ġcom . kernel . co lib ri . core . helpers Ċ Ċ import Ġandroid . support . test . Instrumentation Registry Ċ import Ġandroid . support . test . uia utom ator .* Ċ import Ġandroid . util . Log Ċ import Ġcom . kernel . co lib ri . core . Config . TAG Ċ import Ġjava . util .* Ċ Ċ class ĠUi Watcher Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġerrors Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġfun Ġregister An r And Crash Watch ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice . register Watcher (" AN R ") Ġ{ Ġhandle An r () Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . register Watcher (" AN R 2 ") Ġ{ Ġhandle An r 2 () Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . register Watcher (" CR ASH ") Ġ{ Ġhandle Crash () Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . register Watcher (" CR ASH 2 ") Ġ{ Ġhandle Crash 2 () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle An r (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġdevice . find Object ( Ui Selector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. className (" com . android . server . am . App Not Resp on ding Dialog ")) ĊĠĠĠĠĠĠĠ Ġvar Ġerror Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( window . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġwindow . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUi Object NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġcare , Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon An r Detected ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle An r 2 (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġdevice . find Object ( Ui Selector (). packageName (" android ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text Contains (" is n 't Ġrespon ding .")) ĊĠĠĠĠĠĠĠ Ġif Ġ( window . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġwindow . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUi Object NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġcare , Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon An r Detected ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Crash (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġdevice . find Object ( Ui Selector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. className (" com . android . server . am . App Error Dialog ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( window . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġwindow . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUi Object NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġcare , Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Crash Detected ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Crash 2 (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġdevice . find Object ( Ui Selector (). packageName (" android ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text Contains (" has Ġstopped ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( window . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġwindow . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUi Object NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġcare , Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Crash Detected ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon An r Detected ( error Text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Text ?. let Ġ{ Ġerrors . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Crash Detected ( error Text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Text ?. let Ġ{ Ġerrors . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġerrors . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Errors (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCollections . unmodifiable List ( errors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Handler () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġform ated Output Ġ= ĠString . format (" UI ĠException ĠMessage : Ġ%- 2 0 s \ n ", Ġdevice . current PackageName ) ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġform ated Output ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbutton OK Ġ= Ġdevice . find Object ( Ui Selector (). text (" OK "). enabled ( true )) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton OK . waitFor Exists ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton OK . click () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUi Object NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġcare , Ġignore ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdevice : ĠUi Device Ġ= ĠUi Device . getInstance ( Instrumentation Registry . get Instrumentation ()) ĊĠĠĠ Ġ} Ċ }