[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