package Ġcom . simple mobile tools . calendar . adapters Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . support . v 7 . view . Action Mode Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view .* Ċ import Ġcom . b ign er dr anch . android . mult iselect or . Modal Multi Selector Callback Ċ import Ġcom . b ign er dr anch . android . mult iselect or . Multi Selector Ċ import Ġcom . b ign er dr anch . android . mult iselect or . Sw apping Holder Ċ import Ġcom . simple mobile tools . calendar . R Ċ import Ġcom . simple mobile tools . calendar . activities . Simple Activity Ċ import Ġcom . simple mobile tools . calendar . extensions . config Ċ import Ġcom . simple mobile tools . calendar . helpers . Formatter Ċ import Ġcom . simple mobile tools . calendar . models . List Event Ċ import Ġcom . simple mobile tools . calendar . models . ListItem Ċ import Ġcom . simple mobile tools . calendar . models . List Section Ċ import Ġcom . simple mobile tools . commons . dialogs . Confirmation Dialog Ċ import Ġcom . simple mobile tools . commons . extensions . be In visible Ċ import Ġcom . simple mobile tools . commons . extensions . be In visible If Ċ import Ġkotlinx . android . synt hetic . main . event _ list _ item . view .* Ċ import Ġjava . util .* Ċ Ċ class ĠEvent ListAdapter ( val Ġactivity : ĠSimple Activity , Ġval Ġm Items : ĠList < ListItem >, Ġval Ġlistener : ĠEvent ListAdapter . Item Operations Listener ?, Ġval Ġitem Click : Ġ( Int ) Ġ-> ĠUnit ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġval Ġmulti Selector Ġ= ĠMulti Selector () ĊĠĠĠ Ġval Ġviews Ġ= ĠArrayList < View >() ĊĊĠĠĠ Ġval ĠITEM _ EVENT Ġ= Ġ 0 ĊĠĠĠ Ġval ĠITEM _ HEADER Ġ= Ġ 1 ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġact Mode : ĠAction Mode ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmarked Items Ġ= ĠHashSet < Int >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġtop Divider : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Now Ġ= Ġ( System . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġprimary Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar ĠtextColor Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtoday Date Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġall Day String Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfun Ġtoggle Item Selection ( item View : ĠView , Ġselect : ĠBoolean , Ġpos : ĠInt Ġ= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . event _ item _ frame . isSelected Ġ= Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( select ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarked Items . add ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarked Items . remove ( pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġactivity . resources ĊĠĠĠĠĠĠĠ Ġall Day String Ġ= Ġres . getString ( R . string . all _ day ) ĊĠĠĠĠĠĠĠ Ġtop Divider Ġ= Ġres . get Drawable ( R . drawable . divider _ width ) ĊĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġactivity . config . textColor ĊĠĠĠĠĠĠĠ Ġprimary Color Ġ= Ġactivity . config . primary Color ĊĠĠĠĠĠĠĠ Ġval Ġm Today Code Ġ= ĠFormatter . get Day Code From TS ( m Now ) ĊĠĠĠĠĠĠĠ Ġtoday Date Ġ= ĠFormatter . get Day Title ( activity , Ġm Today Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmulti Selector Mode Ġ= Ġobject Ġ: ĠModal Multi Selector Callback ( multi Selector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode , Ġitem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . cab _ delete Ġ-> Ġask Confirm Delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( action Mode : ĠAction Mode ?, Ġmenu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate Action Mode ( action Mode , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode Ġ= Ġaction Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . menu Inflater . inflate ( R . menu . cab _ event _ list , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( action Mode : ĠAction Mode ?, Ġmenu : ĠMenu ) Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( action Mode : ĠAction Mode ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Destroy Action Mode ( action Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . forEach Ġ{ Ġtoggle Item Selection ( it , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarked Items . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġask Confirm Delete () Ġ{ ĊĠĠĠĠĠĠĠ ĠConfirm ation Dialog ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare For Deleting () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare For Deleting () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselections Ġ= Ġmulti Selector . selected Positions ĊĠĠĠĠĠĠĠ Ġval Ġids Ġ= ĠArrayList < Int >( selections . size ) ĊĠĠĠĠĠĠĠ Ġselections . forEach Ġ{ Ġids . add (( m Items [ it ] Ġas ĠList Event ). id ) Ġ} ĊĠĠĠĠĠĠĠ Ġlistener ?. prepare For Deleting ( ids ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= Ġif Ġ( m Items [ position ] Ġis ĠList Event ) ĠITEM _ EVENT Ġelse ĠITEM _ HEADER ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Id Ġ= Ġif Ġ( view Type Ġ== ĠITEM _ EVENT ) ĠR . layout . event _ list _ item Ġelse ĠR . layout . event _ list _ section ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent ?. context ). inflate ( layout Id , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠITEM _ EVENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ListAdapter . ViewHolder ( activity , Ġview , Ġitem Click ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ListAdapter . Section Holder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder . item ViewType Ġ== ĠITEM _ EVENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add (( holder Ġas ĠViewHolder ). bind View ( multi Selector Mode , Ġmulti Selector , Ġm Items [ position ], Ġposition )) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠSection Holder ). bind View ( m Items [ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġm Items . size ĊĊĠĠĠ Ġclass ĠViewHolder ( val Ġactivity : ĠSimple Activity , Ġview : ĠView , Ġval Ġitem Click : Ġ( Int ) Ġ-> Ġ( Unit )) Ġ: ĠSw apping Holder ( view , ĠMulti Selector ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind View ( multi Selector Callback : ĠModal Multi Selector Callback , Ġmulti Selector : ĠMulti Selector , Ġlist Item : ĠListItem , Ġpos : ĠInt ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlist Item Ġas ĠList Event ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ title . text Ġ= Ġitem . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ description . text Ġ= Ġitem . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ start . text Ġ= Ġif Ġ( item . is All Day ) Ġall Day String Ġelse ĠFormatter . getTime From TS ( context , Ġitem . start TS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ end . be In visible If ( item . start TS Ġ== Ġitem . end TS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item Selection ( this , Ġmarked Items . contains ( pos ), Ġpos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . start TS Ġ!= Ġitem . end TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Code Ġ= ĠFormatter . get Day Code From TS ( item . start TS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Code Ġ= ĠFormatter . get Day Code From TS ( item . end TS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ end . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠFormatter . getTime From TS ( context , Ġitem . end TS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Code Ġ!= Ġend Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . is All Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠFormatter . getDate From Code ( context , Ġend Code , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ(${ Formatter . getDate From Code ( context , Ġend Code , Ġtrue )}) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . is All Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe In visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr TextColor Ġ= Ġif Ġ( item . start TS Ġ<= Ġm Now ) Ġprimary Color Ġelse ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ start . setTextColor ( curr TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ end . setTextColor ( curr TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ title . setTextColor ( curr TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent _ item _ description . setTextColor ( curr TextColor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġview Clicked ( multi Selector , Ġlist Item , Ġpos ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! multi Selector . is Selectable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . start Support Action Mode ( multi Selector Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Selector . setSelected ( this @ ViewHolder , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. title Ġ= Ġmulti Selector . selected Positions . size . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item Selection ( item View , Ġtrue , Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠitemView ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġview Clicked ( multi Selector : ĠMulti Selector , Ġlist Item : ĠListItem , Ġpos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multi Selector . is Selectable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Selected Ġ= Ġmulti Selector . selected Positions . contains ( layout Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Selector . setSelected ( this , Ġ! isSelected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item Selection ( item View , Ġ! isSelected , Ġpos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Cnt Ġ= Ġmulti Selector . selected Positions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Cnt Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. title Ġ= Ġselected Cnt . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact Mode ?. invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Click (( list Item Ġas ĠList Event ). id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSection Holder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind View ( list Item : ĠListItem ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlist Item Ġas ĠList Section ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . event _ item _ title . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġitem . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Compound Draw ables With Intr insic Bounds ( null , Ġif Ġ( position Ġ== Ġ 0 ) Ġnull Ġelse Ġtop Divider , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( if Ġ( item . title Ġ== Ġtoday Date ) Ġprimary Color Ġelse ĠtextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠitemView ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem Operations Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġprepare For Deleting ( ids : ĠArrayList < Int >) ĊĠĠĠ Ġ} Ċ } Ċ