package Ġcom . ak dog an . simp let imer . ui . main Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ak dog an . simp let imer . data . domain . M ListItem Ċ import Ġcom . ak dog an . simp let imer . data . domain . Timer Object Ċ import Ġcom . ak dog an . simp let imer . databinding . Add Button Binding Ċ import Ġcom . ak dog an . simp let imer . databinding . Timer Item Binding Ċ Ċ class ĠTimer ListAdapter ( ĊĠĠĠ Ġprivate Ġval Ġadd Button Function : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġremove Item Function : Ġ( Int ) Ġ-> ĠUnit Ċ Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar ĠdataSet : ĠList < M ListItem > Ġ= Ġempty List () ĊĠĠĠ Ġset ( value ){ ĊĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTimer ListItem ( val Ġbinding : ĠTimer Item Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( item : ĠTimer Object , Ġdelete Function : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Timer Type ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . binding . button Increment Timer . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . increment Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update Label ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . binding . button De crement Timer . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . decrement Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update Label ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . binding . delete Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Function . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . binding . toggle Timer Type . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . toggle Timer Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Timer Type ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Timer Type ( item : ĠTimer Object ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . timer Type Automatic ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . timer Label . text Ġ= Ġitem . label ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toggle Timer Type . text Ġ= Ġ" Count down " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button De crement Timer . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Increment Timer . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . timer Label . text Ġ= Ġ" âĪ ŀ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toggle Timer Type . text Ġ= Ġ" Manual " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button De crement Timer . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Increment Timer . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Label ( item : ĠTimer Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . timer Label . text Ġ= Ġitem . label ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTimer List Add Button ( val Ġbinding : ĠAdd Button Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( click Function : Ġ() Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Add Timer . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Function . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer ListItem Ġ-> Ġholder . on Bind ( data Set [ position ] Ġas ĠTimer Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Item Function . invoke ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimer List Add Button Ġ-> Ġholder . on Bind ( add Button Function ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Something Ġwent Ġsever ely Ġwrong Ġd ude !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠTimer ListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Item Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTimer List Add Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Button Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġif Ġ( position Ġ== ĠdataSet . last Index ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= ĠdataSet . size Ċ Ċ }