[Android] Manage back press for the MainActivity

Nicolas Pomepuy git at videolan.org
Fri Aug 22 08:01:34 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jul 28 11:21:49 2025 +0200| [7a73ec9a0c3c2d591e4bbb3c78221a73bdae74ff] | committer: Duncan McNamara

Manage back press for the MainActivity

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

 .../src/org/videolan/vlc/gui/MainActivity.kt       | 34 +++++++---------------
 1 file changed, 11 insertions(+), 23 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 d6fca2789b..c3299027ae 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
@@ -21,18 +21,18 @@
 package org.videolan.vlc.gui
 
 import android.annotation.SuppressLint
-import android.annotation.TargetApi
 import android.app.Activity
 import android.app.AlertDialog
 import android.content.Intent
 import android.content.pm.PackageManager
-import android.os.Build
 import android.os.Bundle
 import android.view.KeyEvent
 import android.view.Menu
 import android.view.MenuItem
 import android.view.View
 import android.widget.ImageView
+import androidx.activity.OnBackPressedCallback
+import androidx.activity.addCallback
 import androidx.appcompat.view.ActionMode
 import androidx.core.content.ContextCompat
 import androidx.core.net.toUri
@@ -69,7 +69,6 @@ import org.videolan.vlc.BuildConfig
 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.dialogs.NotificationPermissionManager
 import org.videolan.vlc.gui.dialogs.PermissionListDialog
 import org.videolan.vlc.gui.dialogs.UPDATE_DATE
@@ -100,6 +99,7 @@ private const val TAG = "VLC/MainActivity"
 class MainActivity : ContentActivity(),
         INavigator by Navigator()
 {
+    private lateinit var backPressedCallback: OnBackPressedCallback
     var refreshing: Boolean = false
         set(value) {
             field = value
@@ -200,8 +200,16 @@ class MainActivity : ContentActivity(),
             }
         }
         settings.putSingle(KEY_OBSOLETE_RESTORE_FILE_WARNED, true)
+        backPressedCallback = onBackPressedDispatcher.addCallback(enabled = true) {
+            if (AndroidUtil.isNougatOrLater && isInMultiWindowMode) {
+                UiTools.confirmExit(this at MainActivity)
+                return at addCallback
+            }
+        }
+        backPressedCallback.isEnabled = AndroidUtil.isNougatOrLater && isInMultiWindowMode
     }
 
+
     override fun onResume() {
         super.onResume()
         //Only the partial permission is granted for Android 11+
@@ -268,26 +276,6 @@ class MainActivity : ContentActivity(),
         reloadPreferences()
     }
 
-    @TargetApi(Build.VERSION_CODES.N)
-    override fun onBackPressed() {
-
-
-        /* Close playlist search if open or Slide down the audio player if it is shown entirely. */
-        if (isAudioPlayerReady && (audioPlayer.backPressed() || slideDownAudioPlayer()))
-            return
-
-        // If it's the directory view, a "backpressed" action shows a parent.
-        val fragment = currentFragment
-        if (fragment is BaseBrowserFragment && fragment.goBack()) {
-            return
-        }
-        if (AndroidUtil.isNougatOrLater && isInMultiWindowMode) {
-            UiTools.confirmExit(this)
-            return
-        }
-        finish()
-    }
-
     override fun startSupportActionMode(callback: ActionMode.Callback): ActionMode? {
         appBarLayout.setExpanded(true)
         return super.startSupportActionMode(callback)



More information about the Android mailing list