[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