From e13f0182c32272dbb65e2372543f14782f3fb92f Mon Sep 17 00:00:00 2001 From: Werner Rabl Date: Thu, 10 Sep 2026 12:42:57 +0200 Subject: [PATCH] fix: back button moves up a folder instead of closing app --- .../files/filelist/MainFileListFragment.kt | 4 ++-- .../android/ui/activity/FileDisplayActivity.kt | 17 +++++++++++++++++ .../android/ui/activity/FolderPickerActivity.kt | 13 +++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/opencloudApp/src/main/java/eu/opencloud/android/presentation/files/filelist/MainFileListFragment.kt b/opencloudApp/src/main/java/eu/opencloud/android/presentation/files/filelist/MainFileListFragment.kt index 21acbf63bb..b14dd5e2f7 100644 --- a/opencloudApp/src/main/java/eu/opencloud/android/presentation/files/filelist/MainFileListFragment.kt +++ b/opencloudApp/src/main/java/eu/opencloud/android/presentation/files/filelist/MainFileListFragment.kt @@ -1008,6 +1008,7 @@ class MainFileListFragment : Fragment(), (newFileListOption.isSharedByLink() && currentFolder.remotePath != ROOT_PATH) if (!isFabSupportedView || isPickingAFolder() || (!currentFolder.hasAddFilePermission && !currentFolder.hasAddSubdirectoriesPermission)) { + collapseFab() toggleFabVisibility(false) } else { toggleFabVisibility(true) @@ -1128,10 +1129,9 @@ class MainFileListFragment : Fragment(), fabNewfile.isFocusable = false fabNewshortcut.isFocusable = false } - } - fun isFabExpanded() = binding.fabMain.isExpanded + fun isFabExpanded() = binding.fabMain.isVisible && binding.fabMain.isExpanded fun setFabMainContentDescription() { binding.fabMain.findViewById(com.getbase.floatingactionbutton.R.id.fab_expand_menu_button).contentDescription = diff --git a/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FileDisplayActivity.kt b/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FileDisplayActivity.kt index 9515048ae1..281a2ce9ad 100644 --- a/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FileDisplayActivity.kt +++ b/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FileDisplayActivity.kt @@ -50,6 +50,7 @@ import android.widget.FrameLayout import android.widget.LinearLayout import android.widget.ScrollView import android.widget.TextView +import androidx.activity.OnBackPressedCallback import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat @@ -202,6 +203,17 @@ class FileDisplayActivity : FileActivity(), private var isLightUser = false private var isMultiPersonal = false + private val onBackPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + onBackPressed() + } + } + + fun addOnBackPressedCallback() { + onBackPressedCallback.remove() + onBackPressedDispatcher.addCallback(this, onBackPressedCallback) + } + override fun onCreate(savedInstanceState: Bundle?) { Timber.v("onCreate() start") @@ -307,6 +319,8 @@ class FileDisplayActivity : FileActivity(), } } + addOnBackPressedCallback() + Timber.v("onCreate() end") } @@ -536,6 +550,7 @@ class FileDisplayActivity : FileActivity(), transaction.replace(R.id.right_fragment_container, fragment, TAG_SECOND_FRAGMENT) transaction.commitNow() updateFragmentsVisibility(true) + mainFileListFragment?.collapseFab() } private fun showBottomNavBar(show: Boolean) { @@ -747,6 +762,8 @@ class FileDisplayActivity : FileActivity(), fileOperationsViewModel.performOperation(copyOperation) } + + // This is no longer directly called in newer Android versions, see also onBackPressedCallback. override fun onBackPressed() { val isFabOpen = mainFileListFragment?.isFabExpanded() ?: false diff --git a/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FolderPickerActivity.kt b/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FolderPickerActivity.kt index fa244ca3e6..ad6fa7f71f 100644 --- a/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FolderPickerActivity.kt +++ b/opencloudApp/src/main/java/eu/opencloud/android/ui/activity/FolderPickerActivity.kt @@ -29,6 +29,7 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View +import androidx.activity.OnBackPressedCallback import androidx.annotation.StringRes import androidx.core.view.isVisible import androidx.core.view.updatePadding @@ -56,7 +57,16 @@ open class FolderPickerActivity : FileActivity(), private lateinit var binding: FilesFolderPickerBinding + private val onBackPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + onBackPressed() + } + } + fun addOnBackPressedCallback() { + onBackPressedCallback.remove() + onBackPressedDispatcher.addCallback(this, onBackPressedCallback) + } override fun onCreate(savedInstanceState: Bundle?) { Timber.d("onCreate() start") @@ -134,6 +144,8 @@ open class FolderPickerActivity : FileActivity(), initAndShowListOfFilesFragment() } + addOnBackPressedCallback() + Timber.d("onCreate() end") } @@ -182,6 +194,7 @@ open class FolderPickerActivity : FileActivity(), return super.onOptionsItemSelected(item) } + // This is no longer directly called in newer Android versions, see also onBackPressedCallback. override fun onBackPressed() { val currentDirDisplayed = mainFileListFragment?.getCurrentFile() // If current file is null (we are in the spaces list, for example), close the activity