diff --git a/app/src/main/java/com/nextcloud/utils/EditorUtils.kt b/app/src/main/java/com/nextcloud/utils/EditorUtils.kt index 3c1630e64308..92315b914439 100644 --- a/app/src/main/java/com/nextcloud/utils/EditorUtils.kt +++ b/app/src/main/java/com/nextcloud/utils/EditorUtils.kt @@ -1,6 +1,7 @@ /* * Nextcloud - Android Client * + * SPDX-FileCopyrightText: 2026 Alper Ozturk * SPDX-FileCopyrightText: 2022 Álvaro Brey * SPDX-FileCopyrightText: 2022 Nextcloud GmbH * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only @@ -16,17 +17,27 @@ import javax.inject.Inject class EditorUtils @Inject constructor(private val arbitraryDataProvider: ArbitraryDataProvider) { + /** + * Returns only supported mimetypes + */ fun getEditor(user: User?, mimeType: String?): Editor? { - val json = arbitraryDataProvider.getValue(user, ArbitraryDataProvider.DIRECT_EDITING) - if (json.isEmpty()) { - return null - } - val editors = Gson().fromJson(json, DirectEditing::class.java).editors.values + val editors = getEditors(user) ?: return null return editors.firstOrNull { mimeType in it.mimetypes } - ?: editors.firstOrNull { mimeType in it.optionalMimetypes } } - fun isEditorAvailable(user: User?, mimeType: String?): Boolean = getEditor(user, mimeType) != null + /** + * Returns supported mimetypes along with optional ones + */ + fun isEditorAvailable(user: User?, mimeType: String?): Boolean { + val editors = getEditors(user) ?: return false + return editors.any { mimeType in it.mimetypes || mimeType in it.optionalMimetypes } + } + + private fun getEditors(user: User?): Collection? { + val json = arbitraryDataProvider.getValue(user, ArbitraryDataProvider.DIRECT_EDITING) + if (json.isEmpty()) return null + return Gson().fromJson(json, DirectEditing::class.java).editors.values + } fun usesOfficeUserAgent(editor: Editor?): Boolean = editor?.id in OFFICE_EDITOR_IDS diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 45fb1fff7c46..78d7b4d028a0 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1214,7 +1214,7 @@ private void handlePendingDownloadFile(OCFile file) { if (PreviewMediaActivity.Companion.canBePreviewed(file) && !file.isEncrypted() && mContainerActivity instanceof FileDisplayActivity fda) { setFabVisible(false); fda.startMediaPreview(file, 0, true, true, true, true); - } else if (editorUtils.isEditorAvailable(accountManager.getUser(), file.getMimeType()) && !file.isEncrypted()) { + } else if (editorUtils.getEditor(accountManager.getUser(), file.getMimeType()) != null && !file.isEncrypted()) { mContainerActivity.getFileOperationsHelper().openFileWithTextEditor(file, getContext()); } else if (capability.getRichDocumentsMimeTypeList() != null && capability.getRichDocumentsMimeTypeList().contains(file.getMimeType()) && diff --git a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java index a1b22caa96e5..22758112b41b 100755 --- a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java +++ b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java @@ -291,6 +291,7 @@ public void openFile(OCFile file) { List availableApps = fileActivity.getPackageManager(). queryIntentActivities(openFileWithIntent, PackageManager.GET_RESOLVED_FILTER); + // first always try to use available apps if (availableApps.isEmpty()) { Optional optionalUser = fileActivity.getUser();