Add drag to re-arrange support for quick chat actions

This commit is contained in:
Douile 2022-08-12 15:35:27 +01:00
parent 7da224a1ce
commit 1bdb6bf340
No known key found for this signature in database
GPG key ID: DAB413485BA6CFFD
8 changed files with 92 additions and 14 deletions

View file

@ -0,0 +1,24 @@
package com.geeksville.mesh.ui
import android.content.Context
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
class DragManageAdapter(var adapter: SwapAdapter, context: Context, dragDirs: Int, swipeDirs: Int) : ItemTouchHelper.SimpleCallback(dragDirs, swipeDirs) {
interface SwapAdapter {
fun swapItems(fromPosition: Int, toPosition: Int)
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
adapter.swapItems(viewHolder.absoluteAdapterPosition, target.absoluteAdapterPosition)
TODO("Not yet implemented")
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
TODO("Not yet implemented")
}
}

View file

@ -307,6 +307,7 @@ class MessagesFragment : Fragment(), Logging {
model.quickChatActions.asLiveData().observe(viewLifecycleOwner) { actions ->
actions?.let {
binding.quickChatLayout.removeAllViews()
for (action in actions) {
val button = Button(context)
button.setText(action.name)

View file

@ -13,7 +13,7 @@ import com.geeksville.mesh.database.entity.QuickChatAction
class QuickChatActionAdapter internal constructor(
context: Context,
private val onEdit: (action: QuickChatAction) -> Unit
) : RecyclerView.Adapter<QuickChatActionAdapter.ActionViewHolder>() {
) : RecyclerView.Adapter<QuickChatActionAdapter.ActionViewHolder>(), DragManageAdapter.SwapAdapter {
private val inflater: LayoutInflater = LayoutInflater.from(context)
private var actions = emptyList<QuickChatAction>()
@ -50,4 +50,9 @@ class QuickChatActionAdapter internal constructor(
override fun getItemCount() = actions.size
override fun swapItems(fromPosition: Int, toPosition: Int) {
// TODO: Update data
notifyItemMoved(fromPosition, toPosition)
}
}

View file

@ -9,6 +9,7 @@ import android.widget.EditText
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.asLiveData
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import com.geeksville.android.Logging
import com.geeksville.mesh.R
@ -84,11 +85,16 @@ class QuickChatSettingsFragment : ScreenFragment("Quick Chat settings"), Logging
dialog.show()
}
val dragCallback = DragManageAdapter(quickChatActionAdapter, requireContext(), ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0)
val helper = ItemTouchHelper(dragCallback)
binding.quickChatSettingsView.apply {
this.layoutManager = LinearLayoutManager(requireContext())
this.adapter = quickChatActionAdapter
helper.attachToRecyclerView(this)
}
model.quickChatActions.asLiveData().observe(viewLifecycleOwner) { actions ->
actions?.let { quickChatActionAdapter.setActions(actions) }
}