package Ġaz ade v . android . architecture . feat . part 5 Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġaz ade v . android . architecture . core . arch . li ved ata . medi ator LiveData Ċ import Ġaz ade v . android . architecture . core . arch . li ved ata . mutable LiveData Ċ import Ġkotlin . concurrent . thread Ċ Ċ private Ġconst Ġval ĠCH UNK _ SIZE Ġ= Ġ 5 Ċ Ċ class ĠPart 5 ViewModel Ġ: ĠViewModel () Ġ{ Ċ ĉ private Ġvar Ġmultiplier Ġ= Ġ- 1 ĊĊ ĉ val Ġitems Ġ= Ġmutable LiveData ( generate Items ()) ĊĊ ĉ val Ġselected Count Ġ= Ġmedi ator LiveData ( items ) Ġ{ Ġitems . value !!. count Ġ{ Ġit . isSelected Ġ} Ġ} ĊĊ ĉ fun Ġhandle Add Click () Ġ{ Ċĉ ĉ items . value Ġ= Ġitems . value !! Ġ+ Ġgenerate Items () Ċ ĉ } ĊĊ ĉ fun Ġhandle Remove Click () Ġ{ Ċĉ ĉ items . value Ġ= Ġitems . value !!. filter Ġ{ Ġ! it . isSelected Ġ} Ċ ĉ } ĊĊ ĉ fun Ġhandle Select All Click () Ġ{ Ċĉ ĉ val Ġvalue Ġ= Ġitems . value !! Ċĉ ĉ val Ġselected All Ġ= Ġvalue . all Ġ{ Ġit . isSelected Ġ} ĊĊĉ ĉ items . value Ġ= Ġvalue . map Ġ{ Ġit . copy ( isSelected Ġ= Ġ! selected All ) Ġ} Ċ ĉ } ĊĊ ĉ fun Ġhandle Checkbox Click ( itemId : ĠInt ) Ġ{ Ċĉ ĉ items . value Ġ= Ġitems . value !!. map Ġ{ Ċĉĉ ĉ if Ġ( it . id Ġ== ĠitemId ) Ġit . copy ( isLoading Ġ= Ġtrue ) Ġelse Ġit Ċĉ ĉ } ĊĊĉ ĉ thread Ġ{ Ċĉĉ ĉ Thread . sleep ( 2 0 0 0 ) ĊĊĉĉ ĉ items . post Value ( items . value !!. map Ġ{ Ċĉĉĉ ĉ if Ġ( it . id Ġ== ĠitemId ) Ġit . copy ( isSelected Ġ= Ġ! it . isSelected , ĠisLoading Ġ= Ġfalse ) Ġelse Ġit Ċĉĉ ĉ }) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġfun Ġgenerate Items (): ĠList < Part 5 ListItem Data > Ġ{ Ċĉ ĉ multiplier ++ ĊĊĉ ĉ return Ġ( 1 .. CHUNK _ SIZE ). map Ġ{ Ċĉĉ ĉ val Ġid Ġ= ĠCH UNK _ SIZE Ġ* Ġmultiplier Ġ+ Ġit ĊĊĉĉ ĉ Part 5 ListItem Data ( Ċĉĉĉ ĉ id Ġ= Ġid , Ċĉĉĉ ĉ name Ġ= Ġ" Item Ġ$ id " Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ