[Android] Make the incognito mode playback speed for all not sticky

Nicolas Pomepuy git at videolan.org
Wed Mar 5 14:33:40 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Mar  4 07:20:07 2025 +0100| [3c3c5594e386e4f1a3c40a2741b29cc0f4621a2d] | committer: Nicolas Pomepuy

Make the incognito mode playback speed for all not sticky

> https://code.videolan.org/videolan/vlc-android/commit/3c3c5594e386e4f1a3c40a2741b29cc0f4621a2d
---

 .../resources/src/main/res/values/strings.xml      |  1 +
 .../vlc/gui/dialogs/PlaybackSpeedDialog.kt         | 27 ++++++++++++++--------
 .../src/org/videolan/vlc/gui/helpers/UiTools.kt    |  5 ++++
 .../src/org/videolan/vlc/media/PlaylistManager.kt  | 12 ++++++----
 4 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index 3e09701a2c..cbbc1cd5a7 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -201,6 +201,7 @@
     <string name="playback_speed_all_tracks">All tracks</string>
     <string name="playback_speed_explanation_all_videos">The speed will be applied to all videos.\nIndividual videos\' playback speed will be ignored.</string>
     <string name="playback_speed_explanation_all_tracks">The speed will be applied to all tracks.\nIndividual tracks\' playback speed will be ignored.</string>
+    <string name="playback_speed_explanation_all_incognito">You are in incognito mode. The speed will revert to normal if you leave incognito mode or the app is closed.</string>
     <string name="playback_speed_explanation_one_video">The speed will be applied to this video only</string>
     <string name="playback_speed_explanation_one_track">The speed will be applied to this track only</string>
     <string name="audio_playback_speed_global">Use the global playback speed</string>
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
index 680fe90b75..6223b845cc 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
@@ -30,11 +30,8 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.SeekBar
 import androidx.core.content.edit
-import androidx.lifecycle.lifecycleScope
-import kotlinx.coroutines.flow.onEach
-import org.videolan.libvlc.MediaPlayer
-import org.videolan.libvlc.interfaces.IMedia
 import org.videolan.medialibrary.interfaces.media.MediaWrapper
+import org.videolan.tools.KEY_INCOGNITO
 import org.videolan.tools.KEY_PLAYBACK_SPEED_AUDIO_GLOBAL
 import org.videolan.tools.KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE
 import org.videolan.tools.KEY_PLAYBACK_SPEED_VIDEO_GLOBAL
@@ -48,7 +45,6 @@ import org.videolan.vlc.gui.helpers.OnRepeatListenerKey
 import org.videolan.vlc.gui.helpers.OnRepeatListenerTouch
 import org.videolan.vlc.media.PlaylistManager
 import org.videolan.vlc.util.isSchemeStreaming
-import org.videolan.vlc.util.launchWhenStarted
 import kotlin.math.ln
 import kotlin.math.pow
 
@@ -156,9 +152,12 @@ class PlaybackSpeedDialog : PlaybackBottomSheetDialogFragment(), PlaybackService
                 }
                 R.id.all_media -> {
                     settings.edit(commit = true) {
-                        putBoolean(if(forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL, true)
+                        putBoolean(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL, true)
+                    }
+                    val newValue = when {
+                        settings.getBoolean(KEY_INCOGNITO, false) -> if (forVideo) PlaylistManager.incognitoModeVideoSpeed else PlaylistManager.incognitoModeAudioSpeed
+                        else -> settings.getFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1F)
                     }
-                    val newValue = settings.getFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1F)
                     changeSpeedTo(newValue)
                 }
             }
@@ -192,6 +191,11 @@ class PlaybackSpeedDialog : PlaybackBottomSheetDialogFragment(), PlaybackService
      */
     private fun updateExplanation() {
         binding.speedModeExplanation.text = when {
+            binding.toggleButton.checkedButtonId == R.id.all_media && settings.getBoolean(KEY_INCOGNITO, false) -> buildString {
+                append(if (forVideo) getString(R.string.playback_speed_explanation_all_videos) else getString(R.string.playback_speed_explanation_all_tracks) )
+                append("\n\n")
+                append(getString(R.string.playback_speed_explanation_all_incognito))
+            }
             binding.toggleButton.checkedButtonId == R.id.all_media -> if (forVideo) getString(R.string.playback_speed_explanation_all_videos) else getString(R.string.playback_speed_explanation_all_tracks)
             else -> if (forVideo) getString(R.string.playback_speed_explanation_one_video) else getString(R.string.playback_speed_explanation_one_track)
         }
@@ -226,9 +230,12 @@ class PlaybackSpeedDialog : PlaybackBottomSheetDialogFragment(), PlaybackService
         if (binding.toggleButton.checkedButtonId == R.id.this_media) {
             getCurrentMedia()?.setStringMeta(MediaWrapper.META_SPEED, newValue.toString())
         } else {
-            settings.edit {
-                putFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, newValue)
-            }
+            if (settings.getBoolean(KEY_INCOGNITO, false)) {
+                if (forVideo) PlaylistManager.incognitoModeVideoSpeed = newValue else PlaylistManager.incognitoModeAudioSpeed = newValue
+            } else
+                settings.edit {
+                    putFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, newValue)
+                }
         }
         playbackService!!.setRate(newValue, true)
        if (!preventChangeProgressbar)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt b/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
index e4b1a03161..602c261129 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
@@ -158,6 +158,7 @@ import org.videolan.vlc.gui.helpers.hf.PinCodeDelegate
 import org.videolan.vlc.gui.helpers.hf.checkPIN
 import org.videolan.vlc.gui.preferences.PreferencesActivity
 import org.videolan.vlc.media.MediaUtils
+import org.videolan.vlc.media.PlaylistManager
 import org.videolan.vlc.media.getAll
 import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
 import org.videolan.vlc.util.FileUtils
@@ -560,6 +561,10 @@ object UiTools {
         if (activity.showPinIfNeeded()) return false
         Settings.getInstance(activity).putSingle(KEY_INCOGNITO, !Settings.getInstance(activity).getBoolean(KEY_INCOGNITO, false))
         item.isChecked = !item.isChecked
+        if (!item.isChecked) {
+            PlaylistManager.incognitoModeVideoSpeed = 1F
+            PlaylistManager.incognitoModeAudioSpeed = 1F
+        }
         return true
     }
 
diff --git a/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt b/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
index e6c56501fd..a6cd182c35 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
@@ -119,6 +119,8 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
         fun hasMedia() = mediaList.size() != 0
         val repeating = MutableStateFlow(PlaybackStateCompat.REPEAT_MODE_NONE)
         var playingAsAudio = false
+        var incognitoModeVideoSpeed = 1f
+        var incognitoModeAudioSpeed = 1f
     }
 
     private val medialibrary by lazy(LazyThreadSafetyMode.NONE) { Medialibrary.getInstance() }
@@ -742,13 +744,13 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
      * @param media
      */
     private fun restoreSpeed(media: MediaWrapper) {
+        val incognitoMode = settings.getBoolean(KEY_INCOGNITO, false)
+        val playbackSpeedModeAll = settings.getBoolean(if (player.isVideoPlaying()) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL, false)
         val playbackRate = when {
+            incognitoMode && playbackSpeedModeAll -> if (player.isVideoPlaying())  incognitoModeVideoSpeed else incognitoModeAudioSpeed
             //restore all
-            settings.getBoolean(
-                if (player.isVideoPlaying()) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL,
-                false
-            ) -> settings.getFloat(if (player.isVideoPlaying()) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1.0f)
-            settings.getBoolean(KEY_INCOGNITO, false) -> 1F
+            playbackSpeedModeAll -> settings.getFloat(if (player.isVideoPlaying()) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1.0f)
+            incognitoMode -> 1F
             //restore one
             else -> try {
                 media.getMetaString(MediaWrapper.META_SPEED).toFloat()



More information about the Android mailing list