[Android] Check settings restoration before warning the user

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed Jul 23 09:41:02 2025 +0200| [a6da59b74d8dc6f9ba6017ac6b7d397d77c6f650] | committer: Nicolas Pomepuy

Check settings restoration before warning the user

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

 .../src/org/videolan/vlc/gui/MainActivity.kt            | 17 +++++++++++++----
 .../vlc/gui/preferences/search/PreferenceParser.kt      | 12 ++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)

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 517c17bcfc..01cd6d6946 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
@@ -26,6 +26,7 @@ import android.app.Activity
 import android.app.AlertDialog
 import android.content.Intent
 import android.content.pm.PackageManager
+import android.net.Uri
 import android.os.Build
 import android.os.Bundle
 import android.util.Log
@@ -36,6 +37,7 @@ import android.view.View
 import android.widget.ImageView
 import androidx.appcompat.view.ActionMode
 import androidx.core.content.ContextCompat
+import androidx.core.net.toUri
 import androidx.core.os.bundleOf
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentActivity
@@ -72,6 +74,7 @@ import org.videolan.vlc.R
 import org.videolan.vlc.StartActivity
 import org.videolan.vlc.gui.audio.AudioBrowserFragment
 import org.videolan.vlc.gui.browser.BaseBrowserFragment
+import org.videolan.vlc.gui.browser.EXTRA_MRL
 import org.videolan.vlc.gui.dialogs.NotificationPermissionManager
 import org.videolan.vlc.gui.dialogs.PermissionListDialog
 import org.videolan.vlc.gui.dialogs.UPDATE_DATE
@@ -184,13 +187,19 @@ class MainActivity : ContentActivity(),
         }
         if (!settings.getBoolean(KEY_OBSOLETE_RESTORE_FILE_WARNED, false)) {
             lifecycleScope.launch {
+                val file = File(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY + EXPORT_SETTINGS_FILE)
                 val fileExists = withContext(Dispatchers.IO) {
-                    File(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY + EXPORT_SETTINGS_FILE).exists()
+                    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")
+                //check if file is restorable
+                try {
+                    PreferenceParser.checkRestoreFile(file.path.toUri())
+                } catch (_: Exception) {
+                    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")
+                        }
                     }
                 }
             }
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
index c8d7053d8a..370babaa15 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
@@ -468,6 +468,18 @@ object PreferenceParser {
         }
     }
 
+
+    suspend fun checkRestoreFile(file: Uri)= withContext(Dispatchers.IO) {
+        file.path?.let {
+            val changedPrefs = FileUtils.getStringFromFile(it)
+            val moshi = Moshi.Builder().build()
+            val adapter: JsonAdapter<SettingsBackup> = moshi.adapter(SettingsBackup::class.java)
+            val savedSettings = adapter.fromJson(changedPrefs)
+
+            if (savedSettings?.settings == null || savedSettings.version == 0) throw IllegalStateException("Invalid file")
+        }
+    }
+
     /**
      * Restore the preferences from a file
      *



More information about the Android mailing list