fix: Fix playlist reordering crash
This commit is contained in:
parent
3e93dcfc4d
commit
ab16d7e105
3 changed files with 25 additions and 35 deletions
|
@ -26,6 +26,7 @@ import code.name.monkey.retromusic.db.toSongsEntity
|
|||
import code.name.monkey.retromusic.dialogs.RemoveSongFromPlaylistDialog
|
||||
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import code.name.monkey.retromusic.util.ViewUtil
|
||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter
|
||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -50,11 +51,7 @@ class OrderablePlaylistSongAdapter(
|
|||
override fun getItemId(position: Int): Long {
|
||||
// requires static value, it means need to keep the same value
|
||||
// even if the item position has been changed.
|
||||
return if (position != 0) {
|
||||
dataSet[position - 1].id
|
||||
} else {
|
||||
-1
|
||||
}
|
||||
return dataSet[position].id
|
||||
}
|
||||
|
||||
override fun createViewHolder(view: View): SongAdapter.ViewHolder {
|
||||
|
@ -99,26 +96,22 @@ class OrderablePlaylistSongAdapter(
|
|||
}
|
||||
|
||||
override fun onCheckCanStartDrag(holder: ViewHolder, position: Int, x: Int, y: Int): Boolean {
|
||||
if (dataSet.size == 0 or 1 || isInQuickSelectMode) {
|
||||
if (isInQuickSelectMode) {
|
||||
return false
|
||||
}
|
||||
val dragHandle = holder.dragView ?: return false
|
||||
|
||||
val handleWidth = dragHandle.width
|
||||
val handleHeight = dragHandle.height
|
||||
val handleLeft = dragHandle.left
|
||||
val handleTop = dragHandle.top
|
||||
|
||||
return (x >= handleLeft && x < handleLeft + handleWidth &&
|
||||
y >= handleTop && y < handleTop + handleHeight) && position != 0
|
||||
return ViewUtil.hitTest(holder.imageText!!, x, y) || ViewUtil.hitTest(
|
||||
holder.dragView!!,
|
||||
x,
|
||||
y
|
||||
)
|
||||
}
|
||||
|
||||
override fun onMoveItem(fromPosition: Int, toPosition: Int) {
|
||||
dataSet.add(toPosition - 1, dataSet.removeAt(fromPosition - 1))
|
||||
dataSet.add(toPosition, dataSet.removeAt(fromPosition))
|
||||
}
|
||||
|
||||
override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange {
|
||||
return ItemDraggableRange(0, itemCount - 1)
|
||||
override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun onCheckCanDrop(draggingPosition: Int, dropPosition: Int): Boolean {
|
||||
|
|
|
@ -12,6 +12,7 @@ import androidx.navigation.fragment.findNavController
|
|||
import androidx.navigation.fragment.navArgs
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter
|
||||
import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailNewBinding
|
||||
|
@ -34,7 +35,6 @@ import com.google.android.material.transition.MaterialArcMotion
|
|||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import com.google.android.material.transition.MaterialSharedAxis
|
||||
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
|
||||
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator
|
||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import org.koin.core.parameter.parametersOf
|
||||
|
@ -126,15 +126,11 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
|
|||
val wrappedAdapter: RecyclerView.Adapter<*> =
|
||||
dragDropManager.createWrappedAdapter(playlistSongAdapter)
|
||||
|
||||
|
||||
val animator: GeneralItemAnimator = DraggableItemAnimator()
|
||||
binding.recyclerView.itemAnimator = animator
|
||||
|
||||
dragDropManager.attachRecyclerView(binding.recyclerView)
|
||||
|
||||
binding.recyclerView.apply {
|
||||
adapter = wrappedAdapter
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
binding.recyclerView.adapter = wrappedAdapter
|
||||
itemAnimator = DraggableItemAnimator()
|
||||
dragDropManager.attachRecyclerView(this)
|
||||
ThemedFastScroller.create(this)
|
||||
}
|
||||
playlistSongAdapter.registerAdapterDataObserver(object :
|
||||
|
|
|
@ -80,9 +80,6 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q
|
|||
recyclerViewDragDropManager = RecyclerViewDragDropManager()
|
||||
recyclerViewSwipeManager = RecyclerViewSwipeManager()
|
||||
|
||||
val animator = DraggableItemAnimator()
|
||||
animator.supportsChangeAnimations = false
|
||||
|
||||
playingQueueAdapter = PlayingQueueAdapter(
|
||||
requireActivity(),
|
||||
MusicPlayerRemote.playingQueue.toMutableList(),
|
||||
|
@ -94,12 +91,15 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q
|
|||
|
||||
linearLayoutManager = LinearLayoutManager(requireContext())
|
||||
|
||||
binding.recyclerView.layoutManager = linearLayoutManager
|
||||
binding.recyclerView.adapter = wrappedAdapter
|
||||
binding.recyclerView.itemAnimator = animator
|
||||
recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView)
|
||||
recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView)
|
||||
recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView)
|
||||
|
||||
binding.recyclerView.apply {
|
||||
layoutManager = linearLayoutManager
|
||||
adapter = wrappedAdapter
|
||||
itemAnimator = DraggableItemAnimator()
|
||||
recyclerViewTouchActionGuardManager?.attachRecyclerView(this)
|
||||
recyclerViewDragDropManager?.attachRecyclerView(this)
|
||||
recyclerViewSwipeManager?.attachRecyclerView(this)
|
||||
}
|
||||
linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0)
|
||||
|
||||
binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
|
@ -184,6 +184,7 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q
|
|||
|
||||
private fun setupToolbar() {
|
||||
binding.appBarLayout.toolbar.subtitle = getUpNextAndQueueTime()
|
||||
binding.appBarLayout.toolbar.isTitleCentered = false
|
||||
binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor())
|
||||
ColorStateList.valueOf(
|
||||
MaterialValueHelper.getPrimaryTextColor(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue