package Ġcom . example . hass an us man . get dis cipl ined . ui . main Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . example . hass an us man . get dis cipl ined . App Ċ import Ġcom . example . hass an us man . get dis cipl ined . R Ċ import Ġcom . example . hass an us man . get dis cipl ined . data . db . model . List Id Ċ import Ġcom . example . hass an us man . get dis cipl ined . utils . item touch .* Ċ import Ġkotlinx . android . synt hetic . main . list id _ item . view .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠH ass an Us man Ġon Ġ 0 3 / 1 1 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠList Adapter ( val Ġcontext : ĠContext , Ġre cyclerView : ĠRecyclerView ) Ġ: ĊĠĠĠ ĠDrag able Adapter < ListView Holder , ĠList Id >( re cyclerView ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" ListAdapter " ĊĊĠĠĠ Ġlateinit Ġvar Ġcallback : ĠCallback ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ( context Ġas ĠApp ). component (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠList ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( position Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind 2 ( context . resources . getString ( R . string . my day ), ĠR . drawable . my day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind 2 ( context . resources . getString ( R . string . todo ), ĠR . drawable . todo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( items [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( position Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . clicked Today Or ToDo Item ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . clicked Navigation Item ( items [ holder . adapter Position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Drag Listener . onStart Drag ( holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠList ViewHolder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList ViewHolder ( LayoutInflater . from ( context ). inflate ( R . layout . list id _ item , Ġparent , Ġfalse )) ĊĊĠĠĠ Ġfun Ġupdate Array ( array : ĠArrayList < List Id >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! on Drag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġarray ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( 0 , ĠList Id ( 0 , Ġcontext . resources . getString ( R . string . todo ), Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( 0 , ĠList Id ( 0 , Ġcontext . resources . getString ( R . string . my day ), Ġ 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Item Move ( old Pos : ĠInt , Ġnew Pos : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmove Item ( old Pos , Ġnew Pos ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Swipe ( pos : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Item ( old Pos : ĠInt , Ġnew Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( old Pos Ġ>= Ġ 2 Ġ&& Ġnew Pos Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Moved ( old Pos , Ġnew Pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder For Old Ġ= Ġitems [ new Pos ]. list Order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder F ol New Ġ= Ġitems [ old Pos ]. list Order ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask 1 Ġ= Ġitems [ old Pos ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask 1 . list Order Ġ= Ġorder For Old ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . update List Id ( task 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask 2 Ġ= Ġitems [ new Pos ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask 1 . list Order Ġ= Ġorder F ol New ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . update List Id ( task 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ old Pos ]. list Order Ġ= Ġorder For Old ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ new Pos ]. list Order Ġ= Ġorder F ol New ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . swap ( items , Ġold Pos , Ġnew Pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġclicked Today Or ToDo Item ( position : ĠInt ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġclicked Navigation Item ( list Id : ĠList Id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠList ViewHolder ( item View : ĠView ) Ġ: ĠDrag able Holder ( item View ) Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġ_ list Id : ĠList Id ĊĊĠĠĠ Ġfun Ġbind ( list Id : ĠList Id ) Ġ= Ġwith ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġlist Id . name ĊĊĠĠĠĠĠĠĠ Ġ_ list Id Ġ= Ġlist Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind 2 ( name : ĠString , Ġimage Id : ĠInt ) Ġ= Ġwith ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage . setImage Resource ( image Id ) ĊĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġname ĊĠĠĠ Ġ} Ċ }