package Ġcom . bu . self study . ui . book Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Popup Window Ċ import Ġandroidx . annotation . Menu Res Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder Ċ import Ġandroidx . recyclerview . widget . RecyclerView . Adapter Ċ import Ġandroidx . transition . Transition Manager Ċ import Ġbol ts . Task Ċ import Ġcom . bu . self study . Nav Graph Directions Ċ import Ġcom . bu . self study . R Ċ import Ġcom . bu . self study . data . model . Book Ċ import Ġcom . bu . self study . data . model . Word Ċ import Ġcom . bu . self study . databinding . Book ListItem Binding Ċ import Ġcom . bu . self study . databinding . Recycler view Header Binding Ċ import Ġcom . bu . self study . tool . log Ċ import Ġcom . bu . self study . tool . put Bundle Ċ import Ġcom . bu . self study . tool . test Task Time Ċ import Ġcom . bu . self study . ui . archive . Archive Fragment Directions Ċ import Ġcom . bu . self study . ui . word . ListAdapter Ċ import Ġcom . bu . self study . ui . word . Word Fragment Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġkotlinx . coroutines . delay Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList ĊĊ Ċ class ĠBook Adapter ( val Ġfragment : ĠBook Fragment ): ĠAdapter < ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġasync List Differ Ġ= Ġobject : ĠAsync List Differ < Book >( this , ĠBook Diff Callback ){} ĊĊĠĠĠ Ġval ĠITEM _ VIEW _ HOLDER : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġval ĠHEADER _ VIEW _ HOLDER : ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġinner Ġclass ĠItem ViewHolder ( val Ġitem Binding : ĠBook ListItem Binding ): ĠViewHolder ( item Binding . root ) ĊĠĠĠ Ġinner Ġclass ĠHeader ViewHolder ( val Ġheader Binding : ĠRe cycler view Header Binding ) Ġ: ĠViewHolder ( header Binding . root ) ĊĊĠĠĠ Ġval Ġarray List Ġ= ĠArrayList < List < Book >>() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( view Type Ġ== ĠITEM _ VIEW _ HOLDER ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠBook ListItem Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠItem ViewHolder ( binding ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . find Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Graph Directions . action Global Word Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġasync List Differ . current List [ holder . adapter Position ]. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . book Icon . setOnClickListener Ġ{ Ġv : ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . set Ch osen Book ( async List Differ . current List [ holder . adapter Position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Popup Window ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . more Icon . setOnClickListener Ġ{ Ġv : ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync List Differ . current List [ holder . adapter Position ]. let Ġ{ Ġbook -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . set Ch osen Book ( book ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu ( v , ĠR . menu . book _ action _ mode , Ġbook ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠRe cycler view Header Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHeader ViewHolder ( binding ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Menu ( anchor View : ĠView , Ġ@ Menu Res Ġmenu Res : ĠInt , Ġbook : ĠBook ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= ĠPopup Menu ( fragment . require Context (), Ġanchor View ) ĊĊĠĠĠĠĠĠĠ Ġpopup . menu Inflater . inflate ( menu Res , Ġpopup . menu ) ĊĊĠĠĠĠĠĠĠ Ġ/** show ĠIcon */ ĊĠĠĠĠĠĠĠ Ġpopup . menu . java Class . getDeclared Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Optional Icons Visible ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class . java Primitive Type ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ Ġmethod -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( popup . menu , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġpopup . setOn MenuItem ClickListener Ġ{ Ġmenu Item : ĠMenuItem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( menuItem . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ list Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ( fragment ). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArchive Fragment Directions . action Global Word Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠWord Fragment . TYPE _ LIST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ edit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ( fragment ). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Fragment Directions . action Book Fragment To Edit Book Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook . book Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook . explanation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ archive Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . archive Book ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ( fragment ). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Fragment Directions . action Global Dialog Delete Common ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĪ ª éĻ¤ é¡Į åº « ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĪ ª éĻ¤ ãĢĮ ${ book . book Name } ãĢį ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpopup . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Popup Window ( v : ĠView ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlinear Layout Ġ= ĠLinearLayout ( fragment . require Context (), Ġnull , ĠR . style . Theme _ Self Study ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Params Ġ= Ġ ĠViewGroup . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . orientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Padding ( 8 , 0 , 8 , 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpopup Window Ġ= ĠPopup Window ( linear Layout ) ĊĊĊĠĠĠĠĠĠĠ Ġfragment . require Context (). resources . getInt Array ( R . array . book _ color _ list ). forEach Ġ{ Ġcolor Int -> ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . color _ picker _ Icon Only ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let Ġ{ Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . icon Ġ= Ġfragment . resources . get Drawable ( R . drawable . ic _ baseline _ bookmark _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . icon Tint Ġ= ĠColor State List . valueOf ( color Int ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . background Tint List Ġ= ĠColor State List . valueOf ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . icon Padding Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . update Book Color ( button . icon Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout . addView ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpopup Window . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Style Ġ= ĠR . style . color _ picker _ animation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue // å°ĩ çĦ ¦ é» ŀ æĶ¾åľ¨ popup Window , Ġ å½ Ī åĩº æĻĤ åı¯ éģ¿åħį åħ¶ä»ĸ åħĥ ä»¶ çļĦ é» ŀ æĵ Ĭ äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Outside Touchable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Drawable ( Color Drawable ( Color . WHITE )) // åĲĮ æĻĤ è¨Ń ç½® èĥĮæĻ¯ åĴĮ é«ĺåº¦ æīį æľī éĻ ° å½± æķĪæŀľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow As DropDown ( v ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġpopup Window . content View . root View ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġpopup Window . content View . context ĊĠĠĠĠĠĠĠ Ġval Ġwindow Manager Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĊĠĠĠĠĠĠĠ Ġ( container . layout Params Ġas ĠWindow Manager . LayoutParams ). let Ġ{ Ġlayout Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . flags Ġ= Ġlayout Params . flags Ġor ĠWindow Manager . LayoutParams . FLAG _ DIM _ BE H IND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . dim Amount Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . update View Layout ( container , Ġlayout Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( holder ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem ViewHolder -> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item Binding . book Ġ= Ġasync List Differ . current List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHeader ViewHolder ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . header Binding . first Row . text Ġ= Ġ" æĪĳçļĦ é¡Į åº « " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt , Ġpayload s : ĠMutable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isNotEmpty () Ġ&& Ġpayload s [ 0 ] Ġis ĠBundle ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġpayload s [ 0 ] Ġas ĠBundle ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠItem ViewHolder ). item Binding . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Size TextView . text Ġ= Ġbundle . getInt (" size "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Icon . icon Tint Ġ= ĠColor State List . valueOf ( bundle . getInt (" color Int ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æ² Ĵ æķ¸ æĵ ļ æĻĤ æľĥ é¡ ¯ ç¤º Header View ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġasync List Differ . current List . size ĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġif ( position Ġ== Ġ 0 ) ĠHEADER _ VIEW _ HOLDER Ġelse ĠITEM _ VIEW _ HOLDER ĊĊĠĠĠ Ġoverride Ġfun Ġset Has Stable Ids ( has Stable Ids : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġasync List Differ . current List [ position ]. id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠBook Diff Callback Ġ: ĠDiff Util . Item Callback < Book > (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠBook , Ġnew Item : ĠBook ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠBook , Ġnew Item : ĠBook ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . color Int Ġ== Ġnew Item . color Int Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . size Ġ== Ġnew Item . size Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . book Name Ġ== Ġnew Item . book Name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . explanation Ġ== Ġnew Item . explanation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Change Payload ( old Item : ĠBook , Ġnew Item : ĠBook ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( old Item . size Ġ!= Ġnew Item . size Ġ|| Ġold Item . color Int Ġ!= Ġnew Item . color Int ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġput Bundle (" size ", Ġnew Item . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Bundle (" color Int ", Ġnew Item . color Int ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit List ( books : ĠList < Book > ){ ĊĠĠĠĠĠĠĠ Ġasync List Differ . submit List ( listOf ( Book ()). plus ( books )) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ