[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