[Android] Warn the user when their settings export file is obsolete

Nicolas Pomepuy git at videolan.org
Wed Jul 23 11:41:55 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Jul 10 15:10:30 2025 +0200| [c59fd4c1c2dba0dc5772f95c99b6ff1f768ff63a] | committer: Nicolas Pomepuy

Warn the user when their settings export file is obsolete

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

 .../resources/src/main/res/values/strings.xml      |  1 +
 .../src/main/java/org/videolan/tools/Settings.kt   |  1 +
 .../vlc-android/res/xml/preferences_adv.xml        |  4 ++--
 .../src/org/videolan/vlc/gui/MainActivity.kt       | 26 +++++++++++++++++++++-
 4 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index 8ae58635a3..970799a263 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -1372,6 +1372,7 @@
     <string name="export_settings">Export settings</string>
     <string name="restore_settings_summary">Restore your settings from a previous export</string>
     <string name="restore_settings">Restore settings</string>
+    <string name="obsolete_restore_settings">Your settings export is obsolete. Please export them again</string>
     <string name="export_settings_success">Settings exported successfully to the internal storage root</string>
     <string name="export_settings_failure">Something went wrong while exporting your settings</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 99ca7b29f1..451c947fa7 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -239,6 +239,7 @@ const val ALLOW_FOLD_AUTO_LAYOUT = "allow_fold_auto_layout"
 const val HINGE_ON_RIGHT = "hinge_on_right"
 const val AUDIO_HINGE_ON_RIGHT = "audio_hinge_on_right"
 const val TV_FOLDERS_FIRST = "tv_folders_first"
+const val KEY_OBSOLETE_RESTORE_FILE_WARNED = "obsolete_restore_file_warned"
 
 const val VIDEO_PAUSED = "VideoPaused"
 const val VIDEO_SPEED = "VideoSpeed"
diff --git a/application/vlc-android/res/xml/preferences_adv.xml b/application/vlc-android/res/xml/preferences_adv.xml
index 421dcb6c4e..0b9757bfeb 100644
--- a/application/vlc-android/res/xml/preferences_adv.xml
+++ b/application/vlc-android/res/xml/preferences_adv.xml
@@ -69,13 +69,13 @@
                 android:key="clear_history"
                 android:title="@string/clear_playback_history" />
 
-        <Preference
+        <PreferenceScreen
                 android:enabled="true"
                 android:key="export_settings"
                 android:summary="@string/export_settings_summary"
                 android:title="@string/export_settings" />
 
-        <Preference
+        <PreferenceScreen
                 android:enabled="true"
                 android:key="restore_settings"
                 android:summary="@string/restore_settings_summary"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
index f1db4dcd8d..517c17bcfc 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
@@ -28,6 +28,7 @@ import android.content.Intent
 import android.content.pm.PackageManager
 import android.os.Build
 import android.os.Bundle
+import android.util.Log
 import android.view.KeyEvent
 import android.view.Menu
 import android.view.MenuItem
@@ -37,18 +38,25 @@ import androidx.appcompat.view.ActionMode
 import androidx.core.content.ContextCompat
 import androidx.core.os.bundleOf
 import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
 import androidx.lifecycle.lifecycleScope
+import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import org.videolan.libvlc.util.AndroidUtil
 import org.videolan.medialibrary.interfaces.Medialibrary
 import org.videolan.resources.ACTIVITY_RESULT_OPEN
 import org.videolan.resources.ACTIVITY_RESULT_PREFERENCES
 import org.videolan.resources.ACTIVITY_RESULT_SECONDARY
+import org.videolan.resources.AndroidDevices
 import org.videolan.resources.CRASH_HAPPENED
+import org.videolan.resources.EXPORT_SETTINGS_FILE
 import org.videolan.resources.EXTRA_TARGET
 import org.videolan.tools.KEY_INCOGNITO
 import org.videolan.tools.KEY_LAST_SESSION_CRASHED
 import org.videolan.tools.KEY_MEDIALIBRARY_AUTO_RESCAN
+import org.videolan.tools.KEY_METERED_CONNECTION
+import org.videolan.tools.KEY_OBSOLETE_RESTORE_FILE_WARNED
 import org.videolan.tools.KEY_SHOW_UPDATE
 import org.videolan.tools.PERMISSION_NEVER_ASK
 import org.videolan.tools.PERMISSION_NEXT_ASK
@@ -73,6 +81,8 @@ import org.videolan.vlc.gui.helpers.INavigator
 import org.videolan.vlc.gui.helpers.Navigator
 import org.videolan.vlc.gui.helpers.UiTools
 import org.videolan.vlc.gui.helpers.UiTools.isTablet
+import org.videolan.vlc.gui.preferences.PreferencesActivity
+import org.videolan.vlc.gui.preferences.search.PreferenceParser
 import org.videolan.vlc.gui.video.VideoGridFragment
 import org.videolan.vlc.interfaces.Filterable
 import org.videolan.vlc.interfaces.IRefreshable
@@ -84,6 +94,7 @@ import org.videolan.vlc.util.Util
 import org.videolan.vlc.util.WhatsNewManager
 import org.videolan.vlc.util.WidgetMigration
 import org.videolan.vlc.util.getScreenWidth
+import java.io.File
 import java.util.concurrent.TimeUnit
 
 private const val TAG = "VLC/MainActivity"
@@ -171,7 +182,20 @@ class MainActivity : ContentActivity(),
 
             }
         }
-
+        if (!settings.getBoolean(KEY_OBSOLETE_RESTORE_FILE_WARNED, false)) {
+            lifecycleScope.launch {
+                val fileExists = withContext(Dispatchers.IO) {
+                    File(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY + EXPORT_SETTINGS_FILE).exists()
+                }
+                if (!fileExists) return at launch
+                UiTools.snackerConfirm(this at MainActivity, getString(R.string.obsolete_restore_settings), confirmMessage = R.string.ok, indefinite = true) {
+                    lifecycleScope.launch {
+                        PreferencesActivity.launchWithPref(this at MainActivity, "export_settings")
+                    }
+                }
+            }
+        }
+        settings.putSingle(KEY_OBSOLETE_RESTORE_FILE_WARNED, true)
     }
 
     override fun onResume() {



More information about the Android mailing list