package Ġde . r ki . cor on aw arn app . contact di ary . ui . overview . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġde . r ki . cor on aw arn app . contact di ary . util . to Formatted Day Ċ import Ġde . r ki . cor on aw arn app . databinding . Include Contact Di ary Overview Item Binding Ċ Ċ class ĠContact Di ary Overview Adapter ( private Ġval Ġon Item Selection Listener : Ġ( ListItem ) Ġ-> ĠUnit ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Contact Di ary Overview Adapter . Overview Element Holder >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġelements : ĠMutable List < ListItem > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġset Items ( elements : ĠList < ListItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . elements . clear () ĊĠĠĠĠĠĠĠ Ġthis . elements Ġ+= Ġelements ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠOverview Element Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠOverview Element Holder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInclude Contact Di ary Overview Item Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġelements . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠOverview Element Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( elements [ position ], Ġon Item Selection Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOverview Element Holder ( private Ġval Ġview Data Binding : ĠInclude Contact Di ary Overview Item Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( view Data Binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnested Item Adapter Ġ= ĠContact Di ary Overview Nested Adapter () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . contact Di ary Overview Nested RecyclerView . adapter Ġ= Ġnested Item Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem : ĠListItem , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Element Selection Listener : Ġ( ListItem ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . contact Di ary Overview ElementName . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . date . to Formatted Day () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . contact Di ary Overview Element Body . setOnClickListener Ġ{ Ġon Element Selection Listener ( item ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . contact Di ary Overview Element Divider . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . contact Di ary Overview Element Divider . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnested Item Adapter . set Items ( item . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ