package Ġcom . ts iem ens . android script er . service Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . accessibility service . Gesture Description Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroid . view . accessibility . Accessibility NodeInfo Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager Ċ import Ġcom . ts iem ens . android script er . launch Accessibility Settings Ċ Ċ class ĠNode Handle ( val Ġnode Ġ: ĠAccessibility NodeInfo ) Ġ{ ĊĠĠĠ Ġvar Ġref Count Ġ= Ġ 1 ĊĠĠĠ Ġval Ġtimestamp Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Node Handle ", Ġ" grab bing Ġref Ġ$ ref Count Ġon Ġnode Ġ$ timestamp ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinc () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ref Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . IllegalStateException (" Already Ġreleased ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġref Count ++ ĊĠĠĠĠĠĠĠ ĠLog . d (" Node Handle ", Ġ" grab bing Ġref Ġ$ ref Count Ġon Ġnode Ġ$ timestamp ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdec () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Node Handle ", Ġ" re leasing Ġref Ġ$ ref Count Ġon Ġnode Ġ$ timestamp ") ĊĠĠĠĠĠĠĠ Ġref Count -- ĊĠĠĠĠĠĠĠ Ġif Ġ( ref Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Node Handle ", Ġ" re cycl ing Ġnode Ġ$ timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠWindow State ( val Ġpkg : ĠString ?, Ġval Ġactivity : ĠString ?) Ċ Ċ class ĠScript Access Service Ġ: ĠAccessibility Service () Ġ{ Ċ // ĠĠĠ Ġvar Ġlast Node Ġ: ĠNode Handle ? Ġ= Ġnull Ċ // ĠĠĠ Ġvar Ġlast Window State Node Ġ: ĠNode Handle ? Ġ= Ġnull ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠScript Access Service :: class . java . simple Name ĊĊĠĠĠĠĠĠĠ Ġval ĠACTION _ TO _ SERVICE Ġ= Ġ" com . ts iem ens . android script er . LB cast To Script Service " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ FROM _ SERVICE Ġ= Ġ" com . ts iem ens . android script er . LB cast From Script Service " ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurr Window State : ĠWindow State ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠService B cast Receiver ( val Ġservice : ĠScript Access Service ) Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . on Receive B cast ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġb cast Receiver Ġ= ĊĠĠĠĠĠĠĠ ĠService B cast Receiver ( this ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Service Connected () ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Service Ġconnected ") ĊĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( this ). register Receiver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb cast Receiver , ĠIntent Filter ( ACTION _ TO _ SERVICE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Interrupt () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Accessibility Event ( event : ĠAccessibility Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġsource Ġnode Ġof Ġthe Ġevent ĊĠĠĠĠĠĠĠ Ġvar Ġsource Str Ġ= Ġ" null " ĊĠĠĠĠĠĠĠ Ġvar Ġtype Str Ġ= Ġ" ?" ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Obj Ġ= Ġevent . source Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġsource Text Ġ= Ġsource Obj . text ĊĠĠĠĠĠĠĠ Ġif Ġ( source Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing , Ġjust Ġto Ġremember ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Str Ġ= Ġsource Text . toString () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġlast Node ?. dec () Ċ // ĠĠĠĠĠĠĠ Ġlast Node Ġ= ĠNode Handle ( event . source ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( event . eventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccessibility Event . TYPE _ WINDOW _ STATE _ CHANGED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Str Ġ= Ġ" WINDOW _ STATE _ CHANGED " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Window State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . packageName ?. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . className ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Window State Node ?. dec () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Window State Node Ġ= Ġlast Node Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Node ?. inc () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccessibility Event . TYPE _ VIEW _ CLICK ED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Str Ġ= Ġ" VIEW _ CLICK ED " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" eventType : Ġ% x Ġ(% s ), Ġtext : Ġ% s ". format ( event . eventType , Ġtype Str , Ġsource Str )) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" package : Ġ${ event . packageName }, Ġtype : Ġ${ event . className }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . source ?. text Ġ!= Ġ" D UMMY ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent . source ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Un bind ( intent : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsuper . on Un bind ( intent ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Un bind ") ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( this ). unregister Receiver ( b cast Receiver ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Receive B cast ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġintent . getString Extra (" type ") ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Receive B cast Ġ$ type ") ĊĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ OCR _ SCREEN SHOT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo O cr () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ CLICK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġintent . get Float Extra (" x ", ĠFloat . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġintent . get Float Extra (" y ", ĠFloat . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Percent Ġ= Ġintent . getBoolean Extra (" is Percent ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ== ĠFloat . MAX _ VALUE Ġ|| Ġy Ġ== ĠFloat . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" TYPE _ CLICK Ġaction Ġprovided Ġwith Ġinvalid Ġx , y ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Click ( x , Ġy , Ġis Percent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ PRESS _ BACK Ġ-> Ġ{ Ġpress Back Button () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ PRESS _ HOME Ġ-> Ġ{ Ġpress Home Button () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ PRESS _ REC ENTS Ġ-> Ġ{ Ġpress Recent Apps Button () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġack ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġout Intent . action Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ FROM _ SERVICE ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" type ", Ġtype ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( this ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsimple Gesture Dispatch ( gesture : ĠGest ure Description ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcallback Ġinvoked Ġeither Ġwhen Ġthe Ġgesture Ġhas Ġbeen Ġcompleted Ġor Ġcancelled ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠAccessibility Service . Gesture Result Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed ( gesture Description : ĠGest ure Description ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Completed ( gesture Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" gesture Ġcompleted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( gesture Description : ĠGest ure Description ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Cancelled ( gesture Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" gesture Ġcancelled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġdispatch Gesture ( gesture , Ġcallback , Ġnull ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" dispatch Gesture : Ġ$ ret ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Click ( x : ĠFloat , Ġy : ĠFloat , Ġis Percent : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgesture Ġ= Ġif Ġ( is Percent ) Ġmake Click Gesture Percent ( x , Ġy ) Ġelse Ġmake Click Gesture ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġsimple Gesture Dispatch ( gesture ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Click Gesture Percent ( x Pct : ĠFloat , Ġy Pct : ĠFloat ): ĠGest ure Description Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Pct Ġ> Ġ 1 . 0 Ġ|| Ġy Pct Ġ> Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Percent Ġvalue Ġmust Ġbe Ġfrom Ġ 0 Ġto Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= Ġ Ġget System Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġval Ġout Point Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġwm . default Display . getSize ( out Point ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmake Click Gesture ( out Point . x Ġ* Ġx Pct , Ġout Point . y Ġ* Ġy Pct ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Click Gesture ( x : ĠFloat , Ġy : ĠFloat ): ĠGest ure Description Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtouch Path Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGest ure Description . Builder (). add Stroke ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGest ure Description . Stroke Description ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Back Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġperform Global Action ( GLOBAL _ ACTION _ BACK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Home Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġperform Global Action ( GLOBAL _ ACTION _ HOME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Recent Apps Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġperform Global Action ( GLOBAL _ ACTION _ REC ENTS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdefer ( run nable : ĠRunnable , Ġdelay Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( run nable , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdefer To MainThread ( run nable : ĠRunnable , Ġdelay Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler ( main Looper ) ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( run nable , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠ Ġfun Ġdo O cr () Ġ{ ĊĊĠĠ Ġ} Ċ } Ċ Ċ class ĠAccessibility Setting Dialog Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe ĠBuilder Ġclass Ġfor Ġconvenient Ġdialog Ġconstruction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage (" This Ġapp Ġmust Ġregister Ġan Ġaccessibility Ġservice Ġin Ġorder Ġto Ġwork Ġcorrectly . ĠAllow ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Accessibility Settings ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . no ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠAlertDialog Ġobject Ġand Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Activity Ġcannot Ġbe Ġnull ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠService B cast Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ OCR _ SCREEN SHOT Ġ= Ġ" ocr Screenshot " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ CLICK Ġ= Ġ" click " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PRESS _ BACK Ġ= Ġ" press Back " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PRESS _ HOME Ġ= Ġ" press Home " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PRESS _ REC ENTS Ġ= Ġ" press Recent s " ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠService B cast Client ( val Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġmake Intent ( action Type : ĠString ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġout Intent . action Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Access Service . ACTION _ TO _ SERVICE ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" type ", Ġaction Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġout Intent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Do O cr () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġout Intent . action Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Access Service . ACTION _ TO _ SERVICE ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" type ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService B cast . TYPE _ OCR _ SCREEN SHOT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( context ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Click ( x : ĠFloat , Ġy : ĠFloat , Ġis Percent : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= Ġmake Intent ( Service B cast . TYPE _ CLICK ) ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" x ", Ġx ) ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" y ", Ġy ) ĊĠĠĠĠĠĠĠ Ġout Intent . putExtra (" is Percent ", Ġis Percent ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( context ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= Ġmake Intent ( Service B cast . TYPE _ PRESS _ BACK ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( context ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Home () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= Ġmake Intent ( Service B cast . TYPE _ PRESS _ HOME ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( context ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpress Recent Apps () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Intent Ġ= Ġmake Intent ( Service B cast . TYPE _ PRESS _ REC ENTS ) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( context ). send Broadcast ( out Intent ) ĊĠĠĠ Ġ} Ċ } Ċ