Browse Source

Add a setting to always display the bookmark markers in the audio player

merge-requests/2174/head
Nicolas Pomepuy 1 year ago
committed by Duncan McNamara
parent
commit
0efe219317
  1. 2
      application/resources/src/main/res/values/strings.xml
  2. 3
      application/tools/src/main/java/org/videolan/tools/Settings.kt
  3. 8
      application/vlc-android/res/xml/preferences_audio_controls.xml
  4. 11
      application/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt
  5. 58
      application/vlc-android/src/org/videolan/vlc/gui/helpers/BookmarkListDelegate.kt
  6. 15
      application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudioControls.kt

2
application/resources/src/main/res/values/strings.xml

@ -414,6 +414,8 @@
<string name="fastplay_subtitle">Release to stop</string>
<string name="show_bookmark_buttons">Show bookmark buttons</string>
<string name="show_bookmark_buttons_summary">Show buttons to navigate between bookmarks</string>
<string name="show_bookmark_markers">Show bookmark markers</string>
<string name="show_bookmark_markers_summary">Show bookmark markers over the timeline</string>
<string name="show_chapter_buttons">Show chapter buttons</string>
<string name="show_chapter_buttons_summary">Show buttons to navigate between chapters</string>

3
application/tools/src/main/java/org/videolan/tools/Settings.kt

@ -119,7 +119,8 @@ const val KEY_AUDIO_LONG_JUMP_DELAY = "audio_long_jump_delay"
const val KEY_AUDIO_FORCE_SHUFFLE = "audio_force_shuffle"
const val KEY_AUDIO_SHOW_TRACK_NUMBERS = "audio_show_track_numbers"
const val KEY_AUDIO_SHOW_CHAPTER_BUTTONS = "audio_show_chapter_buttons"
const val KEY_AUDIO_SHOW_BOOMARK_BUTTONS = "audio_show_bookmark_buttons"
const val KEY_AUDIO_SHOW_BOOkMARK_BUTTONS = "audio_show_bookmark_buttons"
const val KEY_AUDIO_SHOW_BOOKMARK_MARKERS = "audio_show_bookmark_markers"
// AudioPlayer

8
application/vlc-android/res/xml/preferences_audio_controls.xml

@ -57,6 +57,14 @@
android:key="audio_show_bookmark_buttons"
android:title="@string/show_bookmark_buttons"
android:summary="@string/show_bookmark_buttons_summary"/>
<CheckBoxPreference
app:singleLineTitle="false"
android:defaultValue="false"
android:dependency="audio_show_bookmark_buttons"
android:key="audio_show_bookmark_markers"
android:title="@string/show_bookmark_markers"
android:summary="@string/show_bookmark_markers_summary"/>
</PreferenceCategory>

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

@ -429,13 +429,19 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay
binding.previousChapter?.visibility = View.VISIBLE
}
if (isShowingCover() && !bookmarkModel.dataset.isEmpty() && settings.getBoolean(KEY_AUDIO_SHOW_BOOMARK_BUTTONS, false)) {
if (isShowingCover() && !bookmarkModel.dataset.isEmpty() && settings.getBoolean(KEY_AUDIO_SHOW_BOOkMARK_BUTTONS, false)) {
binding.audioForwardBookmark.setVisible()
binding.audioRewindBookmark.setVisible()
} else {
binding.audioForwardBookmark.setGone()
binding.audioRewindBookmark.setGone()
}
if (settings.getBoolean(KEY_AUDIO_SHOW_BOOKMARK_MARKERS, false))
bookmarkModel.service?.let { service ->
binding.bookmarkMarkerContainer.setVisible()
BookmarkListDelegate.showBookmarks(binding.bookmarkMarkerContainer, service, requireActivity(), bookmarkModel.dataset.getList())
}
else binding.bookmarkMarkerContainer.removeAllViews()
binding.songTitle?.text = if (!chapter.isNullOrEmpty()) chapter else playlistModel.title
binding.songSubtitle?.text = if (!chapter.isNullOrEmpty()) TextUtils.separatedString(playlistModel.title, playlistModel.artist) else TextUtils.separatedString(playlistModel.artist, playlistModel.album)
@ -748,6 +754,9 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher, IAudioPlay
bookmarkListDelegate = BookmarkListDelegate(requireActivity(), service, bookmarkModel)
bookmarkListDelegate.visibilityListener = {
binding.audioPlayProgress.visibility = if (shouldHidePlayProgress()) View.GONE else View.VISIBLE
lifecycleScope.launch {
doUpdate()
}
}
bookmarkListDelegate.markerContainer = binding.bookmarkMarkerContainer
}

58
application/vlc-android/src/org/videolan/vlc/gui/helpers/BookmarkListDelegate.kt

@ -101,33 +101,7 @@ class BookmarkListDelegate(val activity: FragmentActivity, val service: Playback
bookmarkModel.dataset.observe(activity) { bookmarkList ->
adapter.update(bookmarkList)
markerContainer.removeAllViews()
//show bookmark markers
service.currentMediaWrapper?.length?.let { mediaLength ->
if (mediaLength < 1) return@let
val constraintSet = ConstraintSet()
constraintSet.clone(markerContainer)
bookmarkList.forEach { bookmark ->
val imageView = ImageView(activity)
imageView.scaleType = ImageView.ScaleType.FIT_CENTER
imageView.id = View.generateViewId()
val guidelineId = View.generateViewId()
if (BuildConfig.DEBUG) Log.d(this::class.java.simpleName, "Adding guideline to: ${bookmark.time.toFloat() / mediaLength.toFloat()}")
constraintSet.create(guidelineId, ConstraintSet.VERTICAL_GUIDELINE)
constraintSet.setGuidelinePercent(guidelineId, bookmark.time.toFloat() / mediaLength.toFloat())
constraintSet.connect(imageView.id, ConstraintSet.START, guidelineId, ConstraintSet.START, 0)
constraintSet.connect(imageView.id, ConstraintSet.END, guidelineId, ConstraintSet.END, 0)
constraintSet.constrainWidth(imageView.id, ConstraintSet.WRAP_CONTENT)
constraintSet.constrainHeight(imageView.id, ConstraintSet.WRAP_CONTENT)
constraintSet.connect(imageView.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
constraintSet.connect(imageView.id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP)
imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.ic_bookmark_marker))
markerContainer.addView(imageView)
}
constraintSet.applyTo(markerContainer)
}
showBookmarks(markerContainer, service, activity, bookmarkList)
@ -186,4 +160,34 @@ class BookmarkListDelegate(val activity: FragmentActivity, val service: Playback
bookmarkModel.refresh()
}
}
companion object {
fun showBookmarks(markerContainer:ConstraintLayout, service: PlaybackService, activity: FragmentActivity, bookmarkList: List<Bookmark>) {
markerContainer.removeAllViews()
//show bookmark markers
service.currentMediaWrapper?.length?.let { mediaLength ->
if (mediaLength < 1) return@let
val constraintSet = ConstraintSet()
constraintSet.clone(markerContainer)
bookmarkList.forEach { bookmark ->
val imageView = ImageView(activity)
imageView.scaleType = ImageView.ScaleType.FIT_CENTER
imageView.id = View.generateViewId()
val guidelineId = View.generateViewId()
constraintSet.create(guidelineId, ConstraintSet.VERTICAL_GUIDELINE)
constraintSet.setGuidelinePercent(guidelineId, bookmark.time.toFloat() / mediaLength.toFloat())
constraintSet.connect(imageView.id, ConstraintSet.START, guidelineId, ConstraintSet.START, 0)
constraintSet.connect(imageView.id, ConstraintSet.END, guidelineId, ConstraintSet.END, 0)
constraintSet.constrainWidth(imageView.id, ConstraintSet.WRAP_CONTENT)
constraintSet.constrainHeight(imageView.id, ConstraintSet.WRAP_CONTENT)
constraintSet.connect(imageView.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
constraintSet.connect(imageView.id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP)
imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.ic_bookmark_marker))
markerContainer.addView(imageView)
}
constraintSet.applyTo(markerContainer)
}
}
}
}

15
application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudioControls.kt

@ -23,8 +23,11 @@
package org.videolan.vlc.gui.preferences
import android.content.SharedPreferences
import android.os.Bundle
import androidx.preference.CheckBoxPreference
import org.videolan.tools.KEY_AUDIO_JUMP_DELAY
import org.videolan.tools.KEY_AUDIO_LONG_JUMP_DELAY
import org.videolan.tools.KEY_AUDIO_SHOW_BOOkMARK_BUTTONS
import org.videolan.tools.KEY_AUDIO_SHOW_TRACK_NUMBERS
import org.videolan.tools.Settings
import org.videolan.vlc.R
@ -32,10 +35,17 @@ import org.videolan.vlc.gui.video.VideoPlayerActivity
class PreferencesAudioControls : BasePreferenceFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
private lateinit var bookmarkMarkersPreference: CheckBoxPreference
override fun getXml() = R.xml.preferences_audio_controls
override fun getTitleId() = R.string.controls_prefs_category
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bookmarkMarkersPreference = findPreference("audio_show_bookmark_markers")!!
}
override fun onStart() {
super.onStart()
preferenceScreen.sharedPreferences!!.registerOnSharedPreferenceChangeListener(this)
@ -60,6 +70,11 @@ class PreferencesAudioControls : BasePreferenceFragment(), SharedPreferences.OnS
KEY_AUDIO_SHOW_TRACK_NUMBERS -> {
Settings.audioShowTrackNumbers.postValue(sharedPreferences.getBoolean(KEY_AUDIO_SHOW_TRACK_NUMBERS, false))
}
KEY_AUDIO_SHOW_BOOkMARK_BUTTONS -> {
if (!sharedPreferences.getBoolean(KEY_AUDIO_SHOW_BOOkMARK_BUTTONS, false)) {
bookmarkMarkersPreference.isChecked = false
}
}
}
Settings.onAudioControlsChanged()
}

Loading…
Cancel
Save