package Ġcom . v ital i imal one . short ter mpl anner . presentation . screens . task details . common Ċ Ċ import Ġandroid . text . InputType Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . v ital i imal one . short ter mpl anner . R Ċ import Ġcom . v ital i imal one . short ter mpl anner . domain . models . Sub task Ċ import Ġcom . v ital i imal one . short ter mpl anner . domain . models . Task Ċ import Ġcom . v ital i imal one . short ter mpl anner . presentation . utils . Res Ċ import Ġcom . v ital i imal one . short ter mpl anner . presentation . utils . extensions . clear Focus On Done Click Ċ import Ġcom . v ital i imal one . short ter mpl anner . presentation . utils . extensions . show Keyboard Ċ import Ġcom . v ital i imal one . short ter mpl anner . presentation . utils . extensions . show Stri ke Through Ċ import Ġcom . v ital i imal one . short ter mpl anner . presentation . utils . extensions . trimmed Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . task _ details _ add _ new _ sub tasks _ list _ item .* Ċ import Ġkotlinx . android . synt hetic . main . task _ details _ sub tasks _ list _ item .* Ċ Ċ class ĠSub tasks Adapter ( ĊĠĠĠ Ġprivate Ġval Ġtask : ĠTask , ĊĠĠĠ Ġprivate Ġval Ġupdate Task : Ġ() Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġsub task List Items Ġ= Ġtask . sub tasks . map Ġ{ ĠSub task ListItem ( it ) Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ= Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSub task ViewType . SUB TASK . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTask ViewHolder ( inflate View ( R . layout . task _ details _ sub tasks _ list _ item , Ġparent )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSub task ViewType . ADD NEW . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd New Task ViewHolder ( inflate View ( R . layout . task _ details _ add _ new _ sub tasks _ list _ item , Ġparent )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ= Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠTask ViewHolder Ġ-> Ġholder . bind ( sub task List Items [ position ], Ġposition ) ĊĠĠĠĠĠĠĠ Ġis ĠAdd New Task ViewHolder Ġ-> Ġholder . bind () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġsub task List Items . size Ġ+ Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsub task List Items . size Ġ-> ĠSub task ViewType . ADD NEW . ordinal ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSub task ViewType . SUB TASK . ordinal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinf late View (@ Layout Res Ġresource : ĠInt , Ġparent : ĠViewGroup ) Ġ= ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( resource , Ġparent , Ġfalse ) ĊĊĠĠĠ Ġprivate Ġfun Ġadd Sub task () Ġ{ ĊĠĠĠĠĠĠĠ Ġsub task List Items . forEach Ġ{ Ġit . is Focused Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsub task Ġ= ĠSub task () ĊĠĠĠĠĠĠĠ Ġtask . sub tasks . add ( sub task ) ĊĠĠĠĠĠĠĠ Ġsub task List Items . add ( Sub task ListItem ( sub task , Ġtrue )) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( sub task List Items . last Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sub task List Items . last Index Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( sub task List Items . last Index Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Task . invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Sub task ( sub task ListItem : ĠSub task ListItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeleted Index Ġ= Ġsub task List Items . indexOf ( sub task ListItem ) ĊĠĠĠĠĠĠĠ Ġsub task List Items . removeAll Ġ{ Ġit . sub task . id Ġ== Ġsub task ListItem . sub task . id Ġ} ĊĠĠĠĠĠĠĠ Ġtask . sub tasks . removeAll Ġ{ Ġit . id Ġ== Ġsub task ListItem . sub task . id Ġ} ĊĠĠĠĠĠĠĠ Ġsub task List Items . forEach Ġ{ Ġit . is Focused Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( deleted Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( deleted Index Ġ== Ġsub task List Items . last Index Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( sub task List Items . last Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Task . invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠTask ViewHolder ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( sub task ListItem : ĠSub task ListItem , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . set Raw InputType ( InputType . TYPE _ CLASS _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . setText ( sub task ListItem . sub task . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . hint Ġ= ĠRes . string ( R . string . add _ sub task _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . show Stri ke Through ( sub task ListItem . sub task . is Done ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub task ListItem . is Focused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . show Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . clear Focus On Done Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task ListItem . sub task . title Ġ= Ġit . trimmed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone CheckBox . isChecked Ġ= Ġsub task ListItem . sub task . is Done ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone CheckBox . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task ListItem . sub task . is Done Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . show Stri ke Through ( isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Line View . isVisible Ġ= Ġsub task List Items . last Index Ġ!= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ImageView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub task Title EditText . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Sub task ( sub task ListItem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠAdd New Task ViewHolder ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub task Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub task TextView . hint Ġ= ĠRes . string ( R . string . add _ sub task _ hint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠSub task ViewType Ġ{ ĊĠĠĠĠĠĠĠ ĠSUB TASK , ĠADD NEW ĊĠĠĠ Ġ} Ċ } Ċ