package Ġio . pl ast ique . core . lists Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠDiv ider Item Decoration Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdivider : ĠDrawable , ĊĠĠĠ Ġprivate Ġval Ġview Types : ĠInt Array ? Ċ ) Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrect Ġ= ĠRect () ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent . layout Manager Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġval Ġleft : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġright : ĠInt ĊĠĠĠĠĠĠĠ Ġif Ġ( parent . clip To Padding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġparent . padding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġparent . width Ġ- Ġparent . padding Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Rect ( left , Ġparent . padding Top , Ġright , Ġparent . height Ġ- Ġparent . padding Bottom ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġparent . width ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparent . children . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġparent . getChild ViewHolder ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Decorated ( holder , Ġparent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . get Decorated Bounds With Margins ( child , Ġrect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġrect . bottom Ġ+ Ġchild . translation Y . round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġbottom Ġ- Ġdivider . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . setBounds ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġparent . getChild ViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Decorated ( holder , Ġparent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( 0 , Ġ 0 , Ġ 0 , Ġdivider . intrinsic Height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Decorated ( holder : ĠRecyclerView . ViewHolder , Ġparent : ĠRecyclerView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġholder . adapter Position ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠRecyclerView . NO _ POSITION Ġ|| Ġposition Ġ+ Ġ 1 Ġ>= Ġparent . layout Manager !!. item Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġview Types Ġ== Ġnull Ġ|| Ġview Types . any Ġ{ Ġit Ġ== Ġholder . item ViewType Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdivider : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġview Types : ĠInt Array ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġdivider ( divider : ĠDrawable ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . divider Ġ= Ġdivider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdivider (@ Drawable Res Ġres Id : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ= Ġcontext . get Drawable ( res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġview Types ( var arg Ġview Types : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Types Ġ= Ġview Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠDiv ider Item Decoration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDiv ider Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ= Ġdivider Ġ?: ĠgetDefault Divider ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Types Ġ= Ġview Types ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetDefault Divider ( context : ĠContext ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( int ArrayOf ( android . R . attr . list Divider )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Divider Ġ= Ġa . get Drawable ( 0 ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefault Divider ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ