LibreTube/app/src/main/java/com/github/libretube/dialogs/NavBarOptionsDialog.kt
2022-09-20 19:03:18 +02:00

73 lines
2.7 KiB
Kotlin

package com.github.libretube.dialogs
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R
import com.github.libretube.adapters.NavBarOptionsAdapter
import com.github.libretube.databinding.DialogNavbarOptionsBinding
import com.github.libretube.util.NavBarHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class NavBarOptionsDialog : DialogFragment() {
private lateinit var binding: DialogNavbarOptionsBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
binding = DialogNavbarOptionsBinding.inflate(layoutInflater)
val options = NavBarHelper.getNavBarItems()
val adapter = NavBarOptionsAdapter(options.toMutableList())
val itemTouchCallback = object : ItemTouchHelper.Callback() {
override fun getMovementFlags(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder
): Int {
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
return makeMovementFlags(dragFlags, 0)
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
val itemToMove = adapter.items[viewHolder.absoluteAdapterPosition]
adapter.items.remove(itemToMove)
adapter.items.add(target.absoluteAdapterPosition, itemToMove)
adapter.notifyItemMoved(
viewHolder.absoluteAdapterPosition,
target.absoluteAdapterPosition
)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
// do nothing
}
}
binding.optionsRecycler.layoutManager = LinearLayoutManager(context)
binding.optionsRecycler.adapter = adapter
val itemTouchHelper = ItemTouchHelper(itemTouchCallback)
itemTouchHelper.attachToRecyclerView(binding.optionsRecycler)
return MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.navigation_bar)
.setView(binding.root)
.setPositiveButton(R.string.okay) { _, _ ->
NavBarHelper.setNavBarItems(adapter.items)
RequireRestartDialog()
.show(requireParentFragment().childFragmentManager, null)
}
.setNegativeButton(R.string.cancel, null)
.show()
}
}