Skip to content

Commit 2bb7e5f

Browse files
committed
fix(editor): handle mime types
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 6a0b463 commit 2bb7e5f

3 files changed

Lines changed: 20 additions & 8 deletions

File tree

app/src/main/java/com/nextcloud/utils/EditorUtils.kt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Nextcloud - Android Client
33
*
4+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
45
* SPDX-FileCopyrightText: 2022 Álvaro Brey <alvaro@alvarobrey.com>
56
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH
67
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
@@ -16,17 +17,27 @@ import javax.inject.Inject
1617

1718
class EditorUtils @Inject constructor(private val arbitraryDataProvider: ArbitraryDataProvider) {
1819

20+
/**
21+
* Returns only supported mimetypes
22+
*/
1923
fun getEditor(user: User?, mimeType: String?): Editor? {
20-
val json = arbitraryDataProvider.getValue(user, ArbitraryDataProvider.DIRECT_EDITING)
21-
if (json.isEmpty()) {
22-
return null
23-
}
24-
val editors = Gson().fromJson(json, DirectEditing::class.java).editors.values
24+
val editors = getEditors(user) ?: return null
2525
return editors.firstOrNull { mimeType in it.mimetypes }
26-
?: editors.firstOrNull { mimeType in it.optionalMimetypes }
2726
}
2827

29-
fun isEditorAvailable(user: User?, mimeType: String?): Boolean = getEditor(user, mimeType) != null
28+
/**
29+
* Returns supported mimetypes along with optional ones
30+
*/
31+
fun isEditorAvailable(user: User?, mimeType: String?): Boolean {
32+
val editors = getEditors(user) ?: return false
33+
return editors.any { mimeType in it.mimetypes || mimeType in it.optionalMimetypes }
34+
}
35+
36+
private fun getEditors(user: User?): Collection<Editor>? {
37+
val json = arbitraryDataProvider.getValue(user, ArbitraryDataProvider.DIRECT_EDITING)
38+
if (json.isEmpty()) return null
39+
return Gson().fromJson(json, DirectEditing::class.java).editors.values
40+
}
3041

3142
fun usesOfficeUserAgent(editor: Editor?): Boolean = editor?.id in OFFICE_EDITOR_IDS
3243

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,7 @@ private void handlePendingDownloadFile(OCFile file) {
12201220
} else if (PreviewMediaActivity.Companion.canBePreviewed(file) && !file.isEncrypted() && mContainerActivity instanceof FileDisplayActivity fda) {
12211221
setFabVisible(false);
12221222
fda.startMediaPreview(file, 0, true, true, true, true);
1223-
} else if (editorUtils.isEditorAvailable(accountManager.getUser(), file.getMimeType()) && !file.isEncrypted()) {
1223+
} else if (editorUtils.getEditor(accountManager.getUser(), file.getMimeType()) != null && !file.isEncrypted()) {
12241224
mContainerActivity.getFileOperationsHelper().openFileWithTextEditor(file, getContext());
12251225
} else if (capability.getRichDocumentsMimeTypeList() != null &&
12261226
capability.getRichDocumentsMimeTypeList().contains(file.getMimeType()) &&

app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ public void openFile(OCFile file) {
291291
List<ResolveInfo> availableApps = fileActivity.getPackageManager().
292292
queryIntentActivities(openFileWithIntent, PackageManager.GET_RESOLVED_FILTER);
293293

294+
// first always try to use available apps
294295
if (availableApps.isEmpty()) {
295296
Optional<User> optionalUser = fileActivity.getUser();
296297

0 commit comments

Comments
 (0)