package Ġcom . code deco . lib . ui . widget . menu . context . floating Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . code deco . lib . ui . R Ċ import Ġcom . code deco . lib . ui . databinding . Item Floating Context MenuItem Binding Ċ import Ġcom . code deco . lib . ui . widget . menu . context . Context MenuItem Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ class ĠFloating ContextMenu Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitems Ġ= ĠArrayList < Context MenuItem >() ĊĊĠĠĠ Ġvar Ġitem ClickListener : ĠItem ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġitem Long ClickListener : ĠItem Long ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġitem Touch Listener : ĠItem Touch Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset ( new Items : ĠList < Context MenuItem >) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( new Items ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( position : ĠInt ): ĠContext MenuItem ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . get OrNull ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMenuItem ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ floating _ context _ menu _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠMenuItem ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . get OrNull ( position )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . update ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠMenuItem ViewHolder ( val Ġbinding : ĠItem Floating Context MenuItem Binding ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdata : ĠWeak Reference < Context MenuItem >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. get ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ClickListener ?. on Item Click ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. get ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Long ClickListener ?. on Item Long Click ( this ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġview , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. get ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Touch Listener ?. on Item Touch ( this , Ġview , Ġevent ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( data : ĠContext MenuItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Ġ= ĠWeak Reference ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . icon . setImage Drawable ( data . icon Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text . text Ġ= Ġdata . string ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Enabled () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Disabled () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġon Item Enabled () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġon Item Disabled () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . alpha Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( item : ĠContext MenuItem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Long Click ( item : ĠContext MenuItem ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem Checked ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Check Changed ( item : ĠContext MenuItem , Ġchecked : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem Touch Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Touch ( item : ĠContext MenuItem , Ġview : ĠView , Ġevent : ĠMotion Event ): ĠBoolean ĊĠĠĠ Ġ} Ċ }