/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . test Ċ Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . geometry . lerp Ċ import Ġandroidx . compose . ui . platform . View Configuration Ċ import Ġandroidx . compose . ui . util . lerp Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . math . round To Long Ċ Ċ /** Ċ Ġ* ĠThe Ġreceiver Ġscope Ġof Ġthe Ġtouch Ġinput Ġinjection Ġlambda Ġfrom Ġ[ perform Touch Input ]. Ċ Ġ* Ċ Ġ* ĠThe Ġfunctions Ġin Ġ[ Touch Injection Scope ] Ġcan Ġroughly Ġbe Ġdivided Ġinto Ġtwo Ġgroups : Ġfull Ġgest ures Ċ Ġ* Ġand Ġindividual Ġtouch Ġevents . ĠThe Ġindividual Ġtouch Ġevents Ġare : Ġ[ down ], Ġ[ move ] Ġand Ġfriends , Ġ[ up ], Ċ Ġ* Ġ[ cancel ] Ġand Ġ[ advance Event Time ]. ĠFull Ġgest ures Ġare Ġall Ġthe Ġother Ġfunctions , Ġlike Ċ Ġ* Ġ[ click ][ Touch Injection Scope . click ], Ġ[ double Click ][ Touch Injection Scope . double Click ], Ċ Ġ* Ġ[ swipe ][ Touch Injection Scope . swipe ], Ġetc . ĠThese Ġare Ġbuilt Ġon Ġtop Ġof Ġthe Ġindividual Ġevents Ġand Ċ Ġ* Ġserve Ġas Ġa Ġgood Ġexample Ġon Ġhow Ġyou Ġcan Ġbuild Ġyour Ġown Ġfull Ġgesture Ġfunctions . Ċ Ġ* Ċ Ġ* ĠA Ġtouch Ġgesture Ġis Ġstarted Ġwith Ġa Ġ[ down ] Ġevent , Ġfollowed Ġby Ġa Ġsequence Ġof Ġ[ move ] Ġevents Ġand Ċ Ġ* Ġfinally Ġan Ġ[ up ] Ġevent , Ġoptionally Ġcombined Ġwith Ġmore Ġsets Ġof Ġ[ down ] Ġand Ġ[ up ] Ġevents Ġfor Ċ Ġ* Ġmulti - touch Ġgest ures . ĠMost Ġmethods Ġaccept Ġa Ġpointer Id Ġto Ġspecify Ġwhich Ġpointer Ġ( f inger ) Ġthe Ċ Ġ* Ġevent Ġapplies Ġto . ĠMovement Ġcan Ġbe Ġexpressed Ġabsolutely Ġwith Ġ[ moveTo ] Ġand Ġ[ update Pointer To ], Ġor Ċ Ġ* Ġrelative Ġto Ġthe Ġcurrent Ġpointer Ġposition Ġwith Ġ[ move By ] Ġand Ġ[ update Pointer By ]. ĠThe Ġ` moveTo / By ` Ċ Ġ* Ġmethods Ġenqueue Ġan Ġevent Ġimmediately , Ġwhile Ġthe Ġ` update Pointer To / By ` Ġmethods Ġdon 't . ĠThis Ċ Ġ* Ġallows Ġyou Ġto Ġupdate Ġthe Ġposition Ġof Ġmultiple Ġpointers Ġin Ġa Ġsingle Ġ[ move ] Ġevent Ġfor Ċ Ġ* Ġmulti - touch Ġgest ures . ĠTouch Ġgest ures Ġcan Ġbe Ġcancelled Ġwith Ġ[ cancel ]. ĠAll Ġevents , Ġregardless Ċ Ġ* Ġthe Ġmethod Ġused , Ġwill Ġalways Ġcontain Ġthe Ġcurrent Ġposition Ġof Ġ_ all _ Ġpointers . Ċ Ġ* Ċ Ġ* ĠThe Ġentire Ġevent Ġinjection Ġstate Ġis Ġshared Ġbetween Ġall Ġ` perform .* Input ` Ġmethods , Ġmeaning Ġyou Ċ Ġ* Ġcan Ġcontinue Ġan Ġun finished Ġtouch Ġgesture Ġin Ġa Ġsubsequent Ġinvocation Ġof Ġ[ perform Touch Input ] Ġor Ċ Ġ* Ġ[ perform Multi Modal Input ]. ĠNote Ġhowever Ġthat Ġwhile Ġthe Ġpointer Ġpositions Ġare Ġretained Ġacross Ċ Ġ* Ġinvocation Ġof Ġ` perform .* Input ` Ġmethods , Ġthey Ġare Ġalways Ġmanip ulated Ġin Ġthe Ġcurrent Ġnode 's Ċ Ġ* Ġlocal Ġcoordinate Ġsystem . ĠThat Ġmeans Ġthat Ġtwo Ġsubsequent Ġinv ocations Ġof Ġ[ perform Touch Input ] Ġon Ċ Ġ* Ġdifferent Ġnodes Ġwill Ġreport Ġa Ġdifferent Ġ[ current Position ], Ġeven Ġthough Ġit Ġis Ġactually Ġthe Ġsame Ċ Ġ* Ġposition Ġon Ġthe Ġscreen . Ċ Ġ* Ċ Ġ* ĠAll Ġevents Ġsent Ġby Ġthese Ġmethods Ġare Ġb atched Ġtogether Ġand Ġsent Ġas Ġa Ġwhole Ġafter Ċ Ġ* Ġ[ perform Touch Input ] Ġhas Ġexecuted Ġits Ġcode Ġblock . ĠBecause Ġgest ures Ġdon 't Ġhave Ġto Ġbe Ġdefined Ġall Ċ Ġ* Ġin Ġthe Ġsame Ġ[ perform Touch Input ] Ġblock , Ġkeep Ġin Ġmind Ġthat Ġwhile Ġthe Ġgesture Ġis Ġnot Ġcomplete , Ċ Ġ* Ġall Ġcode Ġyou Ġexecute Ġin Ġbetween Ġthese Ġblocks Ġwill Ġbe Ġexecuted Ġwhile Ġimag inary Ġf ingers Ġare Ċ Ġ* Ġactively Ġtouch ing Ġthe Ġscreen . ĠThe Ġevents Ġsent Ġas Ġpart Ġof Ġthe Ġsame Ġbatch Ġwill Ġnot Ġbe Ġinterrupted Ċ Ġ* Ġby Ġre composition , Ġhowever , Ġif Ġa Ġgesture Ġspans Ġmultiple Ġ[ perform Touch Input ] Ġblocks Ġit Ġis Ċ Ġ* Ġimportant Ġto Ġremember Ġthat Ġre composition , Ġlayout Ġand Ġdrawing Ġcould Ġtake Ġplace Ġduring Ġthe Ċ Ġ* Ġgesture , Ġwhich Ġmay Ġlead Ġto Ġevents Ġbeing Ġinjected Ġinto Ġa Ġmoving Ġtarget . ĠAs Ġpointer Ġpositions Ġare Ċ Ġ* Ġmanip ulated Ġin Ġthe Ġcurrent Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġthis Ġcould Ġlead Ġto Ġissues Ġcaused Ġby Ċ Ġ* Ġthe Ġfact Ġthat Ġpart Ġof Ġthe Ġgesture Ġwill Ġtake Ġeffect Ġbefore Ġthe Ġrest Ġof Ġthe Ġevents Ġhave Ġbeen Ċ Ġ* Ġen queued . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġperforming Ġa Ġclick : Ċ Ġ* Ġ@ sample Ġandroidx . compose . ui . test . samples . touch Input Click Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġperforming Ġa Ġswipe Ġup : Ċ Ġ* Ġ@ sample Ġandroidx . compose . ui . test . samples . touch Input Swipe Up Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġperforming Ġan ĠL - sh aped Ġgesture : Ċ Ġ* Ġ@ sample Ġandroidx . compose . ui . test . samples . touch Input L Sh aped Gesture Ċ Ġ* Ċ Ġ* Ġ@ see ĠInjection Scope Ċ Ġ*/ Ċ interface ĠTouch Injection Scope Ġ: ĠInjection Scope Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcurrent Ġposition Ġof Ġthe Ġgiven Ġ[ pointer Id ]. ĠThe Ġdefault Ġ[ pointer Id ] Ġis Ġ 0 . ĠThe ĊĠĠĠĠ Ġ* Ġposition Ġis Ġreturned Ġin Ġthe Ġlocal Ġcoordinate Ġsystem Ġof Ġthe Ġnode Ġwith Ġwhich Ġwe 're ĊĠĠĠĠ Ġ* Ġinteracting . Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcurrent Position ( pointer Id : ĠInt Ġ= Ġ 0 ): ĠOffset ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġdown Ġevent Ġfor Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ] Ġat Ġ[ position ] Ġon Ġthe ĊĠĠĠĠ Ġ* Ġassociated Ġnode . ĠThe Ġ[ position ] Ġis Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis ĊĠĠĠĠ Ġ* Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġno Ġpointers Ġare Ġdown Ġyet , Ġthis Ġwill Ġstart Ġa Ġnew Ġtouch Ġgesture . ĠIf Ġa Ġgesture Ġis Ġalready ĊĠĠĠĠ Ġ* Ġin Ġprogress , Ġthis Ġevent Ġis Ġsent Ġat Ġthe Ġsame Ġtimestamp Ġas Ġthe Ġlast Ġevent . ĠIf Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġpointer Ġis Ġalready Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer , Ġcan Ġbe Ġany Ġnumber Ġnot Ġyet Ġin Ġuse Ġby Ġanother Ġpointer ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġdown Ġevent , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdown ( pointer Id : ĠInt , Ġposition : ĠOffset ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġdown Ġevent Ġfor Ġthe Ġdefault Ġpointer Ġat Ġ[ position ] Ġon Ġthe Ġassociated Ġnode . ĠThe ĊĠĠĠĠ Ġ* Ġ[ position ] Ġis Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner ĊĠĠĠĠ Ġ* Ġof Ġthe Ġnode . ĠThe Ġdefault Ġpointer Ġhas Ġ` pointer Id Ġ= Ġ 0 `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġno Ġpointers Ġare Ġdown Ġyet , Ġthis Ġwill Ġstart Ġa Ġnew Ġtouch Ġgesture . ĠIf Ġa Ġgesture Ġis Ġalready ĊĠĠĠĠ Ġ* Ġin Ġprogress , Ġthis Ġevent Ġis Ġsent Ġat Ġthe Ġsame Ġtimestamp Ġas Ġthe Ġlast Ġevent . ĠIf Ġthe Ġdefault ĊĠĠĠĠ Ġ* Ġpointer Ġis Ġalready Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġdown Ġevent , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdown ( position : ĠOffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdown ( 0 , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġon Ġthe Ġassociated Ġnode , Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġposition Ġof Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ] Ġupdated Ġto Ġ[ position ]. ĠThe ĊĠĠĠĠ Ġ* Ġ[ position ] Ġis Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner ĊĠĠĠĠ Ġ* Ġof Ġthe Ġnode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer Ġto Ġmove , Ġas Ġsupplied Ġin Ġ[ down ] ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġnew Ġposition Ġof Ġthe Ġpointer , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove To ( pointer Id : ĠInt , Ġposition : ĠOffset , Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Pointer To ( pointer Id , Ġposition ) ĊĠĠĠĠĠĠĠ Ġmove ( delay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġon Ġthe Ġassociated Ġnode , Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġposition Ġof Ġthe Ġdefault Ġpointer Ġupdated Ġto Ġ[ position ]. ĠThe Ġ[ position ] Ġis Ġin Ġthe Ġnode 's ĊĠĠĠĠ Ġ* Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . ĠThe Ġdefault ĊĠĠĠĠ Ġ* Ġpointer Ġhas Ġ` pointer Id Ġ= Ġ 0 `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġdefault Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġnew Ġposition Ġof Ġthe Ġpointer , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove To ( position : ĠOffset , Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmove To ( 0 , Ġposition , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġposition Ġof Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ] Ġto Ġthe Ġgiven Ġ[ position ], Ġbut ĊĠĠĠĠ Ġ* Ġdoes Ġnot Ġsend Ġa Ġmove Ġevent . ĠThe Ġmove Ġevent Ġcan Ġbe Ġsent Ġwith Ġ[ move ]. ĠThe Ġ[ position ] Ġis Ġin ĊĠĠĠĠ Ġ* Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 . px , Ġ 0 . px ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe ĊĠĠĠĠ Ġ* Ġnode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer Ġto Ġmove , Ġas Ġsupplied Ġin Ġ[ down ] ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġnew Ġposition Ġof Ġthe Ġpointer , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Pointer To ( pointer Id : ĠInt , Ġposition : ĠOffset ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġon Ġthe Ġassociated Ġnode , Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġposition Ġof Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ] Ġmoved Ġby Ġthe Ġgiven Ġ[ delta ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer Ġto Ġmove , Ġas Ġsupplied Ġin Ġ[ down ] ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta ĠThe Ġposition Ġfor Ġthis Ġmove Ġevent , Ġrelative Ġto Ġthe Ġcurrent Ġposition Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer . ĠFor Ġexample , Ġ` delta Ġ= ĠOffset ( 1 0 . px , Ġ- 1 0 . px ) Ġwill Ġadd Ġ 1 0 . px Ġto Ġthe Ġpointer 's ĊĠĠĠĠ Ġ* Ġx - position , Ġand Ġsubtract Ġ 1 0 . px Ġfrom Ġthe Ġpointer 's Ġy - position . ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove By ( pointer Id : ĠInt , Ġdelta : ĠOffset , Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Pointer By ( pointer Id , Ġdelta ) ĊĠĠĠĠĠĠĠ Ġmove ( delay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġon Ġthe Ġassociated Ġnode , Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġposition Ġof Ġthe Ġdefault Ġpointer Ġmoved Ġby Ġthe Ġgiven Ġ[ delta ]. ĠThe Ġdefault Ġpointer Ġhas ĊĠĠĠĠ Ġ* Ġ` pointer Id Ġ= Ġ 0 `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta ĠThe Ġposition Ġfor Ġthis Ġmove Ġevent , Ġrelative Ġto Ġthe Ġcurrent Ġposition Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer . ĠFor Ġexample , Ġ` delta Ġ= ĠOffset ( 1 0 . px , Ġ- 1 0 . px ) Ġwill Ġadd Ġ 1 0 . px Ġto Ġthe Ġpointer 's ĊĠĠĠĠ Ġ* Ġx - position , Ġand Ġsubtract Ġ 1 0 . px Ġfrom Ġthe Ġpointer 's Ġy - position . ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove By ( delta : ĠOffset , Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmove By ( 0 , Ġdelta , Ġdelay Millis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġposition Ġof Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ] Ġby Ġthe Ġgiven Ġ[ delta ], Ġbut ĊĠĠĠĠ Ġ* Ġdoes Ġnot Ġsend Ġa Ġmove Ġevent . ĠThe Ġmove Ġevent Ġcan Ġbe Ġsent Ġwith Ġ[ move ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġpointer Ġis Ġnot Ġyet Ġdown , Ġan Ġ[ IllegalArgumentException ] Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer Ġto Ġmove , Ġas Ġsupplied Ġin Ġ[ down ] ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta ĠThe Ġposition Ġfor Ġthis Ġmove Ġevent , Ġrelative Ġto Ġthe Ġlast Ġsent Ġposition Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer . ĠFor Ġexample , Ġ` delta Ġ= ĠOffset ( 1 0 . px , Ġ- 1 0 . px ) Ġwill Ġadd Ġ 1 0 . px Ġto Ġthe Ġpointer 's ĊĠĠĠĠ Ġ* Ġx - position , Ġand Ġsubtract Ġ 1 0 . px Ġfrom Ġthe Ġpointer 's Ġy - position . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Pointer By ( pointer Id : ĠInt , Ġdelta : ĠOffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġcurrent Position Ġof Ġnull Ġhere , Ġlet Ġupdate Pointer To Ġgenerate Ġthe Ġerror ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġ( current Position ( pointer Id ) Ġ?: ĠOffset . Zero ) Ġ+ Ġdelta ĊĠĠĠĠĠĠĠ Ġupdate Pointer To ( pointer Id , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġwithout Ġupdating Ġany Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer Ġpositions . ĠThis Ġcan Ġbe Ġuseful Ġwhen Ġbatch ing Ġmovement Ġof Ġmultiple Ġpointers ĊĠĠĠĠ Ġ* Ġtogether , Ġwhich Ġcan Ġbe Ġdone Ġwith Ġ[ update Pointer To ] Ġand Ġ[ update Pointer By ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove ( delay Millis : ĠLong Ġ= Ġevent Period Millis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġwithout Ġupdating Ġany Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer Ġpositions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġoverload Ġsupports Ġgest ures Ġwith Ġmultiple Ġpointers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrelative H istorical Times ĠTime Ġof Ġeach Ġhistorical Ġevent , Ġas Ġa Ġmilli second Ġrelative Ġto ĊĠĠĠĠ Ġ* Ġthe Ġtime Ġthe Ġactual Ġevent Ġis Ġsent . ĠFor Ġexample , Ġ- 1 0 L Ġmeans Ġ 1 0 ms Ġearlier . ĊĠĠĠĠ Ġ* Ġ@ param Ġhistorical Coordinates ĠCoordinates Ġof Ġeach Ġhistorical Ġevent , Ġin Ġthe Ġsame Ġcoordinate ĊĠĠĠĠ Ġ* Ġspace Ġas Ġ[ moveTo ]. ĠThe Ġouter Ġlist Ġmust Ġhave Ġthe Ġsame Ġsize Ġas Ġthe Ġnumber Ġof Ġpointers Ġin Ġthe ĊĠĠĠĠ Ġ* Ġevent , Ġand Ġeach Ġinner Ġlist Ġmust Ġhave Ġthe Ġsame Ġsize Ġas Ġ[ relative H istorical Times ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Experimental Test Api ĊĠĠĠ Ġfun Ġmove With History Multi Pointer ( ĊĠĠĠĠĠĠĠ Ġrelative H istorical Times : ĠList < Long >, ĊĠĠĠĠĠĠĠ Ġhistorical Coordinates : ĠList < List < Offset >>, ĊĠĠĠĠĠĠĠ Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmove Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġwithout Ġupdating Ġany Ġof Ġthe ĊĠĠĠĠ Ġ* Ġpointer Ġpositions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġoverload Ġis Ġa Ġconvenience Ġmethod Ġfor Ġthe Ġcommon Ġcase Ġwhere Ġthe Ġgesture Ġonly Ġhas Ġone ĊĠĠĠĠ Ġ* Ġpointer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrelative H istorical Times ĠTime Ġof Ġeach Ġhistorical Ġevent , Ġas Ġa Ġmilli second Ġrelative Ġto ĊĠĠĠĠ Ġ* Ġthe Ġtime Ġthe Ġactual Ġevent Ġis Ġsent . ĠFor Ġexample , Ġ- 1 0 L Ġmeans Ġ 1 0 ms Ġearlier . ĊĠĠĠĠ Ġ* Ġ@ param Ġhistorical Coordinates ĠCoordinates Ġof Ġeach Ġhistorical Ġevent , Ġin Ġthe Ġsame Ġcoordinate ĊĠĠĠĠ Ġ* Ġspace Ġas Ġ[ moveTo ]. ĠThe Ġlist Ġmust Ġhave Ġthe Ġsame Ġsize Ġas Ġ[ relative H istorical Times ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Experimental Test Api ĊĠĠĠ Ġfun Ġmove With History ( ĊĠĠĠĠĠĠĠ Ġrelative H istorical Times : ĠList < Long >, ĊĠĠĠĠĠĠĠ Ġhistorical Coordinates : ĠList < Offset >, ĊĠĠĠĠĠĠĠ Ġdelay Millis : ĠLong Ġ= Ġevent Period Millis ĊĠĠĠ Ġ) Ġ= Ġmove With History Multi Pointer ( ĊĠĠĠĠĠĠĠ Ġrelative H istorical Times , ĊĠĠĠĠĠĠĠ ĠlistOf ( h istorical Coordinates ), ĊĠĠĠĠĠĠĠ Ġdelay Millis ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġan Ġup Ġevent Ġfor Ġthe Ġpointer Ġwith Ġthe Ġgiven Ġ[ pointer Id ], Ġor Ġthe Ġdefault Ġpointer Ġif ĊĠĠĠĠ Ġ* Ġ[ pointer Id ] Ġis Ġomitted , Ġon Ġthe Ġassociated Ġnode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpointer Id ĠThe Ġid Ġof Ġthe Ġpointer Ġto Ġlift Ġup , Ġas Ġsupplied Ġin Ġ[ down ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġup ( pointer Id : ĠInt Ġ= Ġ 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġcancel Ġevent Ġ[ delay Millis ] Ġafter Ġthe Ġlast Ġsent Ġevent Ġto Ġcancel Ġthe Ġcurrent ĊĠĠĠĠ Ġ* Ġgesture . ĠThe Ġcancel Ġevent Ġcontains Ġthe Ġcurrent Ġposition Ġof Ġall Ġactive Ġpointers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġlast Ġsent Ġevent Ġand Ġthis Ġevent . ĊĠĠĠĠ Ġ* Ġ[ event Period Millis ] Ġby Ġdefault . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcancel ( delay Millis : ĠLong Ġ= Ġevent Period Millis ) Ċ } Ċ Ċ internal Ġclass ĠTouch Injection Scope Impl ( ĊĠĠĠ Ġprivate Ġval Ġbase Scope : ĠMulti Modal Injection Scope Impl Ċ ) Ġ: ĠTouch Injection Scope , ĠInjection Scope Ġby Ġbase Scope Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinput Dispatcher Ġget () Ġ= Ġbase Scope . input Dispatcher ĊĠĠĠ Ġprivate Ġfun Ġlocal To Root ( position : ĠOffset ) Ġ= Ġbase Scope . local To Root ( position ) ĊĊĠĠĠ Ġoverride Ġfun Ġcurrent Position ( pointer Id : ĠInt ): ĠOffset ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition In Root Ġ= Ġinput Dispatcher . getCurrent Touch Position ( pointer Id ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Scope . root ToLocal ( position In Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdown ( pointer Id : ĠInt , Ġposition : ĠOffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition In Root Ġ= Ġlocal To Root ( position ) ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . enqueue Touch Down ( pointer Id , Ġposition In Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Pointer To ( pointer Id : ĠInt , Ġposition : ĠOffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition In Root Ġ= Ġlocal To Root ( position ) ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . update Touch Pointer ( pointer Id , Ġposition In Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmove ( delay Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadvance Event Time ( delay Millis ) ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . enqueue Touch Move () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Test Api ĊĠĠĠ Ġoverride Ġfun Ġmove With History Multi Pointer ( ĊĠĠĠĠĠĠĠ Ġrelative H istorical Times : ĠList < Long >, ĊĠĠĠĠĠĠĠ Ġhistorical Coordinates : ĠList < List < Offset >>, ĊĠĠĠĠĠĠĠ Ġdelay Millis : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( relative H istorical Times . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( relative H istorical Times [ it ] Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Relative Ġhistorical Ġtimes Ġshould Ġbe Ġnegative , Ġin Ġorder Ġto Ġbe Ġin Ġthe Ġpast " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( offset Ġ$ it Ġwas : Ġ${ relative H istorical Times [ it ]}) " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( relative H istorical Times [ it ] Ġ>= Ġ- delay Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Relative Ġhistorical Ġtimes Ġshould Ġnot Ġbe Ġearlier Ġthan Ġthe Ġprevious Ġevent Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( offset Ġ$ it Ġwas : Ġ${ relative H istorical Times [ it ]}, Ġ${ - delay Millis })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadvance Event Time ( delay Millis ) ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . enqueue Touch Moves ( relative H istorical Times , Ġhistorical Coordinates ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġup ( pointer Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . enqueue Touch Up ( pointer Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel ( delay Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadvance Event Time ( delay Millis ) ĊĠĠĠĠĠĠĠ Ġinput Dispatcher . enqueue Touch Cancel () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġclick Ġgesture Ġ( aka Ġa Ġtap ) Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠThe Ġclick Ġis Ġdone Ġat Ġthe Ġgiven Ġ[ position ], Ġor Ġin Ġthe Ġ[ center ] Ġif Ġthe Ġ[ position ] Ġis Ġomitted . Ċ Ġ* ĠThe Ġ[ position ] Ġis Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ċ Ġ* Ġof Ġthe Ġnode . Ċ Ġ* Ċ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġwhere Ġto Ġclick , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem . ĠIf Ċ Ġ* Ġomitted , Ġthe Ġ[ center ] Ġof Ġthe Ġnode Ġwill Ġbe Ġused . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . click ( position : ĠOffset Ġ= Ġcenter ) Ġ{ ĊĠĠĠ Ġdown ( position ) ĊĠĠĠ Ġmove () ĊĠĠĠ Ġup () Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġlong Ġclick Ġgesture Ġ( aka Ġa Ġlong Ġpress ) Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠThe Ġlong Ġclick Ġis Ġdone Ġat Ġthe Ġgiven Ġ[ position ], Ġor Ġin Ġthe Ġ[ center ] Ġif Ġthe Ġ[ position ] Ġis Ċ Ġ* Ġomitted . ĠBy Ġdefault , Ġthe Ġ[ duration Millis ] Ġof Ġthe Ġpress Ġis Ġ 1 0 0 ms Ġlonger Ġthan Ġthe Ġminimum Ċ Ġ* Ġrequired Ġduration Ġfor Ġa Ġlong Ġpress . ĠThe Ġ[ position ] Ġis Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ċ Ġ* Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . Ċ Ġ* Ċ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġlong Ġclick , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem . ĠIf Ċ Ġ* Ġomitted , Ġthe Ġ[ center ] Ġof Ġthe Ġnode Ġwill Ġbe Ġused . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġtime Ġbetween Ġthe Ġdown Ġand Ġthe Ġup Ġevent Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . long Click ( ĊĠĠĠ Ġposition : ĠOffset Ġ= Ġcenter , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġview Configuration . long Press Timeout Millis Ġ+ Ġ 1 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( duration Millis Ġ>= Ġview Configuration . long Press Timeout Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Long Ġclick Ġmust Ġhave Ġa Ġduration Ġof Ġat Ġleast Ġ${ view Configuration . long Press Timeout Millis } ms " ĊĠĠĠ Ġ} ĊĠĠĠ Ġswipe ( position , Ġposition , Ġduration Millis ) Ċ } Ċ Ċ // ĠThe Ġaverage Ġof Ġmin Ġand Ġmax Ġis Ġa Ġsafe Ġdefault Ċ private Ġval ĠView Configuration . default Double Tap Delay Millis : ĠLong ĊĠĠĠ Ġget () Ġ= Ġ( double Tap Min Time Millis Ġ+ Ġdouble Tap Timeout Millis ) Ġ/ Ġ 2 Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġdouble Ġclick Ġgesture Ġ( aka Ġa Ġdouble Ġtap ) Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠThe Ġdouble Ġclick Ġis Ġdone Ġat Ġthe Ġgiven Ġ[ position ] Ġor Ġin Ġthe Ġ[ center ] Ġif Ġthe Ġ[ position ] Ġis Ċ Ġ* Ġomitted . ĠBy Ġdefault , Ġthe Ġ[ delay Millis ] Ġbetween Ġthe Ġfirst Ġand Ġthe Ġsecond Ġclick Ġis Ġhalf Ġway Ġin Ċ Ġ* Ġbetween Ġthe Ġminimum Ġand Ġmaximum Ġrequired Ġdelay Ġfor Ġa Ġdouble Ġclick . ĠThe Ġ[ position ] Ġis Ġin Ġthe Ċ Ġ* Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . Ċ Ġ* Ċ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġdouble Ġclick , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem . Ċ Ġ* ĠIf Ġomitted , Ġthe Ġ[ center ] Ġposition Ġwill Ġbe Ġused . Ċ Ġ* Ġ@ param Ġdelay Millis ĠThe Ġtime Ġbetween Ġthe Ġup Ġevent Ġof Ġthe Ġfirst Ġclick Ġand Ġthe Ġdown Ġevent Ġof Ġthe Ċ Ġ* Ġsecond Ġclick Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . double Click ( ĊĠĠĠ Ġposition : ĠOffset Ġ= Ġcenter , ĊĠĠĠ Ġdelay Millis : ĠLong Ġ= Ġview Configuration . default Double Tap Delay Millis Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( delay Millis Ġ>= Ġview Configuration . double Tap Min Time Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Time Ġbetween Ġclicks Ġin Ġdouble Ġclick Ġmust Ġbe Ġat Ġleast Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ view Configuration . double Tap Min Time Millis } ms " ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequire ( delay Millis Ġ< Ġview Configuration . double Tap Timeout Millis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Time Ġbetween Ġclicks Ġin Ġdouble Ġclick Ġmust Ġbe Ġsmaller Ġthan Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ view Configuration . double Tap Timeout Millis } ms " ĊĠĠĠ Ġ} ĊĠĠĠ Ġclick ( position ) ĊĠĠĠ Ġadvance Event Time ( delay Millis ) ĊĠĠĠ Ġclick ( position ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġgesture Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠThe Ġmotion Ġevents Ġare Ġlinear ly Ġinterpolated Ġbetween Ġ[ start ] Ġand Ġ[ end ]. ĠThe Ġcoordinates Ġare Ġin Ċ Ġ* Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ġthe Ġnode . ĠThe Ċ Ġ* Ġdefault Ġduration Ġis Ġ 2 0 0 Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart ĠThe Ġstart Ġposition Ġof Ġthe Ġgesture , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġend ĠThe Ġend Ġposition Ġof Ġthe Ġgesture , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġgesture Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe ( ĊĠĠĠ Ġstart : ĠOffset , ĊĠĠĠ Ġend : ĠOffset , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 2 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġval Ġduration Float Ġ= Ġduration Millis . toFloat () ĊĠĠĠ Ġswipe ( ĊĠĠĠĠĠĠĠ Ġcurve Ġ= Ġ{ Ġl erp ( start , Ġend , Ġit Ġ/ Ġduration Float ) Ġ}, ĊĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġduration Millis ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġgesture Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠThe Ġswipe Ġfollows Ġthe Ġ[ curve ] Ġfrom Ġ 0 Ġtill Ġ[ duration Millis ]. ĠWill Ġforce Ġsampling Ġof Ġan Ġevent Ġat Ċ Ġ* Ġall Ġtimes Ġdefined Ġin Ġ[ key Times ]. ĠThe Ġtime Ġbetween Ġevents Ġis Ġkept Ġas Ġclose Ġto Ċ Ġ* Ġ[ event Period Millis ][ Injection Scope . event Period Millis ] Ġas Ġpossible , Ġgiven Ġthe Ġconstraints . ĠThe Ċ Ġ* Ġcoordinates Ġare Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ċ Ġ* Ġthe Ġnode . ĠThe Ġdefault Ġduration Ġis Ġ 2 0 0 Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcurve ĠThe Ġfunction Ġthat Ġdefines Ġthe Ġposition Ġof Ġthe Ġgesture Ġover Ġtime Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġgesture Ċ Ġ* Ġ@ param Ġkey Times ĠAn Ġoptional Ġlist Ġof Ġtimestamps Ġin Ġmilliseconds Ġat Ġwhich Ġa Ġmove Ġevent Ġmust Ċ Ġ* Ġbe Ġsampled Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe ( ĊĠĠĠ Ġcurve : Ġ( Long ) Ġ-> ĠOffset , ĊĠĠĠ Ġduration Millis : ĠLong , ĊĠĠĠ Ġkey Times : ĠList < Long > Ġ= Ġempty List () Ċ ) Ġ{ ĊĠĠĠ Ġ@ Opt In ( Experimental Test Api :: class ) ĊĠĠĠ Ġmulti Touch Swipe ( listOf ( curve ), Ġduration Millis , Ġkey Times ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġmulti Ġtouch Ġswipe Ġgesture Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠEach Ġpointer Ġfollows Ġ[ cur ves ] &# 9 1 ; i ] Ġfrom Ġ 0 Ġtill Ġ[ duration Millis ]. ĠS ampling Ġof Ġan Ġevent Ġis Ċ Ġ* Ġforced Ġat Ġall Ġtimes Ġdefined Ġin Ġ[ key Times ]. ĠThe Ġtime Ġbetween Ġevents Ġis Ġkept Ġas Ġclose Ġto Ċ Ġ* Ġ[ event Period Millis ][ Injection Scope . event Period Millis ] Ġas Ġpossible , Ġgiven Ġthe Ġconstraints . ĠThe Ċ Ġ* Ġcoordinates Ġare Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ċ Ġ* Ġthe Ġnode . ĠThe Ġdefault Ġduration Ġis Ġ 2 0 0 Ġmilliseconds . Ċ Ġ* Ċ Ġ* ĠWill Ġstay Ġexperimental Ġuntil Ġsupport Ġhas Ġbeen Ġadded Ġto Ġstart Ġand Ġend Ġeach Ġpointer Ġat Ċ Ġ* Ġdifferent Ġtimes . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcurves ĠThe Ġfunctions Ġthat Ġdefine Ġthe Ġposition Ġof Ġthe Ġgesture Ġover Ġtime Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġgesture Ċ Ġ* Ġ@ param Ġkey Times ĠAn Ġoptional Ġlist Ġof Ġtimestamps Ġin Ġmilliseconds Ġat Ġwhich Ġa Ġmove Ġevent Ġmust Ċ Ġ* Ġbe Ġsampled Ċ Ġ*/ Ċ @ Experimental Test Api Ċ fun ĠTouch Injection Scope . multi Touch Swipe ( ĊĠĠĠ Ġcurves : ĠList <( Long ) Ġ-> ĠOffset >, ĊĠĠĠ Ġduration Millis : ĠLong , ĊĠĠĠ Ġkey Times : ĠList < Long > Ġ= Ġempty List () Ċ ) Ġ{ ĊĠĠĠ Ġval ĠstartTime Ġ= Ġ 0 L ĊĠĠĠ Ġval ĠendTime Ġ= Ġduration Millis ĊĊĠĠĠ Ġ// ĠValidate Ġinput ĊĠĠĠ Ġrequire ( duration Millis Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" duration Ġmust Ġbe Ġat Ġleast Ġ 1 Ġmilli second , Ġnot Ġ$ duration Millis " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġvalid Range Ġ= ĠstartTime .. endTime ĊĠĠĠ Ġrequire ( key Times . all Ġ{ Ġit Ġin Ġvalid Range Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" key Times Ġcontains Ġtimestamps Ġout Ġof Ġrange Ġ[$ startTime .. $ endTime ]: Ġ$ key Times " ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequire ( key Times . as Sequence (). zip With Next Ġ{ Ġa , Ġb Ġ-> Ġa Ġ<= Ġb Ġ}. all Ġ{ Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" key Times Ġmust Ġbe Ġsorted : Ġ$ key Times " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSend Ġdown Ġevents ĊĠĠĠ Ġcurves . forEach Indexed Ġ{ Ġi , Ġcurve Ġ-> ĊĠĠĠĠĠĠĠ Ġdown ( i , Ġcurve ( startTime )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSend Ġmove Ġevents Ġbetween Ġeach Ġconsecutive Ġpair Ġin Ġ[ t 0 , Ġ.. key Times , Ġt N ] ĊĠĠĠ Ġvar Ġcurr Time Ġ= ĠstartTime ĊĠĠĠ Ġvar Ġkey Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( curr Time Ġ< ĠendTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġadvance Ġkey ĊĠĠĠĠĠĠĠ Ġwhile Ġ( key Ġ< Ġkey Times . size Ġ&& Ġkey Times [ key ] Ġ<= Ġcurr Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġsend Ġevents Ġbetween Ġt Ġand Ġnext Ġkey Time ĊĠĠĠĠĠĠĠ Ġval Ġt Next Ġ= Ġif Ġ( key Ġ< Ġkey Times . size ) Ġkey Times [ key ] Ġelse ĠendTime ĊĠĠĠĠĠĠĠ Ġsend Multi Touch Swipe Segment ( cur ves , Ġcurr Time , Ġt Next ) ĊĠĠĠĠĠĠĠ Ġcurr Time Ġ= Ġt Next ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAnd Ġend Ġwith Ġup Ġevents ĊĠĠĠ Ġrepeat ( cur ves . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġup ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGenerates Ġmove Ġevents Ġbetween Ġ` f ([ t 0 ]) ` Ġand Ġ` f ([ t N ]) ` Ġduring Ġthe Ġtime Ġwindow Ġ`( t 0 , Ġt N ] `, Ġfor Ċ Ġ* Ġeach Ġ` f ` Ġin Ġ[ fs ], Ġfollowing Ġthe Ġcurves Ġdefined Ġby Ġeach Ġ` f `. ĠThe Ġnumber Ġof Ġevents Ġsent Ċ Ġ* Ġ(# num Events ) Ġis Ġsuch Ġthat Ġthe Ġtime Ġbetween Ġeach Ġevent Ġis Ġas Ġclose Ġto Ċ Ġ* Ġ[ event Period Millis ][ Input Dispatcher . event Period Millis ] Ġas Ġpossible , Ġbut Ġat Ġleast Ġ 1 . ĠThe Ġfirst Ċ Ġ* Ġevent Ġis Ġsent Ġat Ġtime Ġ` down Time Ġ+ Ġ( t N Ġ- Ġt 0 ) Ġ/ Ġ# num Events `, Ġthe Ġlast Ġevent Ġis Ġsent Ġat Ġtime Ġt N . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfs ĠThe Ġfunctions Ġthat Ġdefine Ġthe Ġcoordinates Ġof Ġthe Ġrespective Ġgest ures Ġover Ġtime Ċ Ġ* Ġ@ param Ġt 0 ĠThe Ġstart Ġtime Ġof Ġthis Ġsegment Ġof Ġthe Ġswipe , Ġin Ġmilliseconds Ġrelative Ġto Ġdown Time Ċ Ġ* Ġ@ param Ġt N ĠThe Ġend Ġtime Ġof Ġthis Ġsegment Ġof Ġthe Ġswipe , Ġin Ġmilliseconds Ġrelative Ġto Ġdown Time Ċ Ġ*/ Ċ private Ġfun ĠTouch Injection Scope . send Multi Touch Swipe Segment ( ĊĠĠĠ Ġfs : ĠList <( Long ) Ġ-> ĠOffset >, ĊĠĠĠ Ġt 0 : ĠLong , ĊĠĠĠ Ġt N : ĠLong Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġstep Ġ= Ġ 0 ĊĠĠĠ Ġ// ĠHow Ġmany Ġsteps Ġwill Ġwe Ġtake Ġbetween Ġt 0 Ġand Ġt N ? ĠAt Ġleast Ġ 1 , Ġand Ġa Ġnumber Ġthat Ġwill ĊĠĠĠ Ġ// Ġbring Ġas Ġas Ġclose Ġto Ġevent Period Ġas Ġpossible ĊĠĠĠ Ġval Ġsteps Ġ= Ġmax ( 1 , Ġ(( t N Ġ- Ġt 0 ) Ġ/ Ġevent Period Millis . toFloat ()). round ToInt ()) ĊĊĠĠĠ Ġvar Ġt Prev Ġ= Ġt 0 ĊĠĠĠ Ġwhile Ġ( step ++ Ġ< Ġsteps ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġstep Ġ/ Ġsteps . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġl erp ( t 0 , Ġt N , Ġprogress ) ĊĠĠĠĠĠĠĠ Ġfs . forEach Indexed Ġ{ Ġi , Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pointer To ( i , Ġf ( t )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmove ( t Ġ- Ġt Prev ) ĊĠĠĠĠĠĠĠ Ġt Prev Ġ= Ġt ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġpin ch Ġgesture Ġon Ġthe Ġassociated Ġnode . Ċ Ġ* Ċ Ġ* ĠFor Ġeach Ġpair Ġof Ġstart Ġand Ġend Ġ[ Offset ] s , Ġthe Ġmotion Ġevents Ġare Ġlinear ly Ġinterpolated . ĠThe Ċ Ġ* Ġcoordinates Ġare Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ġof Ċ Ġ* Ġthe Ġnode . ĠThe Ġdefault Ġduration Ġis Ġ 4 0 0 Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart 0 ĠThe Ġstart Ġposition Ġof Ġthe Ġfirst Ġgesture Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġend 0 ĠThe Ġend Ġposition Ġof Ġthe Ġfirst Ġgesture Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġstart 1 ĠThe Ġstart Ġposition Ġof Ġthe Ġsecond Ġgesture Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġend 1 ĠThe Ġend Ġposition Ġof Ġthe Ġsecond Ġgesture Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġduration Millis Ġthe Ġduration Ġof Ġthe Ġgesture Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . pin ch ( ĊĠĠĠ Ġstart 0 : ĠOffset , ĊĠĠĠ Ġend 0 : ĠOffset , ĊĠĠĠ Ġstart 1 : ĠOffset , ĊĠĠĠ Ġend 1 : ĠOffset , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 4 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġval Ġduration Float Ġ= Ġduration Millis . toFloat () ĊĠĠĠ Ġ@ Opt In ( Experimental Test Api :: class ) ĊĠĠĠ Ġmulti Touch Swipe ( ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġl erp ( start 0 , Ġend 0 , Ġit Ġ/ Ġduration Float ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġl erp ( start 1 , Ġend 1 , Ġit Ġ/ Ġduration Float ) Ġ} ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġduration Millis ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġgesture Ġon Ġthe Ġassociated Ġnode Ġsuch Ġthat Ġit Ġends Ġwith Ġthe Ġgiven Ġ[ end Velocity ]. Ċ Ġ* Ċ Ġ* ĠThe Ġswipe Ġwill Ġgo Ġthrough Ġ[ start ] Ġat Ġt = 0 Ġand Ġthrough Ġ[ end ] Ġat Ġt =[ duration Millis ]. ĠIn Ġbetween , Ċ Ġ* Ġthe Ġswipe Ġwill Ġgo Ġmon oton ically Ġfrom Ġ[ start ] Ġand Ġ[ end ], Ġbut Ġnot Ġstrictly . ĠDue Ġto Ġimp rec ision , Ċ Ġ* Ġno Ġguarantees Ġcan Ġbe Ġmade Ġfor Ġthe Ġactual Ġvelocity Ġat Ġthe Ġend Ġof Ġthe Ġgesture , Ġbut Ġgenerally Ġit Ċ Ġ* Ġis Ġwithin Ġ 0 . 1 Ġof Ġthe Ġdesired Ġvelocity . Ċ Ġ* Ċ Ġ* ĠWhen Ġa Ġswipe Ġcannot Ġbe Ġcreated Ġthat Ġresults Ġin Ġthe Ġdesired Ġvelocity Ġ( because Ġthe Ġinput Ġis Ġtoo Ċ Ġ* Ġrestrict ive ), Ġan Ġexception Ġwill Ġbe Ġthrown Ġwith Ġsuggestions Ġto Ġfix Ġthe Ġinput . Ċ Ġ* Ċ Ġ* ĠThe Ġcoordinates Ġare Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem , Ġwhere Ġ( 0 , Ġ 0 ) Ġis Ġthe Ġtop Ġleft Ġcorner Ċ Ġ* Ġof Ġthe Ġnode . ĠThe Ġdefault Ġduration Ġis Ġcalculated Ġsuch Ġthat Ġa Ġfe asible Ġswipe Ġcan Ġbe Ġcreated Ġthat Ċ Ġ* Ġends Ġin Ġthe Ġgiven Ġvelocity . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart ĠThe Ġstart Ġposition Ġof Ġthe Ġgesture , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġend ĠThe Ġend Ġposition Ġof Ġthe Ġgesture , Ġin Ġthe Ġnode 's Ġlocal Ġcoordinate Ġsystem Ċ Ġ* Ġ@ param Ġend Velocity ĠThe Ġvelocity Ġof Ġthe Ġgesture Ġat Ġthe Ġmoment Ġit Ġends Ġin Ġpx / second . ĠMust Ġbe Ċ Ġ* Ġpositive . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġgesture Ġin Ġmilliseconds . ĠMust Ġbe Ġlong Ġenough Ġthat Ġat Ċ Ġ* Ġleast Ġ 3 Ġinput Ġevents Ġare Ġgenerated , Ġwhich Ġhappens Ġwith Ġa Ġduration Ġof Ġ 4 0 ms Ġor Ġmore . ĠIf Ġomitted , Ċ Ġ* Ġa Ġduration Ġis Ġcalculated Ġsuch Ġthat Ġa Ġvalid Ġswipe Ġwith Ġvelocity Ġcan Ġbe Ġcreated . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException ĠWhen Ġno Ġswipe Ġcan Ġbe Ġgenerated Ġthat Ġwill Ġresult Ġin Ġthe Ġdesired Ċ Ġ* Ġvelocity . ĠThe Ġerror Ġmessage Ġwill Ġsuggest Ġchanges Ġto Ġthe Ġinput Ġparameters Ġsuch Ġthat Ġa Ġswipe Ċ Ġ* Ġwill Ġbecome Ġfe asible . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe With Velocity ( ĊĠĠĠ Ġstart : ĠOffset , ĊĠĠĠ Ġend : ĠOffset , ĊĠĠĠ Ġ/*@ Float Range ( from Ġ= Ġ 0 . 0 ) */ ĊĠĠĠ Ġend Velocity : ĠFloat , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= ĠVe locity Path Finder . calculate Default Duration ( start , Ġend , Ġend Velocity ) Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( end Velocity Ġ>= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Velocity Ġcannot Ġbe Ġ$ end Velocity , Ġit Ġmust Ġbe Ġpositive " ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequire ( event Period Millis Ġ< Ġ 4 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Input Dispatcher . event Period Ġmust Ġbe Ġsmaller Ġthan Ġ 4 0 ms Ġin Ġorder Ġto Ġgenerate Ġve locities " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġminimum Duration Ġ= Ġceil ( 2 . 5 f Ġ* Ġevent Period Millis ). round To Long () ĊĠĠĠ Ġrequire ( duration Millis Ġ>= Ġminimum Duration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Duration Ġmust Ġbe Ġat Ġleast Ġ${ minimum Duration } ms Ġbecause Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" velocity Ġrequires Ġat Ġleast Ġ 3 Ġinput Ġevents " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpath Finder Ġ= ĠVe locity Path Finder ( start , Ġend , Ġend Velocity , Ġduration Millis ) ĊĠĠĠ Ġswipe ( path Finder . generate Function (), Ġduration Millis ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġup Ġgesture Ġalong Ġ` x Ġ= Ġ[ center X ]` Ġof Ġthe Ġassociated Ġnode , Ġfrom Ġ[ start Y ] Ġtill Ċ Ġ* Ġ[ end Y ], Ġtaking Ġ[ duration Millis ] Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart Y ĠThe Ġy - coordinate Ġof Ġthe Ġstart Ġof Ġthe Ġswipe . ĠMust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ end Y ]. ĠBy Ġdefault Ġthe Ġ[ bottom ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġend Y ĠThe Ġy - coordinate Ġof Ġthe Ġend Ġof Ġthe Ġswipe . ĠMust Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ start Y ]. ĠBy Ġdefault Ġthe Ġ[ top ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġswipe . ĠBy Ġdefault Ġ 2 0 0 Ġmilliseconds . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe Up ( ĊĠĠĠ Ġstart Y : ĠFloat Ġ= Ġbottom , ĊĠĠĠ Ġend Y : ĠFloat Ġ= Ġtop , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 2 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( start Y Ġ>= Ġend Y ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" start Y =$ start Y Ġneeds Ġto Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġend Y =$ end Y " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstart Ġ= ĠOffset ( center X , Ġstart Y ) ĊĠĠĠ Ġval Ġend Ġ= ĠOffset ( center X , Ġend Y ) ĊĠĠĠ Ġswipe ( start , Ġend , Ġduration Millis ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġdown Ġgesture Ġalong Ġ` x Ġ= Ġ[ center X ]` Ġof Ġthe Ġassociated Ġnode , Ġfrom Ġ[ start Y ] Ġtill Ċ Ġ* Ġ[ end Y ], Ġtaking Ġ[ duration Millis ] Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart Y ĠThe Ġy - coordinate Ġof Ġthe Ġstart Ġof Ġthe Ġswipe . ĠMust Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ end Y ]. ĠBy Ġdefault Ġthe Ġ[ top ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġend Y ĠThe Ġy - coordinate Ġof Ġthe Ġend Ġof Ġthe Ġswipe . ĠMust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ start Y ]. ĠBy Ġdefault Ġthe Ġ[ bottom ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġswipe . ĠBy Ġdefault Ġ 2 0 0 Ġmilliseconds . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe Down ( ĊĠĠĠ Ġstart Y : ĠFloat Ġ= Ġtop , ĊĠĠĠ Ġend Y : ĠFloat Ġ= Ġbottom , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 2 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( start Y Ġ<= Ġend Y ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" start Y =$ start Y Ġneeds Ġto Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġend Y =$ end Y " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstart Ġ= ĠOffset ( center X , Ġstart Y ) ĊĠĠĠ Ġval Ġend Ġ= ĠOffset ( center X , Ġend Y ) ĊĠĠĠ Ġswipe ( start , Ġend , Ġduration Millis ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġleft Ġgesture Ġalong Ġ` y Ġ= Ġ[ center Y ]` Ġof Ġthe Ġassociated Ġnode , Ġfrom Ġ[ start X ] Ġtill Ċ Ġ* Ġ[ end X ], Ġtaking Ġ[ duration Millis ] Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart X ĠThe Ġx - coordinate Ġof Ġthe Ġstart Ġof Ġthe Ġswipe . ĠMust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ end X ]. ĠBy Ġdefault Ġthe Ġ[ right ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġend X ĠThe Ġx - coordinate Ġof Ġthe Ġend Ġof Ġthe Ġswipe . ĠMust Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ start X ]. ĠBy Ġdefault Ġthe Ġ[ left ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġswipe . ĠBy Ġdefault Ġ 2 0 0 Ġmilliseconds . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe Left ( ĊĠĠĠ Ġstart X : ĠFloat Ġ= Ġright , ĊĠĠĠ Ġend X : ĠFloat Ġ= Ġleft , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 2 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( start X Ġ>= Ġend X ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" start X =$ start X Ġneeds Ġto Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġend X =$ end X " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstart Ġ= ĠOffset ( start X , Ġcenter Y ) ĊĠĠĠ Ġval Ġend Ġ= ĠOffset ( end X , Ġcenter Y ) ĊĠĠĠ Ġswipe ( start , Ġend , Ġduration Millis ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġswipe Ġright Ġgesture Ġalong Ġ` y Ġ= Ġ[ center Y ]` Ġof Ġthe Ġassociated Ġnode , Ġfrom Ġ[ start X ] Ċ Ġ* Ġtill Ġ[ end X ], Ġtaking Ġ[ duration Millis ] Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstart X ĠThe Ġx - coordinate Ġof Ġthe Ġstart Ġof Ġthe Ġswipe . ĠMust Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ end X ]. ĠBy Ġdefault Ġthe Ġ[ left ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġend X ĠThe Ġx - coordinate Ġof Ġthe Ġend Ġof Ġthe Ġswipe . ĠMust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto Ġthe Ċ Ġ* Ġ[ start X ]. ĠBy Ġdefault Ġthe Ġ[ right ] Ġof Ġthe Ġnode . Ċ Ġ* Ġ@ param Ġduration Millis ĠThe Ġduration Ġof Ġthe Ġswipe . ĠBy Ġdefault Ġ 2 0 0 Ġmilliseconds . Ċ Ġ*/ Ċ fun ĠTouch Injection Scope . swipe Right ( ĊĠĠĠ Ġstart X : ĠFloat Ġ= Ġleft , ĊĠĠĠ Ġend X : ĠFloat Ġ= Ġright , ĊĠĠĠ Ġduration Millis : ĠLong Ġ= Ġ 2 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġrequire ( start X Ġ<= Ġend X ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" start X =$ start X Ġneeds Ġto Ġbe Ġless Ġthan Ġor Ġequal Ġto Ġend X =$ end X " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġstart Ġ= ĠOffset ( start X , Ġcenter Y ) ĊĠĠĠ Ġval Ġend Ġ= ĠOffset ( end X , Ġcenter Y ) ĊĠĠĠ Ġswipe ( start , Ġend , Ġduration Millis ) Ċ } Ċ