From 3a66b8ea11166b6c620914cdd46bef188ea69487 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Thu, 10 Sep 2026 11:58:25 +0200 Subject: [PATCH 1/3] Show only offline-available actions when offline, and align shown actions between root and subfolders Signed-off-by: daniele-verducci --- .../android/ui/fragment/OCFileListBottomSheetDialog.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt index 1d049bd71c45..88c0dfd3e1d2 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt @@ -420,17 +420,11 @@ class OCFileListBottomSheetDialog( private fun filterActionsForOfflineOperations() { fileActivity.connectivityService.isNetworkAndServerAvailable { result: Boolean? -> - if (file.isRootDirectory) { - return@isNetworkAndServerAvailable - } - if (!result!! || file.isOfflineOperation) { binding.run { menuCreateRichWorkspace.visibility = View.GONE - menuUploadFromApp.visibility = View.GONE - menuDirectCameraUpload.visibility = View.GONE - menuScanDocUpload.visibility = View.GONE creatorsOverviewContainer.visibility = View.GONE + menuEncryptedMkdir.visibility = View.GONE } } } From 700a813bb27093e4e407d135c23f24cacb3704b9 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Thu, 10 Sep 2026 16:00:34 +0200 Subject: [PATCH 2/3] Fixed edge case Signed-off-by: daniele-verducci --- .../android/ui/fragment/OCFileListBottomSheetDialog.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt index 88c0dfd3e1d2..ce32c6951519 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt @@ -419,8 +419,10 @@ class OCFileListBottomSheetDialog( } private fun filterActionsForOfflineOperations() { - fileActivity.connectivityService.isNetworkAndServerAvailable { result: Boolean? -> - if (!result!! || file.isOfflineOperation) { + fileActivity.connectivityService.isNetworkAndServerAvailable { available: Boolean? -> + // root directory doesn't have a remote_id and thus always reports as offlineOperation + val isOfflineOperation = file.isOfflineOperation && !file.isRootDirectory + if (available != true || isOfflineOperation) { binding.run { menuCreateRichWorkspace.visibility = View.GONE creatorsOverviewContainer.visibility = View.GONE From 5c294f5fa74ac0cd597182737120f2616b96f3a0 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Mon, 14 Sep 2026 15:31:07 +0200 Subject: [PATCH 3/3] Use suspend functions Signed-off-by: daniele-verducci --- .../fragment/OCFileListBottomSheetDialog.kt | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt index ce32c6951519..6f9eb6e22a85 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt @@ -20,6 +20,7 @@ import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat import androidx.core.view.isEmpty import androidx.core.view.isNotEmpty +import androidx.lifecycle.lifecycleScope import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton import com.google.gson.Gson @@ -30,6 +31,7 @@ import com.nextcloud.client.di.Injectable import com.nextcloud.client.documentscan.AppScanOptionalFeature import com.nextcloud.utils.BuildHelper.isFlavourGPlay import com.nextcloud.utils.EditorUtils +import com.nextcloud.utils.extensions.isNetworkAndServerAvailableSuspended import com.nextcloud.utils.extensions.isTemplateAvailable import com.nextcloud.utils.extensions.setVisibleIf import com.owncloud.android.MainApp @@ -44,6 +46,9 @@ import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.PermissionUtil import com.owncloud.android.utils.theme.ThemeUtils import com.owncloud.android.utils.theme.ViewThemeUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext @Suppress("LongParameterList") class OCFileListBottomSheetDialog( @@ -419,16 +424,20 @@ class OCFileListBottomSheetDialog( } private fun filterActionsForOfflineOperations() { - fileActivity.connectivityService.isNetworkAndServerAvailable { available: Boolean? -> - // root directory doesn't have a remote_id and thus always reports as offlineOperation - val isOfflineOperation = file.isOfflineOperation && !file.isRootDirectory - if (available != true || isOfflineOperation) { - binding.run { - menuCreateRichWorkspace.visibility = View.GONE - creatorsOverviewContainer.visibility = View.GONE - menuEncryptedMkdir.visibility = View.GONE - } + lifecycleScope.launch { + val available = fileActivity.connectivityService.isNetworkAndServerAvailableSuspended() + if (available && (!file.isOfflineOperation || file.isRootDirectory)) { + return@launch } + hideCreationOptions() + } + } + + private suspend fun hideCreationOptions() = withContext(Dispatchers.Main) { + binding.run { + menuCreateRichWorkspace.visibility = View.GONE + creatorsOverviewContainer.visibility = View.GONE + menuEncryptedMkdir.visibility = View.GONE } }