[Android] Fix ClassCastException before migrating the fast play setting
Nicolas Pomepuy
git at videolan.org
Mon Jul 21 15:36:02 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Jul 8 07:58:22 2025 +0200| [01a4d7a09273d9c1ff2bfd936fa015db30c9df90] | committer: Duncan McNamara
Fix ClassCastException before migrating the fast play setting
> https://code.videolan.org/videolan/vlc-android/commit/01a4d7a09273d9c1ff2bfd936fa015db30c9df90
---
.../main/java/org/videolan/mobile/app/AppSetupDelegate.kt | 1 +
.../tools/src/main/java/org/videolan/tools/Settings.kt | 14 +++++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt b/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
index fce3723c56..b902627f5e 100644
--- a/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
+++ b/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
@@ -123,6 +123,7 @@ class AppSetupDelegate : AppDelegate,
// init operations executed in background threads
private fun Context.backgroundInit() = AppScope.launch outerLaunch@ {
VersionMigration.migrateVersion(this at backgroundInit)
+ Settings.initPostMigration(this at backgroundInit)
launch(Dispatchers.IO) innerLaunch@ {
if (!VLCInstance.testCompatibleCPU(AppContextProvider.appContext)) return at innerLaunch
Dialog.setCallbacks(VLCInstance.getInstance(this at backgroundInit), DialogDelegate)
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 118cbfe0ef..a0092c1b66 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -62,10 +62,22 @@ object Settings : SingletonHolder<SharedPreferences, Context>({ init(it.applicat
incognitoMode = prefs.getBoolean(KEY_INCOGNITO, false)
safeMode = prefs.getBoolean(KEY_SAFE_MODE, false) && prefs.getString(KEY_SAFE_MODE_PIN, "")?.isNotBlank() == true
remoteAccessEnabled.postValue(prefs.getBoolean(KEY_ENABLE_REMOTE_ACCESS, false))
- fastplaySpeed = prefs.getInt(FASTPLAY_SPEED, 20) / 10f
return prefs
}
+ /**
+ * Init post migration: it can be useful when we migrate a preference by changing its type in [VersionMigration].
+ * When doing so, [init] will be called before the migration is done, resulting in a [ClassCastException].
+ * This method is called after the migration is done.
+ * Once a preference has been moved from [init] to [initPostMigration], it should never be put back in [init].
+ *
+ * @param context the context
+ */
+ fun initPostMigration(context: Context) {
+ val prefs = PreferenceManager.getDefaultSharedPreferences(context)
+ fastplaySpeed = prefs.getInt(FASTPLAY_SPEED, 20) / 10f
+ }
+
fun Context.isPinCodeSet() = Settings.getInstance(this).getString(KEY_SAFE_MODE_PIN, "")?.isNotBlank() == true
More information about the Android
mailing list