package Ġcom . github . ch u ross . fl ing layout Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . widget . View Drag Helper Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ Ċ type alias ĠPosition ChangeListener Ġ= Ġ( top : ĠInt , Ġleft : ĠInt , Ġposition Range Rate : ĠFloat ) Ġ-> ĠUnit Ċ type alias ĠDis miss Listener Ġ= Ġ() Ġ-> ĠUnit Ċ Ċ class ĠF ling Layout Ġ: ĠFrame Layout Ġ{ ĊĊĠĠĠ Ġvar Ġis Drag Enabled : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġvar Ġis Dismiss Enabled : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġvar Ġposition ChangeListener : ĠPosition ChangeListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdismiss Listener : ĠDis miss Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġthreshold : ĠInt Ġ= Ġ 1 5 0 0 ĊĠĠĠ Ġprivate Ġvar Ġdrag Helper : ĠView Drag Helper ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdefault Child X : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdefault Child Y : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġposition Range Rate : ĠFloat ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs , Ġdef Style Attr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag Helper Ġ= ĠView Drag Helper . create ( this , Ġ 1 F , Ġobject : ĠView Drag Helper . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Capture View ( child : ĠView ?, Ġpointer Id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Drag Enabled Ġ&& Ġchild ?. visibility Ġ== ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View Vertical Drag Range ( child : ĠView ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Vertical ( child : ĠView ?, Ġtop : ĠInt , Ġdy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Position Changed ( changed View : ĠView ?, Ġleft : ĠInt , Ġtop : ĠInt , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Position Changed ( changed View , Ġleft , Ġtop , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Child Y Ġ= Ġdefault Child Y Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Y Ġ= Ġ( meas ured Height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= ĠMath . abs ( top Ġ- Ġdefault Child Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Range Rate Ġ= ĠMath . min ( 1 F , Ġdistance . toFloat () Ġ/ Ġrange Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ChangeListener ?. invoke ( top , Ġleft , Ġposition Range Rate Ġ?: Ġ 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Released ( released Child : ĠView ?, Ġx vel : ĠFloat , Ġy vel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Released ( released Child , Ġx vel , Ġy vel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreleased Child ?. let Ġ{ Ġthis @ Fl ing Layout . on View Released ( it , Ġy vel ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Fl ing Layout , Ġdef Style Attr , Ġ 0 ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Drag Enabled Ġ= Ġit . getBoolean ( R . style able . Fl ing Layout _ fl _ is Drag Enabled , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Dismiss Enabled Ġ= Ġit . getBoolean ( R . style able . Fl ing Layout _ fl _ is Dismiss Enabled , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ}. recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon View Released ( target : ĠView , Ġy vel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġposition Range Rate Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġdefault Child X Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġdefault Child Y Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( y vel ) Ġ< Ġthreshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Helper ?. set tle Capt ured View At ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Dismiss Enabled ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Y Ġ= Ġif Ġ( y vel Ġ> Ġ 0 ) Ġmeasured Height Ġelse Ġ- target . meas ured Height ĊĊĠĠĠĠĠĠĠ Ġdrag Helper ?. smooth Slide View To ( target , Ġx , Ġtarget Y ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĊĠĠĠĠĠĠĠ Ġdismiss Listener ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdrag Helper ?. should Intercept Touch Event ( ev ) Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag Helper ?. process Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ> Ġ 1 ) Ġthrow ĠIllegalStateException (" child Ġmust Ġbe Ġsingle : Ġcurrent Ġchild Ġcount =$ child Count ") ĊĊĠĠĠĠĠĠĠ Ġdefault Child X Ġ= Ġget Child At ( 0 )?. left ĊĠĠĠĠĠĠĠ Ġdefault Child Y Ġ= Ġget Child At ( 0 )?. top ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . compute Scroll () ĊĠĠĠĠĠĠĠ Ġif Ġ( drag Helper ?. continue Set t ling ( true ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }