package Ġcom . w ix . de tox . espress o . scroll Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Configuration Ċ import Ġandroidx . test . espress o . Ui Controller Ċ import Ġandroidx . test . espress o . action . Motion Events Ċ Ċ private Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Det ox Sync ed Swipe Exec " Ċ private Ġval ĠPRECISION Ġ= Ġfloat ArrayOf ( 1 f , Ġ 1 f ) Ċ Ċ /** Ċ Ġ* ĠSync ' ed Ġimplementation Ġof Ġa Ġ[ Swipe Executor ] Ġ- Ġi . e . Ġmakes Ġsure Ġeach Ġstep Ġis Ċ Ġ* Ġbacked Ġby Ġproper Ġdelays Ġwhen Ġfinished . Ċ Ġ* Ċ Ġ* Ġ@ see ĠDet ox Sw iper Ċ Ġ*/ Ċ class ĠSync ed Swipe Executor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġui Controller : ĠUi Controller , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġper Motion Time MS : ĠLong ) ĊĠĠĠ Ġ: ĠSw ipe Executor Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġdown Event : ĠMotion Event ĊĊĠĠĠ Ġprivate Ġvar Ġtarget Time : ĠLong Ġ= Ġ- 1 L ĊĊĠĠĠ Ġoverride Ġfun Ġstart At ( touch X : ĠFloat , Ġtouch Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdown Event Ġ= ĠMotion Events . send Down ( ui Controller , Ġfloat ArrayOf ( touch X , Ġtouch Y ), ĠPRECISION ). down ĊĠĠĠĠĠĠĠ Ġtarget Time Ġ= Ġdown Event . down Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmove To ( target X : ĠFloat , Ġtarget Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Motion Events . send Movement ( ui Controller , Ġdown Event , Ġfloat ArrayOf ( target X , Ġtarget Y ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" Injection Ġof Ġmove Ġevent Ġas Ġpart Ġof Ġthe Ġscroll Ġfailed . ĠSending Ġcancel Ġevent .") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Events . send Cancel ( ui Controller , Ġdown Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsync Movement () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish At ( release X : ĠFloat , Ġrelease Y : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Motion Events . send Up ( ui Controller , Ġdown Event , Ġfloat ArrayOf ( release X , Ġrelease Y ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" Injection Ġof Ġup Ġevent Ġas Ġpart Ġof Ġthe Ġscroll Ġfailed . ĠSending Ġcancel Ġevent .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Events . send Cancel ( ui Controller , Ġdown Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown Event . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsync Release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync Movement () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Left Ġ= Ġtarget Time Ġ- ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġif Ġ( time Left Ġ> Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Controller . loop MainThread For At Least ( time Left ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtarget Time Ġ+= Ġper Motion Time MS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync Release () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEns ures Ġthat Ġall Ġchild Ġviews Ġleave Ġthe Ġpressed - on Ġstate , Ġif Ġin Ġeffect . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġparam ount Ġfor Ġhaving Ġcon sequent Ġtap - events Ġregistered Ġproperly . ĊĠĠĠĠĠĠĠ Ġval Ġandroid Pressed Duration Ġ= ĠView Configuration . get Pressed State Duration () ĊĠĠĠĠĠĠĠ Ġif Ġ( android Pressed Duration Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Controller . loop MainThread For At Least ( android Pressed Duration . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ