[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