[Android] Android Auto: force showing the speed action if it has already been shown for this media

Nicolas Pomepuy git at videolan.org
Tue Feb 25 06:19:24 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Feb 20 11:36:42 2025 +0100| [21b6669b4129c2530b5bc3dff696f70e2d62dd6f] | committer: Duncan McNamara

Android Auto: force showing the speed action if it has already been shown for this media

It prevents the action from disappearing when reaching 1.0x which feels kind of weird/buggy

> https://code.videolan.org/videolan/vlc-android/commit/21b6669b4129c2530b5bc3dff696f70e2d62dd6f
---

 .../vlc-android/src/org/videolan/vlc/PlaybackService.kt    | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt b/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
index 6f5f0924f6..f620bf15ef 100644
--- a/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
+++ b/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
@@ -264,6 +264,13 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner, CoroutineSc
      */
     lateinit var mediaBrowserCompat:MediaBrowserCompat
 
+    /**
+     * Once a media has shown the speed action once,
+     * continue showing it until the media changes even if the other conditions are not met
+     */
+    private var forceAutoShowSpeed:Pair<String?, Boolean> = Pair(null, false)
+
+
     private val receiver = object : BroadcastReceiver() {
         private var wasPlaying = false
         override fun onReceive(context: Context, intent: Intent) {
@@ -1336,7 +1343,10 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner, CoroutineSc
     }
 
     private fun addCustomSpeedActions(pscb: PlaybackStateCompat.Builder, showSpeedActions: Boolean = true) {
-        if (speed != 1.0F || showSpeedActions) {
+        if (speed != 1.0F || showSpeedActions || ( currentMediaWrapper?.uri != null && forceAutoShowSpeed.first == currentMediaWrapper?.uri?.toString() && forceAutoShowSpeed.second)) {
+            currentMediaWrapper?.uri?.let {
+                forceAutoShowSpeed = Pair(it.toString(), true)
+            }
             val speedIcons = hashMapOf(
                     0.50f to R.drawable.ic_auto_speed_0_50,
                     0.80f to R.drawable.ic_auto_speed_0_80,
@@ -1349,7 +1359,7 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner, CoroutineSc
             val speedResId = speedIcons[speedIcons.keys.minByOrNull { (speed - it).absoluteValue }]
                     ?: R.drawable.ic_auto_speed
             pscb.addCustomAction(CUSTOM_ACTION_SPEED, getString(R.string.playback_speed), speedResId)
-        }
+        } else forceAutoShowSpeed = Pair(null, false)
     }
 
     fun notifyTrackChanged() {



More information about the Android mailing list