package Ġio . github . air day dream ers . touch injector . impl Ċ Ċ import Ġandroid . app . Instrumentation Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . view . Input Device Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Motion Event . Pointer Coords Ċ import Ġandroid . view . Motion Event . Pointer Properties Ċ import Ġio . github . air day dream ers . touch injector . Pointer Injector Ċ import Ġio . github . air day dream ers . touch injector . data . Pointer Array Ċ import Ġtim ber . log . Tim ber ĊĊ Ċ internal Ġclass ĠPointer Instrumentation Injector Ġ: ĠPointer Injector Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinstrument ation : ĠInstrument ation Ġ= ĠInstrument ation () ĊĠĠĠ Ġprivate Ġval Ġpointer Array Ġ= ĠPointer Array () ĊĊĠĠĠ Ġprivate Ġvar Ġdown Time : ĠLong Ġ= Ġ 0 Ġ// TODO : ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinstrument ation . start () ĊĠĠĠĠĠĠĠ Ġinstrument ation . set In Touch Mode ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region Ġinternal ĊĠĠĠ Ġ// TODO : Ġworkaround Ġremove Ġpointer Ġbefore Ġinject Ġif Ġit Ġwas Ġalready Ġexisted . ĊĠĠĠ Ġprivate Ġfun Ġcheck Tou ches ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pointer Array . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . properties . first OrNull Ġ{ Ġit . id Ġ== Ġid Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġpointer Array . properties . indexOf ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . coords [ index ]. x . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . coords [ index ]. y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdown Internal ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . v (" id : Ġ$ id Ġx : Ġ$ x Ġy : Ġ$ y ") ĊĠĠĠĠĠĠĠ Ġval Ġis First Pointer Ġ= Ġpointer Array . size Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġpp Ġ= ĠPointer Properties () ĊĠĠĠĠĠĠĠ Ġpp . id Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġval Ġpc Ġ= ĠPointer Coords () ĊĠĠĠĠĠĠĠ Ġpc . x Ġ= Ġx . toFloat () ĊĠĠĠĠĠĠĠ Ġpc . y Ġ= Ġy . toFloat () ĊĠĠĠĠĠĠĠ Ġcheck Tou ches ( id ) Ġ// TODO : ĊĠĠĠĠĠĠĠ Ġpointer Array . add ( pp , Ġpc ) ĊĠĠĠĠĠĠĠ Ġval Ġmotion Event : ĠMotion Event ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Pointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĠMotion Event . ACTION _ DOWN , Ġx . toFloat (), Ġy . toFloat (), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĠMotion Event . ACTION _ POINTER _ DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . size , Ġpointer Array . properties . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . coords . to Typed Array (), Ġ 0 , Ġ 1 , Ġ 1 f , Ġ 1 f , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Device . SOURCE _ TO UCH SCREEN , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstrument ation . send Pointer Sync ( motion Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Internal ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . v (" id : Ġ$ id Ġx : Ġ$ x Ġy : Ġ$ y ") ĊĠĠĠĠĠĠĠ Ġif Ġ( pointer Array . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĠMotion Event . ACTION _ MOVE , Ġx . toFloat (), Ġy . toFloat (), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . send Pointer Sync ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ġ// TODO : Ġdon 't Ġdo Ġlike Ġthat . Ġuse Ġspecial Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup Internal ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . v (" id : Ġ$ id Ġx : Ġ$ x Ġy : Ġ$ y ") ĊĠĠĠĠĠĠĠ Ġif Ġ( pointer Array . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġpointer Array . properties . indexOf First Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmotion Event : ĠMotion Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Array . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( index Ġshl ĠMotion Event . ACTION _ POINTER _ INDEX _ SHIFT ) Ġ+ ĠMotion Event . ACTION _ POINTER _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . properties . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . coords . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Device . SOURCE _ TO UCH SCREEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event Ġ= ĠMotion Event . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis (), ĠMotion Event . ACTION _ UP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toFloat (), Ġy . toFloat (), Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . send Pointer Sync ( motion Event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Event . recycle (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Array . remove ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġ// region Ġpublic ĊĠĠĠ Ġoverride Ġfun Ġadd Pointer ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdown Internal ( id , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Pointer ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmove Internal ( id , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Pointer ( id : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġup Internal ( id , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion Ċ }