From 274519f26efb0f9164c27cf46157b80831138ab3 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Mon, 9 Nov 2026 16:11:29 +0100 Subject: [PATCH 1/4] Fix external storage directory shown with shared folder icon overlay Signed-off-by: daniele-verducci --- .../utils/extensions/FileDataStorageManagerExtensions.kt | 3 +-- .../java/com/nextcloud/utils/extensions/OCFileExtensions.kt | 2 +- .../com/owncloud/android/datamodel/FileDataStorageManager.java | 2 ++ app/src/main/java/com/owncloud/android/datamodel/OCFile.java | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt index a495be548e41..493027b68914 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt @@ -392,8 +392,7 @@ private fun FileDataStorageManager.upsertFolderContent(folder: OCFile, files: Li val existingFile = findExistingFile(file) val entity = file.toFileEntity(user.accountName).copy( id = existingFile?.id, - parent = folder.fileId, - mountType = existingFile?.mountType + parent = folder.fileId ) val insertedRowId = fileDao.upsert(entity) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/OCFileExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/OCFileExtensions.kt index 3a0326a4964f..d53382ad251e 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/OCFileExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/OCFileExtensions.kt @@ -163,7 +163,7 @@ fun OCFile.toFileEntity(accountName: String): FileEntity = FileEntity( isEncrypted = isEncrypted.toInt(), etagInConflict = etagInConflict, sharedWithSharee = isSharedWithSharee.toInt(), - mountType = null, + mountType = mountType?.ordinal, hasPreview = isPreviewAvailable.toInt(), unreadCommentsCount = unreadCommentsCount, ownerId = ownerId, diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index ae793c845797..022d750350ac 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -784,6 +784,8 @@ private ContentValues createContentValuesBase(OCFile fileOrFolder) { cv.put(ProviderTableMeta.FILE_ETAG_ON_SERVER, fileOrFolder.getEtagOnServer()); cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, fileOrFolder.isSharedViaLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, fileOrFolder.isSharedWithSharee() ? 1 : 0); + cv.put(ProviderTableMeta.FILE_MOUNT_TYPE, + fileOrFolder.getMountType() != null ? fileOrFolder.getMountType().ordinal() : null); cv.put(ProviderTableMeta.FILE_PERMISSIONS, fileOrFolder.getPermissions()); cv.put(ProviderTableMeta.FILE_REMOTE_ID, fileOrFolder.getRemoteId()); cv.put(ProviderTableMeta.FILE_LOCAL_ID, fileOrFolder.getLocalId()); diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index 5626e13771fa..5fb30763a8cc 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -705,7 +705,7 @@ private boolean hasPermission(String permission) { } public Integer getFileOverlayIconId(boolean isAutoUploadFolder) { - if (WebdavEntry.MountType.GROUP == mountType || mounted()) { + if (WebdavEntry.MountType.GROUP == mountType) { return R.drawable.ic_folder_overlay_account_group; } else if (sharedViaLink && !encrypted) { return R.drawable.ic_folder_overlay_link; From 53dc8855f72f6d7ee3be1244948aaa5e1fe6fb64 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 10 Nov 2026 16:11:18 +0100 Subject: [PATCH 2/4] Do not default to MountType.INTERNAL, as can exist files with no mountType (i.e. the ones created by tests) Signed-off-by: daniele-verducci --- .../utils/extensions/FileDataStorageManagerExtensions.kt | 6 ++++-- .../owncloud/android/datamodel/FileDataStorageManager.java | 5 +++-- .../main/java/com/owncloud/android/datamodel/OCFile.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt index 493027b68914..f1f380d0630b 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt @@ -390,9 +390,11 @@ fun FileDataStorageManager.isPendingOfflineCreation(file: OCFile): Boolean { private fun FileDataStorageManager.upsertFolderContent(folder: OCFile, files: List) { files.forEach { file -> val existingFile = findExistingFile(file) - val entity = file.toFileEntity(user.accountName).copy( + val rEntity = file.toFileEntity(user.accountName) + val entity = rEntity.copy( id = existingFile?.id, - parent = folder.fileId + parent = folder.fileId, + mountType = rEntity.mountType ?: existingFile?.mountType ) val insertedRowId = fileDao.upsert(entity) diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index 022d750350ac..a92fe5fc9d14 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -784,8 +784,9 @@ private ContentValues createContentValuesBase(OCFile fileOrFolder) { cv.put(ProviderTableMeta.FILE_ETAG_ON_SERVER, fileOrFolder.getEtagOnServer()); cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, fileOrFolder.isSharedViaLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, fileOrFolder.isSharedWithSharee() ? 1 : 0); - cv.put(ProviderTableMeta.FILE_MOUNT_TYPE, - fileOrFolder.getMountType() != null ? fileOrFolder.getMountType().ordinal() : null); + if (fileOrFolder.getMountType() != null) { + cv.put(ProviderTableMeta.FILE_MOUNT_TYPE, fileOrFolder.getMountType().ordinal()); + } cv.put(ProviderTableMeta.FILE_PERMISSIONS, fileOrFolder.getPermissions()); cv.put(ProviderTableMeta.FILE_REMOTE_ID, fileOrFolder.getRemoteId()); cv.put(ProviderTableMeta.FILE_LOCAL_ID, fileOrFolder.getLocalId()); diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index 5fb30763a8cc..b936578bf9e5 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -521,7 +521,7 @@ private void resetData() { hidden = false; encrypted = false; readOnly = false; - mountType = WebdavEntry.MountType.INTERNAL; + mountType = null; richWorkspace = ""; firstShareTimestamp = 0; locked = false; From 81f13c871c5356e726940e9a3ec248640766465d Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Wed, 11 Nov 2026 10:29:18 +0100 Subject: [PATCH 3/4] Clearer variable names Signed-off-by: daniele-verducci --- .../utils/extensions/FileDataStorageManagerExtensions.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt index f1f380d0630b..8d6420c5cfd8 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt @@ -369,7 +369,7 @@ fun FileDataStorageManager.saveFolder(folder: OCFile, updatedFiles: List "${filesToRemove.size} files to remove" ) - val removedChildren = filesToRemove.filter { it.parentId == folder.fileId && !isPendingOfflineCreation(it) } + val removedChildren = filesToRemove.filter { it.parentId == folder.fileId } removedChildren.forEach { deleteLocalCopy(it) } db.runInTransaction { @@ -387,8 +387,8 @@ fun FileDataStorageManager.isPendingOfflineCreation(file: OCFile): Boolean { return offlineOperationDao.getByPath(path)?.isCreate() == true } -private fun FileDataStorageManager.upsertFolderContent(folder: OCFile, files: List) { - files.forEach { file -> +private fun FileDataStorageManager.upsertFolderContent(folder: OCFile, remoteFiles: List) { + remoteFiles.forEach { file -> val existingFile = findExistingFile(file) val rEntity = file.toFileEntity(user.accountName) val entity = rEntity.copy( From bacc779512b39b3c5301cfdf9df6ce4feaa26a4a Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Fri, 13 Nov 2026 09:03:59 +0100 Subject: [PATCH 4/4] Suppress spotbugs warnings for enums that are meant to be nullable Signed-off-by: daniele-verducci --- app/src/main/java/com/owncloud/android/datamodel/OCFile.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index b936578bf9e5..84623145fbc2 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -492,6 +492,7 @@ public void setFileName(String name) { /** * Used internally. Reset all file properties */ + @SuppressFBWarnings("ENMI_NULL_ENUM_VALUE") private void resetData() { fileId = -1; remotePath = null;