package Ġcom . eren pap ak ci . us g challenge . base . recyclerview . swipe able Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . Gesture Detector Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . custom view . widget . View Drag Helper Ċ import Ġcom . eren pap ak ci . us g challenge . R Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ @ Suppress Lint (" R tl Hard coded ") Ċ class ĠSw ipe Re veal Layout Ġ: ĠViewGroup Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMain Ġview Ġis Ġthe Ġview Ġwhich Ġis Ġshown Ġwhen Ġthe Ġlayout Ġis Ġclosed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Main View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSecondary Ġview Ġis Ġthe Ġview Ġwhich Ġis Ġshown Ġwhen Ġthe Ġlayout Ġis Ġopened . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Secondary View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġrectangle Ġposition Ġof Ġthe Ġmain Ġview Ġwhen Ġthe Ġlayout Ġis Ġclosed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Rect Main Close Ġ= ĠRect () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġrectangle Ġposition Ġof Ġthe Ġmain Ġview Ġwhen Ġthe Ġlayout Ġis Ġopened . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Rect Main Open Ġ= ĠRect () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġrectangle Ġposition Ġof Ġthe Ġsecondary Ġview Ġwhen Ġthe Ġlayout Ġis Ġclosed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Rect Sec Close Ġ= ĠRect () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġrectangle Ġposition Ġof Ġthe Ġsecondary Ġview Ġwhen Ġthe Ġlayout Ġis Ġopened . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Rect Sec Open Ġ= ĠRect () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġminimum Ġdistance Ġ( px ) Ġto Ġthe Ġclosest Ġdrag Ġedge Ġthat Ġthe ĠSw ipe Re veal Layout ĊĠĠĠĠ Ġ* Ġwill Ġdis allow Ġthe Ġparent Ġto Ġintercept Ġtouch Ġevent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Min Dist Request Dis allow Parent Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Is Open Before Init Ġ= Ġfalse ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġm Abort ed Ġ= Ġfalse ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġm Is Scrolling Ġ= Ġfalse ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġdrag / swipe Ġmotion Ġis Ġcurrently Ġlocked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġis Drag Locked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġminimum Ġfl ing Ġvelocity Ġto Ġcause Ġthe Ġlayout Ġto Ġopen / close . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġdp Ġper Ġsecond ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmin Fl ing Velocity Ġ= ĠDEFAULT _ MIN _ FL ING _ VE LOC ITY ĊĠĠĠ Ġprivate Ġvar Ġm State Ġ= ĠSTATE _ CLOSE ĊĠĠĠ Ġprivate Ġvar Ġm Mode Ġ= ĠMODE _ NORMAL ĊĊĠĠĠ Ġprivate Ġvar Ġm Last Main Left Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Last Main Top Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġedge Ġwhere Ġthe Ġlayout Ġcan Ġbe Ġdrag ged Ġfrom . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠCan Ġbe Ġone Ġof Ġthese ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ[. DR AG _ EDGE _ LEFT ] ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ[. DR AG _ EDGE _ TOP ] ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ[. DR AG _ EDGE _ RIGHT ] ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ[. DR AG _ EDGE _ BOTTOM ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdrag Edge Ġ= ĠDR AG _ EDGE _ LEFT ĊĊĠĠĠ Ġprivate Ġvar Ġm Drag Dist Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Prev X Ġ= Ġ- 1 f ĊĠĠĠ Ġprivate Ġvar Ġm Prev Y Ġ= Ġ- 1 f ĊĊĠĠĠ Ġprivate Ġvar Ġm Drag Helper : ĠView Drag Helper ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Gesture Detector : ĠGest ure Detector Compat ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Drag State ChangeListener : ĠDrag State ChangeListener ? Ġ= Ġnull Ġ// Ġonly Ġused Ġfor ĠView Bind Helper ĊĠĠĠ Ġprivate Ġvar Ġm Swipe Listener : ĠSw ipe Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm On Layout Count Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġlayout Ġis Ġfully Ġopened , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Opened : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm State Ġ== ĠSTATE _ OPEN ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġlayout Ġis Ġfully Ġclosed , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Closed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm State Ġ== ĠSTATE _ CLOSE ĊĊĠĠĠ Ġprivate Ġval Ġmain Open Left : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġm Rect Main Close . left Ġ+ Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġm Rect Main Close . left Ġ- Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġm Rect Main Close . left ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġm Rect Main Close . left ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmain Open Top : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġm Rect Main Close . top ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġm Rect Main Close . top ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġm Rect Main Close . top Ġ+ Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġm Rect Main Close . top Ġ- Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsec Open Left : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Mode Ġ== ĠMODE _ NORMAL Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ BOTTOM Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ TOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Rect Sec Close . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Sec Close . left Ġ+ Ġm Secondary View !!. width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Sec Close . left Ġ- Ġm Secondary View !!. width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsec Open Top : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Mode Ġ== ĠMODE _ NORMAL Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ LEFT Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Rect Sec Close . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ TOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Sec Close . top Ġ+ Ġm Secondary View !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Sec Close . top Ġ- Ġm Secondary View !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Gesture Listener Ġ= Ġobject Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhas Dis allowed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Scrolling Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dis allowed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( e 1 : ĠMotion Event , Ġe 2 : ĠMotion Event , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Scrolling Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( e 1 : ĠMotion Event , Ġe 2 : ĠMotion Event , Ġdistance X : ĠFloat , Ġdistance Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Scrolling Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Dis allow : ĠBoolean ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Dis allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Dis allow Ġ= Ġdist To Closest Edge Ġ>= Ġm Min Dist Request Dis allow Parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Dis allow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dis allowed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Dis allow Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdis allow Ġparent Ġto Ġintercept Ġtouch Ġevent Ġso Ġthat Ġthe Ġlayout Ġwill Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġproperly Ġon ĠRecyclerView Ġor Ġview Ġthat Ġhandles Ġscroll Ġgesture . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( should Dis allow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdist To Closest Edge : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Right Ġ= Ġm Rect Main Close . left Ġ+ Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin ( m Main View !!. left Ġ- Ġm Rect Main Close . left , Ġpivot Right Ġ- Ġm Main View !!. left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Left Ġ= Ġm Rect Main Close . right Ġ- Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin ( m Main View !!. right Ġ- Ġpivot Left , Ġm Rect Main Close . right Ġ- Ġm Main View !!. right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Bottom Ġ= Ġm Rect Main Close . top Ġ+ Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin ( m Main View !!. bottom Ġ- Ġpivot Bottom , Ġpivot Bottom Ġ- Ġm Main View !!. top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Top Ġ= Ġm Rect Main Close . bottom Ġ- Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin ( m Rect Main Close . bottom Ġ- Ġm Main View !!. bottom , Ġm Main View !!. bottom Ġ- Ġpivot Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhalf way Pivot Horizontal : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Main Close . left Ġ+ Ġm Secondary View !!. width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Main Close . right Ġ- Ġm Secondary View !!. width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhalf way Pivot Vertical : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ TOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Main Close . top Ġ+ Ġm Secondary View !!. height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect Main Close . bottom Ġ- Ġm Secondary View !!. height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Drag Helper Callback Ġ= Ġobject Ġ: ĠView Drag Helper . Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġslide Offset : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġ( m Main View !!. left Ġ- Ġm Rect Main Close . left ). toFloat () Ġ/ Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġ( m Rect Main Close . left Ġ- Ġm Main View !!. left ). toFloat () Ġ/ Ġm Secondary View !!. width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġ( m Main View !!. top Ġ- Ġm Rect Main Close . top ). toFloat () Ġ/ Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġ( m Rect Main Close . top Ġ- Ġm Main View !!. top ). toFloat () Ġ/ Ġm Secondary View !!. height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Capture View ( child : ĠView , Ġpointer Id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Abort ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drag Locked ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper ?. capture Child View ( m Main View !! , Ġpointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Vertical ( child : ĠView , Ġtop : ĠInt , Ġdy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġmax ( min ( top , Ġm Rect Main Close . top Ġ+ Ġm Secondary View !!. height ), Ġm Rect Main Close . top ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġmax ( min ( top , Ġm Rect Main Close . top ), Ġm Rect Main Close . top Ġ- Ġm Secondary View !!. height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġchild . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Horizontal ( child : ĠView , Ġleft : ĠInt , Ġdx : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġmax ( min ( left , Ġm Rect Main Close . left ), Ġm Rect Main Close . left Ġ- Ġm Secondary View !!. width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġmax ( min ( left , Ġm Rect Main Close . left Ġ+ Ġm Secondary View !!. width ), Ġm Rect Main Close . left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġchild . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Released ( released Child : ĠView , Ġx vel : ĠFloat , Ġy vel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvel Right Exceeded Ġ= Ġpx To Dp ( x vel . toInt ()) Ġ>= Ġmin Fl ing Velocity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvel Left Exceeded Ġ= Ġpx To Dp ( x vel . toInt ()) Ġ<= Ġ- min Fl ing Velocity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvel Up Exceeded Ġ= Ġpx To Dp ( y vel . toInt ()) Ġ<= Ġ- min Fl ing Velocity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvel Down Exceeded Ġ= Ġpx To Dp ( y vel . toInt ()) Ġ>= Ġmin Fl ing Velocity ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Horizontal Ġ= Ġhalf way Pivot Horizontal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Vertical Ġ= Ġhalf way Pivot Vertical ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġif Ġ( vel Right Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vel Left Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. right Ġ< Ġpivot Horizontal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġif Ġ( vel Right Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vel Left Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. left Ġ< Ġpivot Horizontal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġif Ġ( vel Up Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vel Down Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. top Ġ< Ġpivot Vertical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġif Ġ( vel Up Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vel Down Exceeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. bottom Ġ< Ġpivot Vertical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Edge Drag Started ( edge Flags : ĠInt , Ġpointer Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Edge Drag Started ( edge Flags , Ġpointer Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drag Locked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Start Left Ġ= Ġdrag Edge Ġ== ĠDR AG _ EDGE _ RIGHT Ġ&& Ġedge Flags Ġ== ĠView Drag Helper . EDGE _ LEFT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Start Right Ġ= Ġdrag Edge Ġ== ĠDR AG _ EDGE _ LEFT Ġ&& Ġedge Flags Ġ== ĠView Drag Helper . EDGE _ RIGHT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Start Top Ġ= Ġdrag Edge Ġ== ĠDR AG _ EDGE _ BOTTOM Ġ&& Ġedge Flags Ġ== ĠView Drag Helper . EDGE _ TOP ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Start Bottom Ġ= Ġdrag Edge Ġ== ĠDR AG _ EDGE _ TOP Ġ&& Ġedge Flags Ġ== ĠView Drag Helper . EDGE _ BOTTOM ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge Start Left Ġ|| Ġedge Start Right Ġ|| Ġedge Start Top Ġ|| Ġedge Start Bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper !!. capture Child View ( m Main View !! , Ġpointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Mode Ġ== ĠMODE _ SAME _ LEVEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ LEFT Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View !!. offset Left And Right ( dx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View !!. offset Top And Bottom ( dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Moved Ġ= Ġm Main View !!. left Ġ!= Ġm Last Main Left Ġ|| Ġm Main View !!. top Ġ!= Ġm Last Main Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Swipe Listener Ġ!= Ġnull Ġ&& Ġis Moved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. left Ġ== Ġm Rect Main Close . left Ġ&& Ġm Main View !!. top Ġ== Ġm Rect Main Close . top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Listener !!. on Closed ( this @ Swipe Re veal Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Main View !!. left Ġ== Ġm Rect Main Open . left Ġ&& Ġm Main View !!. top Ġ== Ġm Rect Main Open . top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Listener !!. on Opened ( this @ Swipe Re veal Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Listener !!. on Slide ( this @ Swipe Re veal Layout , Ġslide Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Main Left Ġ= Ġm Main View !!. left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Main Top Ġ= Ġm Main View !!. top ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this @ Swipe Re veal Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Drag StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Drag StateChanged ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev State Ġ= Ġm State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Drag Helper . STATE _ DR AG GING Ġ-> Ġm State Ġ= ĠSTATE _ DR AG GING ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Drag Helper . STATE _ IDLE Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdrag Ġedge Ġis Ġleft Ġor Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= Ġif Ġ( drag Edge Ġ== ĠDR AG _ EDGE _ LEFT Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. left Ġ== Ġm Rect Main Close . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ CLOSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ OPEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Main View !!. top Ġ== Ġm Rect Main Close . top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ CLOSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ OPEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}// Ġdrag Ġedge Ġis Ġtop Ġor Ġbottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Drag State ChangeListener Ġ!= Ġnull Ġ&& Ġ! m Abort ed Ġ&& Ġprev State Ġ!= Ġm State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag State ChangeListener ?. on Drag StateChanged ( m State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠDrag State ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Drag StateChanged ( state : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġfor Ġmonitoring Ġevents Ġabout Ġswipe Ġlayout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠSw ipe Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġmain Ġview Ġbecomes Ġcompletely Ġclosed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Closed ( view : ĠSw ipe Re veal Layout ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġmain Ġview Ġbecomes Ġcompletely Ġopened . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Opened ( view : ĠSw ipe Re veal Layout ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġmain Ġview 's Ġposition Ġchanges . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġslide Offset ĠThe Ġnew Ġoffset Ġof Ġthe Ġmain Ġview Ġwithin Ġits Ġrange , Ġfrom Ġ 0 - 1 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Slide ( view : ĠSw ipe Re veal Layout , Ġslide Offset : ĠFloat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNo - op Ġstub Ġfor Ġ[ Swipe Listener ]. ĠIf Ġyou Ġonly Ġwant Ġot Ġimplement Ġa Ġsubset ĊĠĠĠĠ Ġ* Ġof Ġthe Ġlistener Ġmethods , Ġyou Ġcan Ġextend Ġthis Ġinstead Ġof Ġimplement Ġthe Ġfull Ġinterface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠSimple Swipe Listener Ġ: ĠSw ipe Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closed ( view : ĠSw ipe Re veal Layout ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Opened ( view : ĠSw ipe Re veal Layout ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( view : ĠSw ipe Re veal Layout , Ġslide Offset : ĠFloat ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Gesture Detector ?. on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġm Drag Helper ?. process Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Drag Locked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Intercept Touch Event ( ev ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Drag Helper ?. process Touch Event ( ev ) ĊĠĠĠĠĠĠĠ Ġm Gesture Detector !!. on Touch Event ( ev ) ĊĠĠĠĠĠĠĠ Ġaccum ulate Drag Dist ( ev ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcould Be come Click Ġ= Ġcould Be come Click ( ev ) ĊĠĠĠĠĠĠĠ Ġval Ġset t ling Ġ= Ġm Drag Helper ?. view Drag State Ġ== ĠView Drag Helper . STATE _ SET TL ING ĊĠĠĠĠĠĠĠ Ġval Ġidle After Sc rolled Ġ= Ġm Drag Helper ?. view Drag State Ġ== ĠView Drag Helper . STATE _ IDLE Ġ&& Ġm Is Scrolling ĊĊĠĠĠĠĠĠĠ Ġ// Ġmust Ġbe Ġplaced Ġas Ġthe Ġlast Ġstatement ĊĠĠĠĠĠĠĠ Ġm Prev X Ġ= Ġev . x ĊĠĠĠĠĠĠĠ Ġm Prev Y Ġ= Ġev . y ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġtrue Ġ=> Ġintercept , Ġcannot Ġtrigger ĠonClick Ġevent ĊĠĠĠĠĠĠĠ Ġreturn Ġ! could Be come Click Ġ&& Ġ( set t ling Ġ|| Ġidle After Sc rolled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġviews ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View Ġ= Ġget Child At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Main View Ġ= Ġget Child At ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child Count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Main View Ġ= Ġget Child At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Layout ( ĊĠĠĠĠĠĠĠ Ġchanged : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , ĊĠĠĠĠĠĠĠ Ġb : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Abort ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleft : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġright : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtop : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbottom : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġbottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġright ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Left Ġ= Ġpadding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Right Ġ= Ġmax ( r Ġ- Ġpadding Right Ġ- Ġl , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Top Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Bottom Ġ= Ġmax ( b Ġ- Ġpadding Bottom Ġ- Ġt , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmeasured Child Height Ġ= Ġchild . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmeasured Child Width Ġ= Ġchild . meas ured Width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġtake Ġaccount Ġif Ġchild Ġsize Ġis Ġmatch _ parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Params Ġ= Ġchild . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatch Parent Height Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatch Parent Width Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Parent Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Params . height Ġ== ĠLayout Params . MATCH _ PARENT Ġ|| Ġchild Params . height Ġ== ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Parent Width Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Params . width Ġ== ĠLayout Params . MATCH _ PARENT Ġ|| Ġchild Params . width Ġ== ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Parent Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Child Height Ġ= Ġmax Bottom Ġ- Ġmin Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Params !!. height Ġ= Ġmeasured Child Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Parent Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Child Width Ġ= Ġmax Right Ġ- Ġmin Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Params !!. width Ġ= Ġmeasured Child Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġmax ( r Ġ- Ġmeasured Child Width Ġ- Ġpadding Right Ġ- Ġl , Ġmin Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġmin ( padding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġmax ( r Ġ- Ġpadding Right Ġ- Ġl , Ġmin Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġmin ( meas ured Child Height Ġ+ Ġpadding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġmin ( padding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġmin ( padding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġmin ( meas ured Child Width Ġ+ Ġpadding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġmin ( meas ured Child Height Ġ+ Ġpadding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġmin ( padding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġmin ( padding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġmin ( meas ured Child Width Ġ+ Ġpadding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġmin ( meas ured Child Height Ġ+ Ġpadding Top , Ġmax Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġmin ( padding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġmax ( b Ġ- Ġmeasured Child Height Ġ- Ġpadding Bottom Ġ- Ġt , Ġmin Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġmin ( meas ured Child Width Ġ+ Ġpadding Left , Ġmax Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġmax ( b Ġ- Ġpadding Bottom Ġ- Ġt , Ġmin Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtaking Ġaccount Ġoffset Ġwhen Ġmode Ġis ĠS AME _ LEVEL ĊĠĠĠĠĠĠĠ Ġif Ġ( m Mode Ġ== ĠMODE _ SAME _ LEVEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( drag Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ LEFT Ġ-> Ġm Secondary View !!. offset Left And Right (- m Secondary View !!. width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ RIGHT Ġ-> Ġm Secondary View !!. offset Left And Right ( m Secondary View !!. width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ TOP Ġ-> Ġm Secondary View !!. offset Top And Bottom (- m Secondary View !!. height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDR AG _ EDGE _ BOTTOM Ġ-> Ġm Secondary View !!. offset Top And Bottom ( m Secondary View !!. height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Rects () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Open Before Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Last Main Left Ġ= Ġm Main View !!. left ĊĠĠĠĠĠĠĠ Ġm Last Main Top Ġ= Ġm Main View !!. top ĊĊĠĠĠĠĠĠĠ Ġm On Layout Count ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Measure Spec Internal Ġ= Ġwidth Measure Spec ĊĠĠĠĠĠĠĠ Ġvar Ġheight Measure Spec Internal Ġ= Ġheight Measure Spec ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Layout Ġmust Ġhave Ġtwo Ġchildren ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout Params ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec Internal ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec Internal ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġdesired Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdesired Height Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġfind Ġthe Ġlargest Ġchild ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Child ( child , Ġwidth Measure Spec Internal , Ġheight Measure Spec Internal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width Ġ= Ġmax ( child . meas ured Width , Ġdesired Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height Ġ= Ġmax ( child . meas ured Height , Ġdesired Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġnew Ġmeasure Ġspec Ġusing Ġthe Ġlargest Ġchild Ġwidth ĊĠĠĠĠĠĠĠ Ġwidth Measure Spec Internal Ġ= ĠMeasure Spec . make Measure Spec ( desired Width , Ġwidth Mode ) ĊĠĠĠĠĠĠĠ Ġheight Measure Spec Internal Ġ= ĠMeasure Spec . make Measure Spec ( desired Height , Ġheight Mode ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeasured Width Ġ= ĠMeasure Spec . getSize ( width Measure Spec Internal ) ĊĠĠĠĠĠĠĠ Ġval Ġmeasured Height Ġ= ĠMeasure Spec . getSize ( height Measure Spec Internal ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Params Ġ= Ġchild . layout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Params . height Ġ== ĠLayout Params . MATCH _ PARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . minimum Height Ġ= Ġmeasured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Params . width Ġ== ĠLayout Params . MATCH _ PARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . minimum Width Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Child ( child , Ġwidth Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width Ġ= Ġmax ( child . meas ured Width , Ġdesired Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height Ġ= Ġmax ( child . meas ured Height , Ġdesired Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtaking Ġaccounts Ġof Ġpadding ĊĠĠĠĠĠĠĠ Ġdesired Width Ġ+= Ġpadding Left Ġ+ Ġpadding Right ĊĠĠĠĠĠĠĠ Ġdesired Height Ġ+= Ġpadding Top Ġ+ Ġpadding Bottom ĊĊĠĠĠĠĠĠĠ Ġ// Ġadjust Ġdesired Ġwidth ĊĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . width Ġ== ĠLayout Params . MATCH _ PARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width Ġ= Ġif Ġ( desired Width Ġ> Ġmeasured Width ) Ġmeasured Width Ġelse Ġdesired Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġadjust Ġdesired Ġheight ĊĠĠĠĠĠĠĠ Ġif Ġ( height Mode Ġ== ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height Ġ= Ġmeasured Height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . height Ġ== ĠLayout Params . MATCH _ PARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height Ġ= Ġmeasured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height Ġ= Ġif Ġ( desired Height Ġ> Ġmeasured Height ) Ġmeasured Height Ġelse Ġdesired Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( desired Width , Ġdesired Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Drag Helper !!. continue Set t ling ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen Ġthe Ġpanel Ġto Ġshow Ġthe Ġsecondary Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Ġtrue Ġto Ġanimate Ġthe Ġopen Ġmotion . Ġ[ Swipe Listener ] Ġwon 't Ġbe ĊĠĠĠĠ Ġ* Ġcalled Ġif Ġis Ġanimation Ġis Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen ( animation : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Open Before Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Abort ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠSTATE _ OPEN ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper ?. smooth Slide View To ( m Main View !! , Ġm Rect Main Open . left , Ġm Rect Main Open . top ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag State ChangeListener ?. on Drag StateChanged ( m State ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠSTATE _ OPEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper ?. abort () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Main View ?. layout ( m Rect Main Open . left , Ġm Rect Main Open . top , Ġm Rect Main Open . right , Ġm Rect Main Open . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View ?. layout ( m Rect Sec Open . left , Ġm Rect Sec Open . top , Ġm Rect Sec Open . right , Ġm Rect Sec Open . bottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this @ Swipe Re veal Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġthe Ġpanel Ġto Ġhide Ġthe Ġsecondary Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Ġtrue Ġto Ġanimate Ġthe Ġclose Ġmotion . Ġ[ Swipe Listener ] Ġwon 't Ġbe ĊĠĠĠĠ Ġ* Ġcalled Ġif Ġis Ġanimation Ġis Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose ( animation : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Open Before Init Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Abort ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠSTATE _ CLO SING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper ?. smooth Slide View To ( m Main View !! , Ġm Rect Main Close . left , Ġm Rect Main Close . top ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag State ChangeListener ?. on Drag StateChanged ( m State ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= ĠSTATE _ CLOSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Helper ?. abort () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Main View ?. layout ( m Rect Main Close . left , Ġm Rect Main Close . top , Ġm Rect Main Close . right , Ġm Rect Main Close . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View ?. layout ( m Rect Sec Close . left , Ġm Rect Sec Close . top , Ġm Rect Sec Close . right , Ġm Rect Sec Close . bottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Compat . post Invalidate On Animation ( this @ Swipe Re veal Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Swipe Listener ( listener : ĠSw ipe Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Swipe Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlock Ġif Ġset Ġto Ġtrue , Ġthe Ġuser Ġcannot Ġdrag / swipe Ġthe Ġlayout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Lock Drag ( lock : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Drag Locked Ġ= Ġlock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠOnly Ġused Ġfor Ġ{@ link ĠView Binder Helper } Ġ*/ ĊĠĠĠ Ġfun Ġset Drag State ChangeListener ( listener : ĠDrag State ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Drag State ChangeListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAbort Ġcurrent Ġmotion Ġin Ġprogress . ĠOnly Ġused Ġfor Ġ[ View Binder Helper ] Ġ Ġ*/ ĊĠĠĠ Ġfun Ġabort () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Abort ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Drag Helper ?. abort () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn ĠRecyclerView / ListView , Ġon Layout Ġshould Ġbe Ġcalled Ġ 2 Ġtimes Ġto Ġdisplay Ġchildren Ġviews Ġcorrectly . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġcheck Ġif Ġit 've Ġalready Ġcalled Ġon Layout Ġtwo Ġtimes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġyou Ġshould Ġcall Ġ[. request Layout ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshould Request Layout (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm On Layout Count Ġ< Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Rects () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġclose Ġposition Ġof Ġmain Ġview ĊĠĠĠĠĠĠĠ Ġm Rect Main Close . set ( m Main View !!. left , Ġm Main View !!. top , Ġm Main View !!. right , Ġm Main View !!. bottom ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġclose Ġposition Ġof Ġsecondary Ġview ĊĠĠĠĠĠĠĠ Ġm Rect Sec Close . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View !!. left , Ġm Secondary View !!. top , Ġm Secondary View !!. right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary View !!. bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġopen Ġposition Ġof Ġthe Ġmain Ġview ĊĠĠĠĠĠĠĠ Ġm Rect Main Open . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Open Left , Ġmain Open Top , Ġmain Open Left Ġ+ Ġm Main View !!. width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Open Top Ġ+ Ġm Main View !!. height ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġopen Ġposition Ġof Ġthe Ġsecondary Ġview ĊĠĠĠĠĠĠĠ Ġm Rect Sec Open . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsec Open Left , Ġsec Open Top , Ġsec Open Left Ġ+ Ġm Secondary View !!. width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsec Open Top Ġ+ Ġm Secondary View !!. height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcould Be come Click ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisIn Main View ( ev ) Ġ&& Ġ! should Init iate AD rag () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Main View ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĊĠĠĠĠĠĠĠ Ġval Ġwithin Vertical Ġ= Ġm Main View !!. top Ġ<= Ġy Ġ&& Ġy Ġ<= Ġm Main View !!. bottom ĊĠĠĠĠĠĠĠ Ġval Ġwithin Horizontal Ġ= Ġm Main View !!. left Ġ<= Ġx Ġ&& Ġx Ġ<= Ġm Main View !!. right ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwithin Vertical Ġ&& Ġwithin Horizontal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Init iate AD rag (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Dist To Init iate Drag Ġ= Ġm Drag Helper !!. touch S lop . toFloat () ĊĠĠĠĠĠĠĠ Ġreturn Ġm Drag Dist Ġ>= Ġmin Dist To Init iate Drag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaccum ulate Drag Dist ( ev : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġev . action ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drag Dist Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdrag H orizontally Ġ= Ġdrag Edge Ġ== ĠDR AG _ EDGE _ LEFT Ġ|| Ġdrag Edge Ġ== ĠDR AG _ EDGE _ RIGHT ĊĊĠĠĠĠĠĠĠ Ġval Ġdrag ged : ĠFloat ĊĠĠĠĠĠĠĠ Ġdrag ged Ġ= Ġif Ġ( drag H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( ev . x Ġ- Ġm Prev X ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( ev . y Ġ- Ġm Prev Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Drag Dist Ġ+= Ġdrag ged ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull Ġ&& Ġcontext Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Swipe Re veal Layout , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Edge Ġ= Ġa . getInteger ( R . style able . Swipe Re veal Layout _ drag Edge , ĠDR AG _ EDGE _ LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Fl ing Velocity Ġ= Ġa . getInteger ( R . style able . Swipe Re veal Layout _ fl ing Velocity , ĠDEFAULT _ MIN _ FL ING _ VE LOC ITY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Mode Ġ= Ġa . getInteger ( R . style able . Swipe Re veal Layout _ mode , ĠMODE _ NORMAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Min Dist Request Dis allow Parent Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Swipe Re veal Layout _ min Dist Request Dis allow Parent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp To Px ( DEFAULT _ MIN _ DIST _ REQUEST _ DIS ALLOW _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Drag Helper Ġ= ĠView Drag Helper . create ( this , Ġ 1 . 0 f , Ġm Drag Helper Callback ) ĊĠĠĠĠĠĠĠ Ġm Drag Helper ?. set Edge Tracking Enabled ( View Drag Helper . EDGE _ ALL ) ĊĊĠĠĠĠĠĠĠ Ġm Gesture Detector Ġ= ĠGest ure Detector Compat ( context , Ġm Gesture Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpx To Dp ( px : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġreturn Ġ( px Ġ/ Ġ( metrics . density D pi . toFloat () Ġ/ ĠDisplay Metrics . D ENS ITY _ DEFAULT )). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp To Px ( dp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġreturn Ġ( dp Ġ* Ġ( metrics . density D pi . toFloat () Ġ/ ĠDisplay Metrics . D ENS ITY _ DEFAULT )). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThese Ġstates Ġare Ġused Ġonly Ġfor ĠView Bind Helper ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ CLOSE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ CLO SING Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ OPEN Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ OPEN ING Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ DR AG GING Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MIN _ FL ING _ VE LOC ITY Ġ= Ġ 3 0 0 Ġ// Ġdp Ġper Ġsecond ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MIN _ DIST _ REQUEST _ DIS ALLOW _ PARENT Ġ= Ġ 1 Ġ// Ġdp ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDR AG _ EDGE _ LEFT Ġ= Ġ 0 x 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDR AG _ EDGE _ RIGHT Ġ= Ġ 0 x 1 Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDR AG _ EDGE _ TOP Ġ= Ġ 0 x 1 Ġshl Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDR AG _ EDGE _ BOTTOM Ġ= Ġ 0 x 1 Ġshl Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsecondary Ġview Ġwill Ġbe Ġunder Ġthe Ġmain Ġview . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMODE _ NORMAL Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsecondary Ġview Ġwill Ġstick Ġthe Ġedge Ġof Ġthe Ġmain Ġview . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMODE _ SAME _ LEVEL Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetState String ( state : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ CLOSE Ġ-> Ġ" state _ close " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ CLO SING Ġ-> Ġ" state _ closing " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ OPEN Ġ-> Ġ" state _ open " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ OPEN ING Ġ-> Ġ" state _ opening " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ DR AG GING Ġ-> Ġ" state _ drag ging " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" undefined " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ