package Ġcom . mat he ws achin . f ate grand autom ata . accessibility Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Image Button Ċ import Ġandroidx . core . graphics . Blend Mode Color Filter Compat Ċ import Ġandroidx . core . graphics . Blend Mode Compat Ċ import Ġandroidx . core . view . post Delayed Ċ import Ġcom . mat he ws achin . f ate grand autom ata . R Ċ import Ġcom . mat he ws achin . f ate grand autom ata . core . Location Ċ import Ġcom . mat he ws achin . f ate grand autom ata . ui . highlight View Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Time Mark Ċ import Ġkotlin . time . Time Source . Mon otonic Ċ import Ġkotlin . time . milliseconds Ċ Ċ class ĠScript Runner User Interface ( val ĠService : ĠScript Runner Service ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlayout Ġ= ĠFrame Layout ( Service ) ĊĊĠĠĠ Ġval Ġoverlay Type : ĠInt Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĠWindow Manager . LayoutParams . TYPE _ PHONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġwindow Manager Ġ= ĠService . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĊĠĠĠ Ġprivate Ġval Ġlayout Params Ġ= ĠWindow Manager . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġoverlay Type ĊĠĠĠĠĠĠĠ Ġformat Ġ= ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL Ġor ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE ĊĠĠĠĠĠĠĠ Ġwidth Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġheight Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" R tl Hard coded ") ĊĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . LEFT Ġor ĠGr avity . TOP ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwindow Animations Ġ= Ġandroid . R . style . Animation _ Toast ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġhighlight LayoutParams Ġ= ĠWindow Manager . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġoverlay Type ĊĠĠĠĠĠĠĠ Ġformat Ġ= ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH ABLE ĊĠĠĠĠĠĠĠ Ġwidth Ġ= ĠWindow Manager . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġheight Ġ= ĠWindow Manager . LayoutParams . MATCH _ PARENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġscript Ctrl Btn : ĠImage Button ĊĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( Service ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . script _ runner , Ġlayout ) ĊĊĠĠĠĠĠĠĠ Ġscript Ctrl Btn Ġ= Ġlayout . findViewById < Image Button >( R . id . script _ toggle _ btn ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService . register Script Ctrl Btn Listeners ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOn Touch Listener (:: script Ctrl Btn On Touch ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Real Metrics ( metrics ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġimages Ġin ĠLand scape ĊĠĠĠĠĠĠĠ Ġif Ġ( metrics . height Pixels Ġ> Ġmetrics . width Pixels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetrics . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġit . width Pixels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . width Pixels Ġ= Ġit . height Pixels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . height Pixels Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlayout Params . y Ġ= Ġmetrics . width Pixels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( highlight View , Ġhighlight LayoutParams ) ĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( layout , Ġlayout Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( layout ) ĊĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( highlight View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Play Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Ctrl Btn . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ctrl Btn . setImage Resource ( R . drawable . ic _ play ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stop Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Ctrl Btn . setImage Resource ( R . drawable . ic _ stop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow As Recording () Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Ctrl Btn . drawable . color Filter Ġ= ĠBlend Mode Color Filter Compat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Blend Mode Color Filter Compat ( Color . RED , ĠBlend Mode Compat . SRC _ AT OP ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Delayed ( Delay : ĠDuration , ĠAction : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscript Ctrl Btn . post Delayed ( Delay . to Long Milliseconds (), ĠAction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Btn Coordinates (): ĠLocation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġwindow Manager . default Display . rotation ĊĠĠĠĠĠĠĠ Ġval Ġrotate Ġ= Ġrotation Ġ== ĠSurface . ROT ATION _ 0 Ġ|| Ġrotation Ġ== ĠSurface . ROT ATION _ 1 8 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( if Ġ( rotate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetrics . height Pixels ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmetrics . width Pixels ) Ġ- Ġlayout . meas ured Width ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( if Ġ( rotate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetrics . width Pixels ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmetrics . height Pixels ) Ġ- Ġlayout . meas ured Height ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLocation ( x , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġd X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġd Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġlast Action Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdrag Time Mark : ĠTime Mark ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġscript Ctrl Btn On Touch (_ View : ĠView , ĠEvent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( max X , Ġmax Y ) Ġ= ĠgetMax Btn Coordinates () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd X Ġ= Ġlayout Params . x . coerce In ( 0 , Ġmax X ) Ġ- ĠEvent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Y Ġ= Ġlayout Params . y . coerce In ( 0 , Ġmax Y ) Ġ- ĠEvent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Action Ġ= ĠMotion Event . ACTION _ DOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Time Mark Ġ= ĠMon otonic . mark Now () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= ĠEvent . raw X Ġ+ Ġd X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Y Ġ= ĠEvent . raw Y Ġ+ Ġd Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drag Time Mark !!. elapsed Now () Ġ> ĠView Configuration . getLong Press Timeout (). milliseconds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( m X , Ġm Y ) Ġ= ĠgetMax Btn Coordinates () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . x Ġ= Ġnew X . round ToInt (). coerce In ( 0 , Ġm X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . y Ġ= Ġnew Y . round ToInt (). coerce In ( 0 , Ġm Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . update View Layout ( layout , Ġlayout Params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Action Ġ= ĠMotion Event . ACTION _ MOVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġlast Action Ġ== ĠMotion Event . ACTION _ MOVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }