[Android] Get rid of the DayNight theme for newer APIS and migrate the value

Nicolas Pomepuy git at videolan.org
Mon Jul 28 05:42:04 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed May 21 14:48:53 2025 +0200| [f99fc3b52e95b96f354d65369beec443f67fd412] | committer: Nicolas Pomepuy

Get rid of the DayNight theme for newer APIS and migrate the value

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

 application/resources/src/main/res/values/arrays.xml | 14 +++++++++++---
 .../vlc/gui/onboarding/OnboardingActivity.kt         |  3 ++-
 .../videolan/vlc/gui/preferences/PreferencesUi.kt    |  7 +++++++
 .../src/org/videolan/vlc/util/VersionMigration.kt    | 20 ++++++++++++++++++++
 4 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/application/resources/src/main/res/values/arrays.xml b/application/resources/src/main/res/values/arrays.xml
index b950e24ea4..b5e67988f8 100644
--- a/application/resources/src/main/res/values/arrays.xml
+++ b/application/resources/src/main/res/values/arrays.xml
@@ -616,15 +616,23 @@
 
     <string-array name="daynight_mode_entries">
         <item>@string/daynight_follow_system_title</item>
-        <!--item>@string/daynight_battery_title</item-->
-        <item>@string/daynight_title</item>
         <item>@string/light_theme</item>
         <item>@string/enable_black_theme</item>
     </string-array>
 
     <string-array name="daynight_mode_values">
         <item>-1</item>
-        <!--item>3</item-->
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="daynight_mode_legacy_entries">
+        <item>@string/daynight_title</item>
+        <item>@string/light_theme</item>
+        <item>@string/enable_black_theme</item>
+    </string-array>
+
+    <string-array name="daynight_mode_legacy_values">
         <item>0</item>
         <item>1</item>
         <item>2</item>
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
index 7f2603c0de..56b87b0cfd 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
@@ -21,6 +21,7 @@ import androidx.fragment.app.commit
 import androidx.lifecycle.lifecycleScope
 import kotlinx.coroutines.launch
 import org.videolan.resources.ACTIVITY_RESULT_PREFERENCES
+import org.videolan.resources.AndroidDevices
 import org.videolan.resources.EXTRA_FIRST_RUN
 import org.videolan.resources.EXTRA_UPGRADE
 import org.videolan.resources.PREF_FIRST_RUN
@@ -48,7 +49,7 @@ class OnboardingActivity : AppCompatActivity(), OnboardingFragmentListener {
     private lateinit var nextButton: Button
     private val viewModel: OnboardingViewModel by viewModels()
     override fun onCreate(savedInstanceState: Bundle?) {
-        enableEdgeToEdge()
+        if (AndroidDevices.canUseSystemNightMode()) enableEdgeToEdge()
         WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightNavigationBars = false
         WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = false
         super.onCreate(savedInstanceState)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
index cfb7b0e966..db9fec624f 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
@@ -107,6 +107,13 @@ class PreferencesUi : BasePreferenceFragment(), SharedPreferences.OnSharedPrefer
             }
             prefs.putSingle(KEY_APP_THEME, theme.toString())
         }
+
+        if (!AndroidDevices.canUseSystemNightMode()) {
+            val pref = findPreference<ListPreference>(KEY_APP_THEME)
+            pref?.entries = resources.getStringArray(R.array.daynight_mode_legacy_entries)
+            pref?.entryValues = resources.getStringArray(R.array.daynight_mode_legacy_values)
+
+        }
     }
 
     override fun onStart() {
diff --git a/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt b/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
index 7a1927d63f..a97d7a6103 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
@@ -36,6 +36,7 @@ import org.videolan.libvlc.MediaPlayer
 import org.videolan.medialibrary.interfaces.Medialibrary
 import org.videolan.medialibrary.interfaces.media.Playlist
 import org.videolan.resources.AndroidDevices
+import org.videolan.resources.AndroidDevices.canUseSystemNightMode
 import org.videolan.resources.util.getFromMl
 import org.videolan.tools.KEY_APP_THEME
 import org.videolan.tools.KEY_CURRENT_EQUALIZER_ID
@@ -91,6 +92,9 @@ object VersionMigration {
         val settings = restoringPrefs ?: Settings.getInstance(context)
         val lastVersion = forcedVersion ?: settings.getInt(KEY_CURRENT_SETTINGS_VERSION, 0)
         val lastMajorVersion = settings.getInt(KEY_CURRENT_MAJOR_VERSION, 3)
+
+        migrateSettings(settings)
+
         if (lastVersion < 1) {
             migrateToVersion1(settings)
         }
@@ -172,6 +176,22 @@ object VersionMigration {
         settings.putSingle(KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION, CURRENT_VERSION_LIBVLC)
     }
 
+    /**
+     * Migrate settings not depending on an app version upgrade
+     * It's useful for migration depending on System version upgrade for example
+     *
+     * @param settings
+     */
+    private fun migrateSettings(settings: SharedPreferences) {
+        Log.i(this::class.java.simpleName, "Starting migrateSettings")
+        //Force not using DayNight when Follow system is available
+        if (canUseSystemNightMode() && settings.contains("app_theme") && settings.getString("app_theme", "-1") == "0") {
+            settings.edit {
+                putString("app_theme",  "-1")
+            }
+        }
+    }
+
     private fun migrateToVersion1(settings: SharedPreferences) {
         Log.i(this::class.java.simpleName, "Migrating preferences to Version 1")
         settings.edit {



More information about the Android mailing list