package Ġcom . reactive . tr ach . be auty photo app . widgets . easy recycle view Ċ Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ Ċ class ĠWrap Adapter ( ĊĠĠĠĠĠĠĠ Ġval Ġheader Views : ĠSparse Array < View >, ĊĠĠĠĠĠĠĠ Ġval Ġfoot Views : ĠSparse Array < View >, ĊĠĠĠĠĠĠĠ Ġval Ġadapter : Ġandroidx . recyclerview . widget . RecyclerView . Adapter < android x . recyclerview . widget . RecyclerView . ViewHolder > Ċ ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . Adapter < android x . recyclerview . widget . RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTYPE _ REFRESH _ HEADER Ġ= Ġ- 5 ĊĠĠĠ Ġprivate Ġval ĠTYPE _ HEADER Ġ= Ġ- 4 ĊĠĠĠ Ġprivate Ġval ĠTYPE _ NORMAL Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠTYPE _ FO OTER Ġ= Ġ- 3 ĊĊĠĠĠ Ġprivate Ġvar Ġheader Position Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To RecyclerView ( re cyclerView : Ġandroidx . recyclerview . widget . RecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġre cyclerView . layout Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( manager Ġis Ġandroidx . recyclerview . widget . Grid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Manager Ġ= Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Manager . span Size Lookup Ġ= Ġobject Ġ: Ġandroidx . recyclerview . widget . Grid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Header ( position ) Ġ|| Ġis Footer ( position )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( holder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Attached To Window ( holder ) ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġholder . item View . layout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( lp Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġlp Ġis Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( is Header ( holder . layout Position ) Ġ|| Ġis Footer ( holder . layout Position ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Full Span Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Header ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition Ġ>= Ġ 0 Ġ&& Ġposition Ġ< Ġheader Views . size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Footer ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition Ġ< Ġitem Count Ġ&& Ġposition Ġ>= Ġitem Count Ġ- Ġfoot Views . size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Refresh Header ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Headers Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġheader Views . size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Foot ers Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfoot Views . size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠTYPE _ REFRESH _ HEADER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSimple ViewHolder ( header Views . get ( 0 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view Type Ġ== ĠTYPE _ HEADER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSimple ViewHolder ( header Views . get ( header Position ++ )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view Type Ġ== ĠTYPE _ FO OTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSimple ViewHolder ( foot Views . get ( 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġadapter . onCreate ViewHolder ( parent , Ġview Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Header ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġadj Position Ġ= Ġposition Ġ- Ġget Headers Count () ĊĠĠĠĠĠĠĠ Ġval Ġadapter Count : ĠInt Ġ= Ġadapter . item Count ĊĠĠĠĠĠĠĠ Ġif Ġ( adj Position Ġ< Ġadapter Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . on Bind ViewHolder ( holder , Ġadj Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Headers Count () Ġ+ Ġget Foot ers Count () Ġ+ Ġadapter . item Count ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Headers Count () Ġ+ Ġget Foot ers Count () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Refresh Header ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTYPE _ REFRESH _ HEADER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Header ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTYPE _ HEADER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Footer ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTYPE _ FO OTER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġadj Position Ġ= Ġposition Ġ- Ġget Headers Count () ĊĠĠĠĠĠĠĠ Ġval Ġadapter Count : ĠInt ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Count Ġ= Ġadapter . item Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adj Position Ġ< Ġadapter Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadapter . getItem ViewType ( adj Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTYPE _ NORMAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ>= Ġget Headers Count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadj Position Ġ= Ġposition Ġ- Ġget Headers Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Count Ġ= Ġadapter . item Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adj Position Ġ< Ġadapter Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadapter . getItem Id ( adj Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunregister Adapter Data Observer ( observer : Ġandroidx . recyclerview . widget . RecyclerView . Adapter Data Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . unregister Adapter Data Observer ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Adapter Data Observer ( observer : Ġandroidx . recyclerview . widget . RecyclerView . Adapter Data Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . register Adapter Data Observer ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSimple ViewHolder ( item View : ĠView ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ( item View ) Ċ Ċ }