@@ -4,8 +4,11 @@ import android.graphics.Paint
4
4
import android.graphics.drawable.Drawable
5
5
import android.util.TypedValue
6
6
import android.view.Menu
7
+ import android.view.MotionEvent
7
8
import android.view.View
8
9
import android.view.ViewGroup
10
+ import androidx.recyclerview.widget.ItemTouchHelper
11
+ import androidx.recyclerview.widget.RecyclerView
9
12
import com.simplemobiletools.commons.activities.BaseSimpleActivity
10
13
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
11
14
import com.simplemobiletools.commons.extensions.applyColorFilter
@@ -17,20 +20,34 @@ import com.simplemobiletools.notes.pro.dialogs.RenameChecklistItemDialog
17
20
import com.simplemobiletools.notes.pro.extensions.getTextSize
18
21
import com.simplemobiletools.notes.pro.helpers.DONE_CHECKLIST_ITEM_ALPHA
19
22
import com.simplemobiletools.notes.pro.interfaces.ChecklistItemsListener
23
+ import com.simplemobiletools.notes.pro.interfaces.ItemMoveCallback
24
+ import com.simplemobiletools.notes.pro.interfaces.ItemTouchHelperContract
25
+ import com.simplemobiletools.notes.pro.interfaces.StartReorderDragListener
20
26
import com.simplemobiletools.notes.pro.models.ChecklistItem
21
27
import kotlinx.android.synthetic.main.item_checklist.view.*
22
28
import java.util.*
23
29
24
30
class ChecklistAdapter (activity : BaseSimpleActivity , var items : ArrayList <ChecklistItem >, val listener : ChecklistItemsListener ? ,
25
31
recyclerView : MyRecyclerView , val showIcons : Boolean , itemClick : (Any ) -> Unit ) :
26
- MyRecyclerViewAdapter (activity, recyclerView, null , itemClick) {
32
+ MyRecyclerViewAdapter (activity, recyclerView, null , itemClick), ItemTouchHelperContract {
27
33
28
34
private lateinit var crossDrawable: Drawable
29
35
private lateinit var checkDrawable: Drawable
36
+ private var touchHelper: ItemTouchHelper ? = null
37
+ private var startReorderDragListener: StartReorderDragListener
30
38
31
39
init {
32
40
setupDragListener(true )
33
41
initDrawables()
42
+
43
+ touchHelper = ItemTouchHelper (ItemMoveCallback (this ))
44
+ touchHelper!! .attachToRecyclerView(recyclerView)
45
+
46
+ startReorderDragListener = object : StartReorderDragListener {
47
+ override fun requestDrag (viewHolder : RecyclerView .ViewHolder ) {
48
+ touchHelper?.startDrag(viewHolder)
49
+ }
50
+ }
34
51
}
35
52
36
53
override fun getActionMenuId () = R .menu.cab_checklist
@@ -76,7 +93,7 @@ class ChecklistAdapter(activity: BaseSimpleActivity, var items: ArrayList<Checkl
76
93
override fun onBindViewHolder (holder : ViewHolder , position : Int ) {
77
94
val item = items[position]
78
95
holder.bindView(item, true , true ) { itemView, layoutPosition ->
79
- setupView(itemView, item)
96
+ setupView(itemView, item, holder )
80
97
}
81
98
bindViewHolder(holder)
82
99
}
@@ -130,7 +147,7 @@ class ChecklistAdapter(activity: BaseSimpleActivity, var items: ArrayList<Checkl
130
147
131
148
private fun getSelectedItems () = items.filter { selectedKeys.contains(it.id) } as ArrayList <ChecklistItem >
132
149
133
- private fun setupView (view : View , checklistItem : ChecklistItem ) {
150
+ private fun setupView (view : View , checklistItem : ChecklistItem , holder : ViewHolder ) {
134
151
val isSelected = selectedKeys.contains(checklistItem.id)
135
152
view.apply {
136
153
checklist_title.apply {
@@ -149,10 +166,36 @@ class ChecklistAdapter(activity: BaseSimpleActivity, var items: ArrayList<Checkl
149
166
150
167
checklist_image.setImageDrawable(if (checklistItem.isDone) checkDrawable else crossDrawable)
151
168
checklist_image.beVisibleIf(showIcons)
169
+ checklist_holder.isSelected = isSelected
152
170
153
171
checklist_drag_handle.beVisibleIf(selectedKeys.isNotEmpty())
154
172
checklist_drag_handle.applyColorFilter(textColor)
155
- checklist_holder.isSelected = isSelected
173
+ checklist_drag_handle.setOnTouchListener { v, event ->
174
+ if (event.action == MotionEvent .ACTION_DOWN ) {
175
+ startReorderDragListener.requestDrag(holder)
176
+ }
177
+ false
178
+ }
179
+ }
180
+ }
181
+
182
+ override fun onRowMoved (fromPosition : Int , toPosition : Int ) {
183
+ if (fromPosition < toPosition) {
184
+ for (i in fromPosition until toPosition) {
185
+ Collections .swap(items, i, i + 1 )
186
+ }
187
+ } else {
188
+ for (i in fromPosition downTo toPosition + 1 ) {
189
+ Collections .swap(items, i, i - 1 )
190
+ }
156
191
}
192
+ notifyItemMoved(fromPosition, toPosition)
193
+ }
194
+
195
+ override fun onRowSelected (myViewHolder : ViewHolder ? ) {
196
+ }
197
+
198
+ override fun onRowClear (myViewHolder : ViewHolder ? ) {
199
+ listener?.saveChecklist()
157
200
}
158
201
}
0 commit comments