mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
73 lines
2.7 KiB
Kotlin
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()
|
|
}
|
|
}
|