diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt index 88a0b7a8d..bf85fe28b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt @@ -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 { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt index a4e2152d3..bb99dbdc9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt @@ -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 : diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index 059b10bb0..84ecea2a3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt @@ -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(