package Ġxyz . work around s . reach ability . service Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroid . view . accessibility . Accessibility NodeInfo Ċ import Ġandroid . widget . Toast Ċ import Ġtim ber . log . Tim ber Ċ import Ġxyz . work around s . reach ability . extension . Bund l able Ċ import Ġxyz . work around s . reach ability . extension . Bund ler Ċ import Ġxyz . work around s . reach ability . extension . click Ċ import Ġxyz . work around s . reach ability . extension . long Click Ċ import Ġxyz . work around s . reach ability . portal . Surface Portal Ċ import Ġxyz . work around s . reach ability . portal . Test Portal Ċ import Ġxyz . work around s . reach ability . portal . Trigger Portal Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġmad ki Ġon Ġ 2 2 / 1 1 / 1 5 . Ċ Ġ*/ Ċ class ĠRe ach Service Ġ: ĠAccessibility Service (), ĠBund l able Ġ{ ĊĠĠĠ Ġval Ġdebug Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġvar Ġbund ler Ġ= ĠBund ler () ĊĠĠĠ Ġlateinit Ġvar Ġtrigger Portal : ĠTrigger Portal ĊĠĠĠ Ġvar Ġsurface Portal : ĠSurface Portal ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġtest Portal : ĠTest Portal ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġintent Type : ĠInt ? Ġby Ġarg ( Foreground Service . INT ENT _ TYPE ) ĊĠĠĠ Ġvar Ġrequest Code : ĠInt ? Ġby Ġarg ( Foreground Service . REQUEST _ CODE ) ĊĠĠĠ Ġvar ĠresultCode : ĠInt ? Ġby Ġarg ( Foreground Service . RESULT _ CODE ) ĊĠĠĠ Ġvar Ġactivity Result : ĠIntent ? Ġby Ġarg ( Foreground Service . ACTIVITY _ RESULT ) ĊĊĠĠĠ Ġvar Ġis Root Node Dirty Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġroot Node : ĠAccessibility NodeInfo ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġtrigger Portal Ġ= ĠTrigger Portal ( this , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġif ( debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Portal Ġ= ĠTest Portal ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Portal Ġ= ĠSurface Portal ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull ) Ġreturn ĠSTART _ STICK Y ĊĠĠĠĠĠĠĠ Ġbund ler . init ( intent ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFore ground Service . TYPE _ ACTIVITY _ RESULT Ġ-> Ġon Activity Result ( request Code !! , ĠresultCode !! , Ġactivity Result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTim ber . d (" Unhandled Ġintent Type Ġin ĠRe ach Service # onStart Command : Ġ$ intent Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Trigger () Ġ{ ĊĠĠĠĠĠĠĠ Ġsurface Portal ?. on Trigger () ĊĠĠĠĠĠĠĠ Ġtest Portal ?. on Trigger () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Service Connected () ĊĠĠĠĠĠĠĠ Ġtrigger Portal . attach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Interrupt () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Interrupt Ġcalled ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġtrigger Portal . close () ĊĠĠĠĠĠĠĠ Ġsurface Portal ?. close () ĊĠĠĠĠĠĠĠ Ġtest Portal ?. close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Root In Active Window (): ĠAccessibility NodeInfo ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( is Root Node Dirty Ġ|| Ġroot Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġsuper . getRoot In Active Window () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Root Node Dirty Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( root Node Ġ== Ġnull ) Ġnull Ġelse ĠAccessibility NodeInfo . obtain ( root Node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Accessibility Event ( event : ĠAccessibility Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠAccessibility Event . TYPE _ WINDOW _ CONTENT _ CHANGED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġevent . eventType Ġ== ĠAccessibility Event . TYPE _ WINDOW _ STATE _ CHANGED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġevent . eventType Ġ== ĠAccessibility Event . TYPE _ WINDOWS _ CHANGED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Root Node Dirty Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġparse Ġthe ĠAccessibility Node ĠTree Ġand Ġget Ġview Ġbounds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġactivity Result : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠSurface Portal . REQUEST _ CODE _ MEDIA _ PRO JECTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Portal !!. on Activity Result ( request Code , ĠresultCode , Ġactivity Result ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Unhandled Ġintent Ġin ĠRe ach Service # on Activity Result ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick At ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" click @ root Node ") ĊĠĠĠĠĠĠĠ Ġif (!( root In Active Window ?. click ( x . toInt (), Ġy . toInt ()) Ġ?: Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Unable Ġto Ġclick . ĠSorry !", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Long Click At ( x : ĠFloat , Ġy : Float ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" long Click @ root Node ") ĊĠĠĠĠĠĠĠ Ġif (!( root In Active Window ?. long Click ( x . toInt (), Ġy . toInt ()) Ġ?: Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Unable Ġto ĠLong Click . ĠSorry !", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }