package Ġru . surf studio . standard . v _ message _ controller _ top Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . view .* Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġ[ View . On Touch Listener ] ĠÐ´ ÐµÐ» Ð°Ñİ ÑīÐ¸Ð¹ Ġ[ View ] ĠÑģÐ¼ Ð°Ñħ Ð¸Ð² Ð°ÐµÐ¼ Ð¾Ð¹ ĠÑģÐ² Ð°Ð¹ Ð¿ Ð¾Ð¼ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġm View ĠÐ² ÑĮÑİ ĠÐ´Ð»Ñı ĠÑģÐ² Ð°Ð¹ Ð¿ Ð° . Ċ Ġ* Ġ@ param Ġm Callbacks ĠÐºÐ¾Ð» Ð± ÐµÐº ĠÐºÐ¾ÑĤÐ¾ÑĢ ÑĭÐ¹ ĠÐ±ÑĥÐ´ÐµÑĤ ĠÐ²Ñĭ Ð· Ð² Ð°Ð½ ĠÐ¿Ð¾ÑģÐ» Ðµ ĠÑģÐ¼ Ð°Ñħ Ð¸Ð² Ð°Ð½Ð¸Ñı ĠÐ² ÑĮÑİ . Ċ Ġ*/ Ċ internal Ġclass ĠSw ipe Dismiss Touch Listener ( ĊĠĠĠ Ġprivate Ġval Ġm View : ĠView , ĊĠĠĠ Ġprivate Ġval Ġm Callbacks : ĠDis miss Callbacks Ċ ) Ġ: ĠView . On Touch Listener Ġ{ ĊĊĠĠĠ Ġ// ĠCached ĠView Configuration Ġand Ġsystem - wide Ġconstant Ġvalues ĊĠĠĠ Ġprivate Ġval Ġm S lop : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Min Fl ing Velocity : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Animation Time : ĠLong ĊĠĠĠ Ġprivate Ġvar Ġm View Width Ġ= Ġ 1 Ġ// Ġ 1 Ġand Ġnot Ġ 0 Ġto Ġprevent Ġdiv iding Ġby Ġzero ĊĠĠĠ Ġprivate Ġvar Ġm View Height Ġ= Ġ 1 ĊĊĠĠĠ Ġ// ĠTrans ient Ġproperties ĊĠĠĠ Ġprivate Ġvar Ġm Down X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Down Y : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Sw ip ing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Sw ip ing S lop : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Velocity Tracker : ĠVe locity Tracker ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Translation X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Translation Y : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvc Ġ= ĠView Configuration . get ( m View . context ) ĊĠĠĠĠĠĠĠ Ġm S lop Ġ= Ġvc . scaled Touch S lop ĊĠĠĠĠĠĠĠ Ġm Min Fl ing Velocity Ġ= Ġvc . scaled Minimum Fl ing Velocity Ġ* Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġm Animation Time Ġ= Ġm View . context . resources . getInteger ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . integer . config _ short Anim Time ĊĠĠĠĠĠĠĠ Ġ). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( view : ĠView , Ġmotion Event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġoffset Ġbecause Ġthe Ġview Ġis Ġtranslated Ġduring Ġswipe ĊĠĠĠĠĠĠĠ Ġmotion Event . offset Location ( m Translation X , Ġm Translation Y ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m View Width Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Width Ġ= Ġm View . width ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m View Height Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Height Ġ= Ġm View . height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( motion Event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Down X Ġ= Ġmotion Event . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Down Y Ġ= Ġmotion Event . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Callbacks . can Dismiss ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Velocity Tracker Ġ= ĠVe locity Tracker . obtain () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Velocity Tracker ?. add Movement ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks . on Touch ( view , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġmotion Event . raw X Ġ- Ġm Down X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġmotion Event . raw Y Ġ- Ġm Down Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Velocity Tracker ?. let Ġ{ Ġtracker : ĠVe locity Tracker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . add Movement ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . compute Current Velocity ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvelocity X Ġ= Ġtracker . x Velocity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvelocity Y Ġ= Ġtracker . y Velocity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Velocity X Ġ= Ġabs ( velocity X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Velocity Y Ġ= Ġabs ( tracker . y Velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed En ough X Ġ= Ġabs ( delta X ) Ġ> Ġm View Width Ġ/ Ġ 4 Ġ&& Ġm Sw ip ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed InThe Direction Of Fl ing X Ġ= Ġm Min Fl ing Velocity Ġ<= Ġabs Velocity X Ġ&& Ġabs Velocity Y Ġ< Ġabs Velocity X Ġ&& Ġm Sw ip ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed H orizontally Ġ= Ġis Sw ip ed En ough X Ġ|| Ġis Sw ip ed InThe Direction Of Fl ing X ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed En ough Y Ġ= Ġabs ( delta Y ) Ġ> Ġm View Height Ġ/ Ġ 4 Ġ&& Ġm Sw ip ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed InThe Direction Of Fl ing Y Ġ= Ġm Min Fl ing Velocity Ġ<= Ġabs Velocity Y Ġ&& Ġabs Velocity Y Ġ> Ġabs Velocity X Ġ&& Ġm Sw ip ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sw ip ed Vert ically Ġ= Ġis Sw ip ed En ough Y Ġ|| Ġis Sw ip ed InThe Direction Of Fl ing Y Ġ// Ġcancel ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdismiss Ġonly Ġif Ġfl ing ing Ġin Ġthe Ġsame Ġdirection Ġas Ġdragging ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdismiss Ġ= Ġis Sw ip ed En ough X Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity X Ġ< Ġ 0 Ġ== Ġdelta X Ġ< Ġ 0 Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sw ip ed En ough Y Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y Ġ< Ġ 0 Ġ== Ġdelta Y Ġ< Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dismiss ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . animate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sw ip ed H orizontally Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdismiss Right Ġ= Ġdelta X Ġ> Ġ 0 Ġ|| Ġvelocity X Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation X Ġ= Ġif Ġ( dismiss Right ) Ġm View Width Ġelse Ġ- m View Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X ( translation X . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sw ip ed Vert ically Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdismiss Up Ġ= Ġdelta Y Ġ< Ġ 0 Ġ|| Ġvelocity Y Ġ< Ġ 0 Ġ== Ġdelta X Ġ< Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation Y Ġ= Ġif Ġ( dismiss Up ) Ġ- m View Height Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y ( translation Y . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( m Animation Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Sw ip ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcancel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Swipe C ancell ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks . on Touch ( view , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Touch Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Velocity Tracker ?. let Ġ{ Ġtracker : ĠVe locity Tracker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Swipe C ancell ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Touch Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Velocity Tracker ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add Movement ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġmotion Event . raw X Ġ- Ġm Down X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġmotion Event . raw Y Ġ- Ġm Down Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Already Sw ip ed H orizontally Ġ= Ġm Translation X Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Already Sw ip ed Vert ically Ġ= Ġm Translation Y Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Horizontal Swipe Ġ= Ġabs ( delta Y ) Ġ< Ġabs ( delta X ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sw ip ing Ġ= Ġabs ( delta X ) Ġ> Ġm S lop Ġ|| Ġabs ( delta Y ) Ġ> Ġm S lop ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Sw ip ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sw ip ing S lop Ġ= Ġif Ġ( delta X Ġ> Ġ 0 ) Ġm S lop Ġelse Ġ- m S lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . parent . request Dis allow Intercept Touch Event ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCancel Ġtouch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Event Ġ= ĠMotion Event . obtain ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Event . action Ġ= ĠMotion Event . ACTION _ CANCEL Ġor Ġ( motion Event . action Index Ġshl ĠMotion Event . ACTION _ POINTER _ INDEX _ SHIFT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . on Touch Event ( cancel Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Event . recycle () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Horizontal Swipe Ġ&& Ġ! is Already Sw ip ed Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Translation X Ġ= Ġdelta X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . translation X Ġ= Ġdelta X Ġ- Ġm Sw ip ing S lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Already Sw ip ed H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Swipe Up Ġ= Ġdelta Y Ġ< Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Translation Y Ġ= Ġif Ġ( is Swipe Up ) Ġdelta Y Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Swipe C ancell ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġm View . animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( m Animation Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Touch Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Velocity Tracker Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Translation X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Translation Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Down X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Down Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Sw ip ing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Dismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAn imate Ġthe Ġdis missed Ġview Ġto Ġzero - height Ġand Ġthen Ġfire Ġthe Ġdismiss Ġcallback . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġtriggers Ġlayout Ġon Ġeach Ġanimation Ġframe ; Ġin Ġthe Ġfuture Ġwe Ġmay Ġwant Ġto Ġdo Ġsomething ĊĠĠĠĠĠĠĠ Ġ// Ġs mar ter Ġand Ġmore Ġperform ant . ĊĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġm View . layout Params ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Height Ġ= Ġm View . height ĊĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Int ( original Height , Ġ 1 ). set Duration ( m Animation Time ) ĊĊĠĠĠĠĠĠĠ Ġanim ator . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks . on Dismiss ( m View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġview Ġpresentation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . translation X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height Ġ= Ġoriginal Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcallback Ġinterface Ġused Ġby Ġ[ Swipe Dismiss Touch Listener ] Ġto Ġinform Ġits Ġclient ĊĠĠĠĠ Ġ* Ġabout Ġa Ġsuccessful Ġdismiss al Ġof Ġthe Ġview Ġfor Ġwhich Ġit Ġwas Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġinterface ĠDis miss Callbacks Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġto Ġdetermine Ġwhether Ġthe Ġview Ġcan Ġbe Ġdis missed . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġboolean ĠThe Ġview Ġcan Ġdismiss . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcan Dismiss (): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġuser Ġhas Ġindicated Ġthey Ġshe Ġwould Ġlike Ġto Ġdismiss Ġthe Ġview . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview ĠThe Ġorigin ating Ġ[ View ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Dismiss ( view : ĠView ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġuser Ġto uches Ġthe Ġview Ġor Ġrelease Ġthe Ġview . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview ĠThe Ġorigin ating Ġ[ View ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtouch ĠThe Ġview Ġis Ġbeing Ġtouched . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Touch ( view : ĠView , Ġtouch : ĠBoolean ) ĊĠĠĠ Ġ} Ċ } Ċ