Browse Source

Audio player prevent reordering when in filter mode

merge-requests/1594/merge
Nicolas Pomepuy 1 year ago
committed by Duncan McNamara
parent
commit
50256a4833
  1. 6
      application/vlc-android/res/layout/playlist_item.xml
  2. 11
      application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt
  3. 4
      application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt
  4. 2
      application/vlc-android/src/org/videolan/vlc/gui/helpers/SwipeDragItemTouchHelperCallback.kt
  5. 11
      application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt

6
application/vlc-android/res/layout/playlist_item.xml

@ -39,6 +39,10 @@
name="showTrackNumbers"
type="java.lang.Boolean" />
<variable
name="showReorderButtons"
type="java.lang.Boolean" />
<variable
name="masked"
type="java.lang.Boolean" />
@ -214,6 +218,7 @@
android:layout_gravity="center"
android:layout_marginEnd="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="@{showReorderButtons ? View.VISIBLE : View.GONE}"
android:clickable="true"
android:focusable="true"
android:onClick="@{holder::onMoveDownClick}"
@ -236,6 +241,7 @@
android:clickable="true"
android:focusable="true"
android:onClick="@{holder::onMoveUpClick}"
android:visibility="@{showReorderButtons ? View.VISIBLE : View.GONE}"
android:padding="8dp"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="parent"

11
application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt

@ -68,6 +68,7 @@ import org.videolan.medialibrary.Tools
import org.videolan.medialibrary.interfaces.media.Bookmark
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.AndroidDevices
import org.videolan.resources.AppContextProvider
import org.videolan.resources.TAG_ITEM
import org.videolan.resources.util.parcelable
@ -164,6 +165,7 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay
private var lastEndsAt = -1L
private var isDragging = false
private var currentChapters: Pair<MediaWrapper, List<MediaPlayer.Chapter>?>? = null
private lateinit var callback: SwipeDragItemTouchHelperCallback
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -177,6 +179,13 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay
playlistModel = PlaylistModel.get(this)
playlistModel.progress.observe(this@AudioPlayer) { it?.let { updateProgress(it) } }
playlistModel.speed.observe(this@AudioPlayer) { showChips() }
playlistModel.filteringState.observe(this@AudioPlayer) {
callback.longPressDragEnable = !it
if (isTablet() || AndroidDevices.isTv) {
playlistAdapter.showReorderButtons = !it
playlistAdapter.notifyDataSetChanged()
}
}
playlistAdapter.setModel(playlistModel)
playlistModel.dataset.asFlow().conflate().onEach {
doUpdate()
@ -232,7 +241,7 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay
coverMediaSwitcherListener.onChapterSwitching(false)
}
val callback = SwipeDragItemTouchHelperCallback(playlistAdapter, true)
callback = SwipeDragItemTouchHelperCallback(playlistAdapter, true)
val touchHelper = ItemTouchHelper(callback)
touchHelper.attachToRecyclerView(binding.songsList)

4
application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt

@ -72,6 +72,7 @@ private const val ACTION_MOVED = "action_moved"
class PlaylistAdapter(private val player: IPlayer) : DiffUtilAdapter<MediaWrapper, PlaylistAdapter.ViewHolder>(), SwipeDragHelperAdapter, SchedulerCallback {
var showTrackNumbers: Boolean = false
var showReorderButtons: Boolean = true
private var defaultCoverVideo: BitmapDrawable
private var defaultCoverAudio: BitmapDrawable
private var model: PlaylistModel? = null
@ -156,8 +157,7 @@ class PlaylistAdapter(private val player: IPlayer) : DiffUtilAdapter<MediaWrappe
val tablet = holder.binding.itemDelete.context.isTablet() || AndroidDevices.isTv
if (tablet) holder.binding.itemDelete.setVisible() else holder.binding.itemDelete.setGone()
if (tablet) holder.binding.itemMoveDown.setVisible() else holder.binding.itemMoveDown.setGone()
if (tablet) holder.binding.itemMoveUp.setVisible() else holder.binding.itemMoveUp.setGone()
holder.binding.showReorderButtons = showReorderButtons && tablet
holder.binding.executePendingBindings()
}

2
application/vlc-android/src/org/videolan/vlc/gui/helpers/SwipeDragItemTouchHelperCallback.kt

@ -28,7 +28,7 @@ import androidx.recyclerview.widget.RecyclerView
import org.videolan.vlc.gui.helpers.hf.PinCodeDelegate
import org.videolan.vlc.interfaces.SwipeDragHelperAdapter
class SwipeDragItemTouchHelperCallback(private val mAdapter: SwipeDragHelperAdapter, private val longPressDragEnable: Boolean = false, private val lockedInSafeMode: Boolean = false) : ItemTouchHelper.Callback() {
class SwipeDragItemTouchHelperCallback(private val mAdapter: SwipeDragHelperAdapter, var longPressDragEnable: Boolean = false, private val lockedInSafeMode: Boolean = false) : ItemTouchHelper.Callback() {
private var dragFrom = -1
private var dragTo = -1
var swipeEnabled = true

11
application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt

@ -24,7 +24,11 @@ import android.support.v4.media.session.PlaybackStateCompat
import androidx.annotation.MainThread
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.*
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.channels.actor
@ -48,6 +52,11 @@ class PlaylistModel : ViewModel(), PlaybackService.Callback by EmptyPBSCallback
val selection : Int
get() = if (filtering) -1 else service?.playlistManager?.currentIndex ?: -1
private var filtering = false
set(value) {
field = value
filteringState.value = value
}
val filteringState = MutableLiveData<Boolean>()
val progress = MediatorLiveData<PlaybackProgress>()
val speed = MediatorLiveData<Float>()
val playerState = MutableLiveData<PlayerState>()

Loading…
Cancel
Save