[Android] Make the incognito playback speed persistent upon app restart
Nicolas Pomepuy
git at videolan.org
Wed Mar 5 14:33:40 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed Mar 5 13:30:45 2025 +0100| [46886cc2ee14bfbde259198740f218bdfb999a84] | committer: Nicolas Pomepuy
Make the incognito playback speed persistent upon app restart
> https://code.videolan.org/videolan/vlc-android/commit/46886cc2ee14bfbde259198740f218bdfb999a84
---
application/resources/src/main/res/values/strings.xml | 2 +-
.../tools/src/main/java/org/videolan/tools/Settings.kt | 2 ++
.../src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt | 8 ++++++--
.../vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt | 13 +++++++++----
.../src/org/videolan/vlc/media/PlaylistManager.kt | 6 +++---
5 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index cbbc1cd5a7..dd4759358d 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -201,7 +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_all_incognito">You are in incognito mode. The speed will revert to normal when you leave incognito mode.</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/tools/src/main/java/org/videolan/tools/Settings.kt b/application/tools/src/main/java/org/videolan/tools/Settings.kt
index 42d2e8f69c..506b801797 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -199,6 +199,8 @@ const val KEY_PLAYBACK_SPEED_VIDEO_GLOBAL = "playback_speed_video_global"
const val KEY_PLAYBACK_SPEED_AUDIO_GLOBAL = "playback_speed_audio_global"
const val KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE = "playback_speed_video_global_value"
const val KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE = "playback_speed_audio_global_value"
+const val KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE = "incognito_playback_speed_video_global_value"
+const val KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE = "incognito_playback_speed_audio_global_value"
const val KEY_VIDEO_APP_SWITCH = "video_action_switch"
const val VIDEO_TRANSITION_SHOW = "video_transition_show"
const val VIDEO_HUD_TIMEOUT = "video_hud_timeout_in_s"
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 6223b845cc..838093c176 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
@@ -32,6 +32,8 @@ import android.widget.SeekBar
import androidx.core.content.edit
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.tools.KEY_INCOGNITO
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE
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
@@ -155,7 +157,7 @@ class PlaybackSpeedDialog : PlaybackBottomSheetDialogFragment(), PlaybackService
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
+ settings.getBoolean(KEY_INCOGNITO, false) -> settings.getFloat(if (forVideo) KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1F)
else -> settings.getFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1F)
}
changeSpeedTo(newValue)
@@ -231,7 +233,9 @@ class PlaybackSpeedDialog : PlaybackBottomSheetDialogFragment(), PlaybackService
getCurrentMedia()?.setStringMeta(MediaWrapper.META_SPEED, newValue.toString())
} else {
if (settings.getBoolean(KEY_INCOGNITO, false)) {
- if (forVideo) PlaylistManager.incognitoModeVideoSpeed = newValue else PlaylistManager.incognitoModeAudioSpeed = newValue
+ settings.edit {
+ putFloat(if (forVideo) KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, newValue)
+ }
} else
settings.edit {
putFloat(if (forVideo) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, newValue)
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 602c261129..49cb618a61 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
@@ -64,6 +64,7 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.view.ActionMode
import androidx.cardview.widget.CardView
import androidx.core.content.ContextCompat
+import androidx.core.content.edit
import androidx.core.content.getSystemService
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
@@ -131,6 +132,8 @@ import org.videolan.resources.util.launchForeground
import org.videolan.tools.BitmapCache
import org.videolan.tools.KEY_APP_THEME
import org.videolan.tools.KEY_INCOGNITO
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE
import org.videolan.tools.MultiSelectHelper
import org.videolan.tools.Settings
import org.videolan.tools.dp
@@ -158,7 +161,6 @@ 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
@@ -559,11 +561,14 @@ object UiTools {
*/
fun updateIncognitoMode(activity: FragmentActivity, item: MenuItem): Boolean {
if (activity.showPinIfNeeded()) return false
- Settings.getInstance(activity).putSingle(KEY_INCOGNITO, !Settings.getInstance(activity).getBoolean(KEY_INCOGNITO, false))
+ val settings = Settings.getInstance(activity)
+ settings.putSingle(KEY_INCOGNITO, !settings.getBoolean(KEY_INCOGNITO, false))
item.isChecked = !item.isChecked
if (!item.isChecked) {
- PlaylistManager.incognitoModeVideoSpeed = 1F
- PlaylistManager.incognitoModeAudioSpeed = 1F
+ settings.edit {
+ remove(KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE)
+ remove(KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE)
+ }
}
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 a6cd182c35..f34b15965a 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
@@ -58,6 +58,8 @@ import org.videolan.tools.HTTP_USER_AGENT
import org.videolan.tools.KEY_AUDIO_CONFIRM_RESUME
import org.videolan.tools.KEY_AUDIO_FORCE_SHUFFLE
import org.videolan.tools.KEY_INCOGNITO
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE
+import org.videolan.tools.KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE
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
@@ -119,8 +121,6 @@ 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() }
@@ -747,7 +747,7 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
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
+ incognitoMode && playbackSpeedModeAll -> settings.getFloat(if (player.isVideoPlaying()) KEY_INCOGNITO_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_INCOGNITO_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1.0f)
//restore all
playbackSpeedModeAll -> settings.getFloat(if (player.isVideoPlaying()) KEY_PLAYBACK_SPEED_VIDEO_GLOBAL_VALUE else KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE, 1.0f)
incognitoMode -> 1F
More information about the Android
mailing list