Browse Source

Add a warning when using ABRepeat and fast seek at the same time

merge-requests/2174/head
Nicolas Pomepuy 2 years ago
committed by Duncan McNamara
parent
commit
f1ae8ba58c
  1. 79
      application/resources/assets/images/svg/ic_abrepeat_warning.svg
  2. 23
      application/resources/src/main/res/drawable/ic_abrepeat_warning.xml
  3. 1
      application/resources/src/main/res/values/colors.xml
  4. 1
      application/resources/src/main/res/values/strings.xml
  5. 14
      application/vlc-android/res/layout/player_hud.xml
  6. 17
      application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt

79
application/resources/assets/images/svg/ic_abrepeat_warning.svg

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 48 48"
version="1.1"
id="svg7566"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="ic_abrepeat_warning.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs7560" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.2"
inkscape:cx="18.883929"
inkscape:cy="15.758929"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-text-baseline="true"
inkscape:window-width="2560"
inkscape:window-height="1376"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="0">
<inkscape:grid
type="xygrid"
id="grid8111" />
</sodipodi:namedview>
<metadata
id="metadata7563">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1090.5197)">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;enable-background:accumulate"
d="m 24,1103.1447 c -0.972062,0 -1.950675,0.852 -2.5,2.5 l -4.582519,13.75 H 15.25 c -0.6925,0 -1.25,0.5575 -1.25,1.25 v 1.25 h 20 v -1.25 c 0,-0.6925 -0.5575,-1.25 -1.25,-1.25 H 31.08252 L 26.5,1105.6447 c -0.562438,-1.6875 -1.52795,-2.51 -2.5,-2.5 z m 0,5 a 1.25,1.25 0 0 1 1.25,1.25 1.25,1.25 0 0 1 -0.0073,0.11 H 25.25 l -0.627442,6.8015 -0.0049,0.05 A 0.62499865,0.62499865 0 0 1 24,1116.8922 a 0.62499865,0.62499865 0 0 1 -0.615235,-0.52 h -0.0023 l -0.0048,-0.06 -0.627515,-6.8075 h 0.0048 a 1.25,1.25 0 0 1 -0.0048,-0.11 1.25,1.25 0 0 1 1.25,-1.25 z m 0,10 a 1.25,1.25 0 0 1 1.25,1.25 1.25,1.25 0 0 1 -1.25,1.25 1.25,1.25 0 0 1 -1.25,-1.25 1.25,1.25 0 0 1 1.25,-1.25 z"
id="path7543"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

23
application/resources/src/main/res/drawable/ic_abrepeat_warning.xml

@ -0,0 +1,23 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,24m-24,0a24,24 0,1 1,48 0a24,24 0,1 1,-48 0"
android:strokeAlpha="1"
android:strokeLineJoin="round"
android:strokeWidth="9.07086563"
android:fillColor="@color/player_circle_background"
android:strokeColor="#00000000"
android:fillType="nonZero"
android:strokeLineCap="butt" />
<path
android:pathData="m24,12.625c-0.972,0 -1.951,0.852 -2.5,2.5l-4.583,13.75L15.25,28.875c-0.692,0 -1.25,0.558 -1.25,1.25v1.25h20v-1.25c0,-0.692 -0.558,-1.25 -1.25,-1.25L31.083,28.875L26.5,15.125c-0.562,-1.688 -1.528,-2.51 -2.5,-2.5zM24,17.625a1.25,1.25 0,0 1,1.25 1.25,1.25 1.25,0 0,1 -0.007,0.11L25.25,18.985l-0.627,6.801 -0.005,0.05A0.625,0.625 0,0 1,24 26.373a0.625,0.625 0,0 1,-0.615 -0.52h-0.002l-0.005,-0.06 -0.628,-6.807h0.005a1.25,1.25 0,0 1,-0.005 -0.11,1.25 1.25,0 0,1 1.25,-1.25zM24,27.625a1.25,1.25 0,0 1,1.25 1.25,1.25 1.25,0 0,1 -1.25,1.25 1.25,1.25 0,0 1,-1.25 -1.25,1.25 1.25,0 0,1 1.25,-1.25z"
android:strokeLineJoin="round"
android:strokeWidth="0.125"
android:fillColor="@color/red200"
android:strokeColor="#00000000"
android:fillType="nonZero"
android:strokeLineCap="round"/>
</vector>

1
application/resources/src/main/res/values/colors.xml

@ -22,6 +22,7 @@
<color name="red500transparent25">#40ff0000</color>
<color name="red500transparent">#b4ff0000</color>
<color name="red200">#EF9A9A</color>
<color name="orange500transparent">#b4ff8800</color>
<color name="orange500focus">#86ff8800</color>
<color name="orange200transparent">#64ffca7d</color>

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

@ -511,6 +511,7 @@
<string name="tv_folders_first_summary">Show folders and then files in the file browser</string>
<string name="tv_show_hidden_files">Show hidden files</string>
<string name="tv_show_hidden_files_summary">Show hidden files in the file browser</string>
<string name="ab_repeat_fastseek_warning">Fast seek is enabled. It can lead to precision issues</string>
<string name="extensions_prefs_category">Extensions</string>
<string name="extensions_empty">No extension detected</string>

14
application/vlc-android/res/layout/player_hud.xml

@ -172,6 +172,20 @@
vlc:layout_constraintTop_toBottomOf="@+id/player_overlay_title"
vlc:srcCompat="@drawable/ic_abrepeat_reset_circle" />
<ImageView
android:id="@+id/fast_seek_warning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
tools:visibility="visible"
vlc:layout_constraintBottom_toBottomOf="@+id/ab_repeat_stop"
vlc:layout_constraintStart_toEndOf="@+id/ab_repeat_stop"
vlc:layout_constraintTop_toTopOf="@+id/ab_repeat_stop"
vlc:srcCompat="@drawable/ic_abrepeat_warning" />
<androidx.appcompat.widget.ViewStubCompat
android:id="@+id/bookmarks_stub"
android:layout_width="0dp"

17
application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt

@ -25,6 +25,9 @@
package org.videolan.vlc.gui.video
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.content.Intent
@ -36,6 +39,11 @@ import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.accessibility.AccessibilityEvent
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.Animation.AnimationListener
import android.view.animation.AnimationSet
import android.view.animation.AnimationUtils
import android.widget.Button
import android.widget.FrameLayout
@ -84,6 +92,7 @@ import org.videolan.vlc.viewmodels.PlaylistModel
import java.text.DateFormat
import java.util.*
class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
private lateinit var playerOverlayBrightness: ConstraintLayout
@ -539,6 +548,11 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
hudBinding.progress = service.playlistManager.player.progress
abRepeatAddMarker = hudBinding.abRepeatContainer.findViewById(R.id.ab_repeat_add_marker)
service.playlistManager.abRepeat.observe(player) { abvalues ->
if (abvalues.start != -1L && abvalues.stop != -1L && player.settings.getBoolean("always_fast_seek", false)) {
hudBinding.fastSeekWarning.setVisible()
} else {
hudBinding.fastSeekWarning.setGone()
}
hudBinding.abRepeatA = if (abvalues.start == -1L) -1F else abvalues.start / service.playlistManager.player.getLength().toFloat()
hudBinding.abRepeatB = if (abvalues.stop == -1L) -1F else abvalues.stop / service.playlistManager.player.getLength().toFloat()
hudBinding.abRepeatMarkerA.visibility = if (abvalues.start == -1L) View.GONE else View.VISIBLE
@ -623,6 +637,9 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
hudBinding.playerOverlaySeekbar.setOnSeekBarChangeListener(if (enabled) player.seekListener else null)
hudBinding.abRepeatReset.setOnClickListener(player)
hudBinding.abRepeatStop.setOnClickListener(player)
hudBinding.fastSeekWarning.setOnClickListener {
UiTools.snacker(player, R.string.ab_repeat_fastseek_warning, false)
}
abRepeatAddMarker.setOnClickListener(player)
hudBinding.orientationToggle.setOnClickListener(if (enabled) player else null)
hudBinding.orientationToggle.setOnLongClickListener(if (enabled) player else null)

Loading…
Cancel
Save