package Ġdev . luc as v illa ver de . tod olist Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . arch . core . util . Function Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . tod olist . R Ċ import Ġdev . luc as v illa ver de . tod olist . adapter . Todo Adapter Ċ import Ġcom . example . tod olist . models .* Ċ import Ġdev . luc as v illa ver de . tod olist . models .* Ċ import Ġdev . luc as v illa ver de . tod olist . store . Renderer Ċ import Ġdev . luc as v illa ver de . tod olist . store . Todo Store Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . jetbrains . ank o . selector ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠRenderer < Todo Model > Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstore : ĠTodo Store ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( model : ĠLive Data < Todo Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . observe ( this , ĠObserver Ġ{ ĠnewState Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= ĠTodo Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ?. todos Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġstore Ġ= ĠViewModel Provider ( this ). get ( Todo Store :: class . java ) ĊĠĠĠĠĠĠĠ Ġstore . subscribe ( this , ĠmapStateToProps ) ĊĊĠĠĠĠĠĠĠ Ġadd Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . dispatch ( Add Todo ( et Todo . text . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Todo . text Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġopen Dialog () Ġ} ĊĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTodo Adapter ( this , ĠlistOf ()) ĊĠĠĠĠĠĠĠ ĠlistView . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġ_, Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . dispatch ( Toggle Todo ( id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠlistView . setOn Item Long ClickListener Ġ{ Ġ_, Ġ_, Ġ_, Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . dispatch ( Remove Todo ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Dialog (){ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġresources . getString Array ( R . array . filter _ options ). asList () ĊĠĠĠĠĠĠĠ Ġselector ( getString ( R . string . filter _ title ), Ġoptions ) Ġ{ Ġ_, Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Ġ= Ġwhen ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠVisibility . Active () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠVisibility . Completed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠVisibility . All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . dispatch ( Set Visibility ( visible )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠmapStateToProps Ġ= ĠFunction < Todo Model , ĠTodo Model > Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġkeep : Ġ( Todo ) Ġ-> ĠBoolean Ġ= Ġwhen ( it . visibility ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVisibility . All Ġ-> Ġ{ Ġ_ Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVisibility . Active Ġ-> Ġ{ Ġt : ĠTodo Ġ-> Ġ! t . status Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVisibility . Completed Ġ-> Ġ{ Ġt : ĠTodo Ġ-> Ġt . status Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn @ Function Ġit . copy ( todos Ġ= Ġit . todos . filter { Ġkeep ( it ) Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ