package Ġcom . mat b ade v . dab ir va . decoration Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . mat b ade v . dab ir va . D ab ir va Ċ import Ġcom . mat b ade v . dab ir va . Data Binding ViewHolder Ċ import Ġcom . mat b ade v . dab ir va . Item ViewModel Ċ Ċ class ĠVertical Sticky Header Decoration ( ĊĠĠĠ Ġheader Position Provider : ĠHeader Position Provider , Ċ ) Ġ: ĠSt icky Header Decoration ( header Position Provider ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Bound Header ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠRecyclerView , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , ĊĠĠĠĠĠĠĠ Ġd ab ir va : ĠD ab ir va , ĊĠĠĠĠĠĠĠ Ġheader ViewHolder : ĠData Binding ViewHolder , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Bound Header ViewHolder ( parent , Ġstate , Ġd ab ir va , Ġheader ViewHolder ) ĊĠĠĠĠĠĠĠ Ġlayout Header View ( parent , Ġheader ViewHolder . item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlayout Header View ( parent : ĠRecyclerView , Ġheader View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Spec Ġ= ĠView . Measure Spec . make Measure Spec ( parent . width , ĠView . Measure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Spec Ġ= ĠView . Measure Spec . make Measure Spec ( parent . height , ĠView . Measure Spec . UNSPECIFIED ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Width Spec Ġ= ĠViewGroup . getChild Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . padding Left Ġ+ Ġparent . padding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader View . layout Params . width , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġchild Height Spec Ġ= ĠViewGroup . getChild Measure Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . padding Top Ġ+ Ġparent . padding Bottom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader View . layout Params . height , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġheader View . measure ( child Width Spec , Ġchild Height Spec ) ĊĊĠĠĠĠĠĠĠ Ġheader View . layout ( 0 , Ġ 0 , Ġheader View . meas ured Width , Ġheader View . meas ured Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Header Over Items ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġparent : ĠRecyclerView , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , ĊĠĠĠĠĠĠĠ Ġd ab ir va : ĠD ab ir va , ĊĠĠĠĠĠĠĠ Ġheader ViewHolder : ĠData Binding ViewHolder , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Header Over Items ( canvas , Ġparent , Ġstate , Ġd ab ir va , Ġheader ViewHolder ) ĊĠĠĠĠĠĠĠ Ġval Ġheader View : ĠView Ġ= Ġheader ViewHolder . item View ĊĠĠĠĠĠĠĠ Ġval Ġchild In Contact : ĠView ? Ġ= Ġget Child In Contact ( parent , Ġheader View . bottom ) ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġif Ġ( child In Contact Ġ!= Ġnull Ġ&& Ġis Item Sticky ( parent , Ġd ab ir va . items , Ġchild In Contact )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( 0 F , Ġ( child In Contact . top Ġ- Ġheader View . height ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( 0 F , Ġ 0 F ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheader View . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Child In Contact ( parent : ĠRecyclerView , Ġcontact Point : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 0 Ġuntil Ġparent . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild : ĠView Ġ= Ġparent . getChild At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . bottom Ġ> Ġcontact Point Ġ&& Ġchild . top Ġ<= Ġcontact Point ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Item Sticky ( parent : ĠRecyclerView , Ġitems : ĠList < Item ViewModel >, ĠitemView : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Position : ĠInt Ġ= Ġparent . getChild Adapter Position ( item View ) ĊĠĠĠĠĠĠĠ Ġreturn Ġheader Position Provider . getHeader Position For Item ( adapter Position , Ġitems ) Ġ== Ġadapter Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠVertical Sticky Header Decoration ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġheader Position Provider Ġ== Ġother . header Position Provider ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġheader Position Provider . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Vertical Sticky Header Decoration ( header Position Provider =$ header Position Provider )" ĊĠĠĠ Ġ} Ċ Ċ } Ċ