package Ġcom . github . d run lin . webapp box . fragment Ċ Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . databinding . ViewData Binding Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . view .* Ċ import Ġcom . github . d run lin . webapp box . BR Ċ import Ġcom . github . d run lin . webapp box . R Ċ import Ġcom . github . d run lin . webapp box . common . async Call Ċ import Ġcom . github . d run lin . webapp box . data . Unique Ċ import Ġcom . github . d run lin . webapp box . model . DataManager Ċ import Ġcom . github . d run lin . webapp box . widget . adapter . ListAdapter Ċ import Ġkotlinx . android . synt hetic . main . editable _ list _ content .* Ċ import Ġkotlinx . android . synt hetic . main . list _ content .* Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠList Fragment < T : ĠUnique , ĠM Ġ: ĠData Manager < T >> Ġ: ĊĠĠĠĠĠĠĠ ĠSecondary Fragment (), ĠAction Mode . Callback Ġ{ ĊĊĠĠĠ Ġabstract Ġprotected Ġval Ġmanager : ĠM ĊĊĠĠĠ Ġoverride Ġval Ġcontent View Res Id Ġ= ĠR . layout . editable _ list _ content ĊĠĠĠ Ġabstract Ġprotected Ġval Ġitem Res Id : ĠInt ĊĊĠĠĠ Ġprotected Ġval Ġadapter Ġby Ġlazy Ġ{ ĠAdapter (). apply Ġ{ Ġasync Call ({ Ġmanager . data Ġ}) Ġ{ Ġlist Ġ= Ġit Ġ} Ġ} Ġ} ĊĊĠĠĠ Ġprotected Ġvar Ġaction Model : ĠAction Mode ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġselected Set : ĠHashSet < Long >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġregister Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġprotected Ġfun Ġregister Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . on Insert . add ( this ) Ġ{ Ġadapter . notify Item Inserted ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmanager . on Remove . add ( this ) Ġ{ Ġadapter . notify DataSet Changed () Ġ} ĊĠĠĠĠĠĠĠ Ġmanager . on Update . add ( this ) Ġ{ Ġadapter . notify Item Changed ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġon Insert () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Insert () ĊĊĠĠĠ Ġopen Ġprotected Ġfun ĠViewHolder . on Item Created () Ġ= ĠUnit ĊĊĠĠĠ Ġabstract Ġprotected Ġfun ĠViewHolder . on Item Click () ĊĊĠĠĠ Ġabstract Ġprotected Ġfun ĠViewHolder . on Bind Item ( data : ĠT ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( mode : ĠAction Mode , Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Model Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġselected Set Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠ Ġmode . menu Inflater . inflate ( R . menu . list _ action _ mode , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( mode : ĠAction Mode ?, Ġmenu : ĠMenu ?): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode , Ġitem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġon Remove () ĊĠĠĠĠĠĠĠ Ġmode . finish () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . remove ( selected Set !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( mode : ĠAction Mode ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Model Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġselected Set Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġunregister Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġprotected Ġfun Ġunregister Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . on Insert . add ( this ) Ġ{ Ġadapter . notify Item Inserted ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmanager . on Remove . add ( this ) Ġ{ Ġadapter . notify DataSet Changed () Ġ} ĊĠĠĠĠĠĠĠ Ġmanager . on Update . add ( this ) Ġ{ Ġadapter . notify Item Changed ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġinner Ġclass ĠAdapter Ġ: ĠList Adapter < T , ĠViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġtype : ĠInt ) Ġ: ĠList Fragment < T , ĠM >. ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( Data Binding Util ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate < ViewData Binding >( activity . layout Inflater , Ġitem Res Id , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġinner Ġclass ĠViewHolder ( val Ġbinding : ĠView Data Binding ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Adapter . ViewHolder < T >( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Created () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Model ?. run Ġ{ ĠsetSelected (! item View . isSelected ) Ġ} Ġ?: Ġon Item Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Model ?. run Ġ{ Ġfinish () Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . start Action Mode ( this @ List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetSelected ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠsetSelected ( selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected ) Ġselected Set ?. add ( data !!. id ) Ġelse Ġselected Set ?. remove ( data !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . isSelected Ġ= Ġselected ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind Item ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . selected , Ġselected Set ?. contains ( data . id ) Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ