package Ġcom . mapbox . search . ui . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ Ċ internal Ġclass ĠSearch Bottom Sheet Behavior < V Ġ: ĠView > Ġ: ĠBottom Sheet Behavior < V > Ġ{ ĊĊĠĠĠ Ġvar Ġdragging Allowed : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent StateChanged From User Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġon StateChanged Listeners Ġ= ĠCopy On Write ArrayList < On StateChanged Listener >() ĊĊĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Bottom Sheet Callback ( object Ġ: ĠBottom Sheet Behavior Callback Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , Ġ@ Bottom Sheet Behavior . State ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent StateChanged From User Ġ= Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ DR AG GING Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ HIDDEN , ĠSTATE _ COLL AP SED , ĠSTATE _ HALF _ EXP AN DED , ĠSTATE _ EXP AN DED Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ SET TL ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent StateChanged From User ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshouldn 't Ġbe Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent StateChanged From User ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Listeners ( newState , Ġcurrent StateChanged From User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ĊĠĠĠĠĠĠĠ Ġparent : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠV , ĊĠĠĠĠĠĠĠ Ġevent : ĠMotion Event ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdragging Allowed Ġ&& Ġsuper . on Intercept Touch Event ( parent , Ġchild , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( parent : ĠCoord inator Layout , Ġchild : ĠV , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdragging Allowed Ġ&& Ġsuper . on Touch Event ( parent , Ġchild , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠV , ĊĠĠĠĠĠĠĠ Ġdirect Target Child : ĠView , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġaxes : ĠInt , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdragging Allowed Ġ&& Ġsuper . onStart Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirect Target Child , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Pre Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠV , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġdx : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy : ĠInt , ĊĠĠĠĠĠĠĠ Ġconsumed : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drag ging Allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Nested Pre Scroll ( coordinator Layout , Ġchild , Ġtarget , Ġdx , Ġdy , Ġconsumed , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠV , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drag ging Allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Stop Nested Scroll ( coordinator Layout , Ġchild , Ġtarget , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Pre Fl ing ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠV , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġvelocity X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġvelocity Y : ĠFloat ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( drag ging Allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Nested Pre Fl ing ( coordinator Layout , Ġchild , Ġtarget , Ġvelocity X , Ġvelocity Y ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Listeners (@ Bottom Sheet Behavior . State Ġstate : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon StateChanged Listeners . forEach Ġ{ Ġit . on StateChanged ( state , Ġfrom User ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd On StateChanged Listener ( listener : ĠOn StateChanged Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon StateChanged Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove On StateChanged Listener ( listener : ĠOn StateChanged Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon StateChanged Listeners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinterface ĠOn StateChanged Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon StateChanged (@ Bottom Sheet Behavior . State ĠnewState : ĠInt , Ġfrom User : ĠBoolean ) ĊĠĠĠ Ġ} Ċ } Ċ