package Ġcom . jon athan l . bg manager . ui . game list Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . card view . widget . Card View Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . jon athan l . bg manager . R Ċ import Ġcom . jon athan l . bg manager . data . models . Game ListEntry Ċ Ċ class ĠGame ListView Adapter ( ĊĠĠĠ Ġprivate Ġval Ġgame List Drag Listener : ĠGame List Drag Listener , ĊĠĠĠ Ġprivate Ġval Ġgame List ViewModel : ĠGame List ViewModel ĊĠĠĠ Ġ): ĊĠĠĠ ĠList Adapter < Game ListEntry , ĠGame ListView Adapter . Game ListView Holder >( Game ListResult Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġentry List Ġ= Ġmutable ListOf < Game ListEntry >() ĊĊĠĠĠ Ġ// ĠProvide Ġitem callback Ġto Ġallow ĠDiff Util Ġto Ġdetermine Ġwhat Ġis Ġdifferent Ġfrom Ġthe Ġold Ġand Ġnew Ġitems ĊĠĠĠ Ġclass ĠGame ListResult Diff Callback Ġ: ĠDiff Util . Item Callback < Game ListEntry >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠGame ListEntry , Ġnew Item : ĠGame ListEntry ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ(( old Item . game Id Ġ== Ġnew Item . game Id ) && ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( old Item . game Name Ġ== Ġnew Item . game Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠGame ListEntry , Ġnew Item : ĠGame ListEntry ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( old Item . game Id Ġ== Ġnew Item . game Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠViewHolder Ġfor Ġeach Ġdata Ġitem ĊĠĠĠ Ġclass ĠGame ListView Holder ( private Ġval Ġcard View : ĠCard View ): ĠRecyclerView . ViewHolder ( card View ){ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbind ( game ListEntry : ĠGame ListEntry , Ġgame List Drag Listener : ĠGame List Drag Listener ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgame ListEntry Text Ġ= Ġcard View . findViewById < TextView >( R . id . game ListEntry Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreorder Image Ġ= Ġcard View . findViewById < ImageView >( R . id . reorder Image ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame ListEntry Text . text Ġ= Ġgame ListEntry . game Name . plus ( game ListEntry . game Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreorder Image . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event ?. action Mask ed Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame List Drag Listener . onStart Drag ( this @ Game ListView Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġnew Ġviews Ġ( by Ġlayout Ġmanager ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠGame ListView Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġnew Ġview ĊĠĠĠĠĠĠĠ Ġval Ġcard View Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . recycler _ game list _ view , Ġparent , Ġfalse ) Ġas ĠCard View ĊĠĠĠĠĠĠĠ Ġreturn ĠGame ListView Holder ( card View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubmit List ( list : ĠMutable List < Game ListEntry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . submit List ( list ) ĊĠĠĠĠĠĠĠ Ġentry List Ġ= Ġlist Ġ?: Ġmutable ListOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReplace Ġcontents Ġof Ġview Ġ( by Ġlayout Ġmanager ) ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠGame ListView Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ- Ġbind Ġthe Ġresult Ġto Ġthe Ġview ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position ), Ġgame List Drag Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave List To Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġgame List ViewModel . save Game List To Db ( entry List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Entry On Drag ( item From Pos : ĠInt , Ġitem To Pos : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġentry ToBe Shift ed Ġ= Ġentry List . remove At ( item From Pos ) ĊĠĠĠĠĠĠĠ Ġentry List . add ( item To Pos , Ġentry ToBe Shift ed ) ĊĠĠĠĠĠĠĠ Ġnotify Item Moved ( item From Pos , Ġitem To Pos ) ĊĠĠĠĠĠĠĠ Ġsave List To Db () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Entry On Swipe ( position : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġremoved Item Ġ= Ġentry List . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġgame List ViewModel . remove Game Entry From Db ( removed Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsort Game List Ascending () Ġ{ ĊĠĠĠĠĠĠĠ Ġentry List . sortBy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . game Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsort Game List Descending () Ġ{ ĊĠĠĠĠĠĠĠ Ġentry List . sortBy Descending Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . game Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} Ċ }