/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġpaging . android . example . com . hex colors Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . paging . Paged List Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ /** Ċ Ġ* ĠShows Ġa Ġlist Ġof ĠHex Colors , Ġwith Ġswipe - to - delete , Ġand Ġan Ġinput Ġfield Ġat Ġthe Ġtop Ġto Ġadd . Ċ Ġ* Ġ< p > Ċ Ġ* ĠHex Colors Ġare Ġstored Ġin Ġa Ġdatabase , Ġso Ġsw ip es Ġand Ġadditions Ġedit Ġthe Ġdatabase Ġdirectly , Ġand Ġthe ĠUI Ċ Ġ* Ġis Ġupdated Ġautomatically Ġusing Ġpaging Ġcomponents . Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠHex Color Adapter ĊĠĠĠ Ġprivate Ġvar Ġlast Live List : ĠLive Data < Paged List < Hex Color >> ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this ). get ( Hex Color ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġadapter Ġfor Ġthe ĠRecyclerView ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠHex Color Adapter () ĊĠĠĠĠĠĠĠ Ġhex Color List . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠSubscribe Ġthe Ġadapter Ġto Ġthe ĠViewModel , Ġso Ġthe Ġitems Ġin Ġthe Ġadapter Ġare Ġref reshed ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġlist Ġchanges ĊĠĠĠĠĠĠĠ Ġset DataSource ( viewModel . get Sort Key ()) ĊĊĠĠĠĠĠĠĠ Ġinit Swipe ToDelete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠĠĠĠĠ ĠviewModel . sort Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu ?. add ( it . first ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmenu ?. add ( Hex Color ViewModel . ADD _ MORE ) ĊĠĠĠĠĠĠĠ Ġmenu ?. add ( Hex Color ViewModel . START _ OVER ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġitem Title Ġ= Ġitem ?. title . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex Color ViewModel . ADD _ MORE Ġ-> ĠviewModel . add More ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex Color ViewModel . START _ OVER Ġ-> ĠviewModel . start Over ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġset DataSource ( item Title ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset DataSource ( sort Key : ĠString Ġ= ĠviewModel . get Sort Key ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġ" Sort ĠColors Ġ$ sort Key " ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠviewModel . get LiveData ( sort Key ) ĊĠĠĠĠĠĠĠ Ġlast Live List ?. remove Observer s ( this ) ĊĠĠĠĠĠĠĠ Ġlast Live List Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġlast Live List ?. observe ( this , ĠObserver Ġ{ Ġadapter . submit List ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Swipe ToDelete () Ġ{ ĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( object Ġ: ĠItem Touch Helper . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġenable Ġthe Ġitems Ġto Ġswipe Ġto Ġthe Ġleft Ġor Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Movement Flags ( 0 , ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder , Ġtarget : ĠRecyclerView . ViewHolder ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġan Ġitem Ġis Ġsw ip ed , Ġremove Ġthe Ġitem Ġvia Ġthe Ġview Ġmodel . ĠThe Ġlist Ġitem Ġwill Ġbe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġremoved Ġin Ġresponse , Ġbecause Ġthe Ġadapter Ġis Ġob serving Ġthe Ġlive Ġlist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Holder Ġas ĠHex Color ViewHolder ). hex Color ?. let Ġ{ ĠviewModel . remove ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). attach To RecyclerView ( hex Color List ) ĊĠĠĠ Ġ} Ċ } Ċ