[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