package Ġcom . babylon . orbit . sample . presentation Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Dialog Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . babylon . orbit . sample . R Ċ import Ġcom . babylon . orbit . sample . domain . user . UserProfile Ċ import Ġcom . babylon . orbit . sample . presentation . ui . Logo Item Ċ import Ġcom . babylon . orbit . sample . presentation . ui . Space Item Decoration Ċ import Ġcom . babylon . orbit . sample . presentation . ui . ToDo Item Ċ import Ġcom . babylon . orbit . sample . presentation . ui . show Ċ import Ġcom . x wr ay . group ie . Group Adapter Ċ import Ġcom . x wr ay . group ie . Group ie ViewHolder Ċ import Ġcom . x wr ay . group ie . Section Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠTodo Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Todo ViewModel >() ĊĊĠĠĠ Ġprivate Ġvar Ġtodo Dialog : ĠAppCompat Dialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġuser Profile Dialog : ĠAppCompat Dialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġsection Ġ= ĠSection () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġsection . setHeader ( Logo Item ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġspace Ġ= Ġresources . get Dimension ( R . dim en . container _ padding ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdecoration Ġ= ĠSpace Item Decoration ( horizontal Spacing Ġ= Ġspace , Ġvertical Spacing Ġ= Ġspace ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( decoration ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Todo Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠGroup Adapter < Group ie ViewHolder >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( section ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġretry Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . send Action ( Todo Screen Action . Retry Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . connect (:: render ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender ( state : ĠTodo Screen State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress _ container . show ( state . screen State Ġ== ĠScreen State . Loading ) ĊĠĠĠĠĠĠĠ Ġerror _ container . show ( state . screen State Ġ== ĠScreen State . Error ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . show ( state . screen State Ġ== ĠScreen State . Ready ) ĊĠĠĠĠĠĠĠ Ġif Ġ( state . screen State Ġ== ĠScreen State . Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . todo List ?. map Ġ{ Ġtodo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo Do Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠviewModel . send Action ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtodo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection . update ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . todo Selected Id ?. let Ġ{ Ġshow Todo Dialog ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . user Profile ?. let Ġ{ Ġshow UserProfile Dialog ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Todo Dialog ( todo Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( todo Dialog Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtodo Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . todo _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . todo _ dialog _ msg , Ġtodo Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . send Action ( Todo Screen Action . Todo Selected Dis missed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtodo Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . show () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow UserProfile Dialog ( user Profile : ĠUser Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( user Profile Dialog Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . user _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . user _ dialog _ msg , Ġuser Profile . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . send Action ( Todo Screen Action . User Selected Dis missed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtodo Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . show () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ