[Android] Ask the draw over permission after restoring the settings if needed

Nicolas Pomepuy git at videolan.org
Wed Mar 11 15:50:56 UTC 2026


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Feb 13 10:50:18 2026 +0100| [d90f52692a0d8057571d50e8079f84a0a528b8c1] | committer: Duncan McNamara

Ask the draw over permission after restoring the settings if needed

Fixes #3281

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

 .../vlc/gui/preferences/PreferencesAdvanced.kt     | 23 ++++++++++++++++++++--
 .../src/org/videolan/vlc/util/Permissions.kt       | 10 +++++++++-
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
index d32dea075e..80a28c8165 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
@@ -78,6 +78,7 @@ import org.videolan.tools.KEY_OPENGL
 import org.videolan.tools.KEY_PREFER_SMBV1
 import org.videolan.tools.KEY_QUICK_PLAY
 import org.videolan.tools.KEY_QUICK_PLAY_DEFAULT
+import org.videolan.tools.POPUP_FORCE_LEGACY
 import org.videolan.tools.RESULT_RESTART
 import org.videolan.tools.Settings
 import org.videolan.tools.putSingle
@@ -103,6 +104,7 @@ import org.videolan.vlc.isVLC4
 import org.videolan.vlc.providers.PickerType
 import org.videolan.vlc.util.AutoUpdate
 import org.videolan.vlc.util.FileUtils
+import org.videolan.vlc.util.Permissions
 import org.videolan.vlc.util.share
 import java.io.File
 import java.io.IOException
@@ -113,6 +115,7 @@ private const val RESULT_VALUE_CLEAR_MEDIA_DATABASE = 2
 private const val RESULT_VALUE_CLEAR_APP_DATA = 3
 class PreferencesAdvanced : BasePreferenceFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
 
+    private var needToRestartOnResume = false
     override fun getXml() =  R.xml.preferences_adv
 
     override fun getTitleId(): Int {
@@ -209,6 +212,17 @@ class PreferencesAdvanced : BasePreferenceFragment(), SharedPreferences.OnShared
         preferenceScreen.sharedPreferences!!.unregisterOnSharedPreferenceChangeListener(this)
     }
 
+    override fun onResume() {
+        if (needToRestartOnResume) {
+            lifecycleScope.launch {
+                VLCInstance.restart()
+                UiTools.restartDialog(requireActivity())
+            }
+            needToRestartOnResume = false
+        }
+        super.onResume()
+    }
+
     override fun onPreferenceTreeClick(preference: Preference): Boolean {
         if (preference.key == null)
             return false
@@ -378,8 +392,13 @@ class PreferencesAdvanced : BasePreferenceFragment(), SharedPreferences.OnShared
                             requireActivity(),
                                 data.getStringExtra(EXTRA_MRL)!!.toUri()
                         )
-                        VLCInstance.restart()
-                        UiTools.restartDialog(requireActivity())
+                        var continueRestart = true
+                        if (Settings.getInstance(requireActivity()).getBoolean(POPUP_FORCE_LEGACY, false) && !Permissions.canDrawOverlays(requireActivity()))
+                            continueRestart = !Permissions.checkDrawOverlaysPermission(requireActivity())
+                        if (continueRestart) {
+                            VLCInstance.restart()
+                            UiTools.restartDialog(requireActivity())
+                        } else needToRestartOnResume = true
                     } catch (e: Exception) {
                         Log.e("EqualizerSettings", "onActivityResult: ${e.message}", e)
                         UiTools.snacker(requireActivity(), getString(R.string.invalid_settings_file))
diff --git a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
index 300dbfa91f..3d695e4b8b 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
@@ -264,10 +264,18 @@ object Permissions {
             activity.requestStoragePermission(true, callback)
     }
 
-    fun checkDrawOverlaysPermission(activity: FragmentActivity) {
+    /**
+     * Check draw overlays permission
+     *
+     * @param activity the activity to check with
+     * @return true if the permission dialog has been opened
+     */
+    fun checkDrawOverlaysPermission(activity: FragmentActivity): Boolean {
         if (AndroidUtil.isMarshMallowOrLater && !canDrawOverlays(activity)) {
             showSettingsPermissionDialog(activity, PERMISSION_SYSTEM_DRAW_OVRLAYS)
+            return true
         }
+        return false
     }
 
     fun checkPiPPermission(activity: FragmentActivity) {



More information about the Android mailing list