From 232d9508b1ad38cff5551b0c11409be27728cddf Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 27 Jul 2026 14:36:56 +0200 Subject: [PATCH 1/4] make sharees mutable Signed-off-by: alperozturk96 --- .../owncloud/android/datamodel/OCFile.java | 4 ++-- .../owncloud/android/datamodel/OCFileTest.kt | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) 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 f42feb760680..1aed05bc7b8d 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -105,7 +105,7 @@ public class OCFile implements Parcelable, Comparable, ServerFileInterfa private String ownerId; private String ownerDisplayName; String note; - private List sharees; + private List sharees = new ArrayList<>(); private String richWorkspace; private boolean locked; @Nullable @@ -988,7 +988,7 @@ public void setNote(String note) { } public void setSharees(List sharees) { - this.sharees = sharees; + this.sharees = (sharees == null) ? new ArrayList<>() : new ArrayList<>(sharees); } public void setRichWorkspace(String richWorkspace) { diff --git a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt index 030623b04de5..79c910bb4ffc 100644 --- a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt +++ b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt @@ -7,11 +7,34 @@ */ package com.owncloud.android.datamodel +import com.owncloud.android.lib.resources.shares.ShareType +import com.owncloud.android.lib.resources.shares.ShareeUser import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Test class OCFileTest { + @Test + fun testShareesDefaultsToEmptyMutableList() { + val sut = OCFile("/") + + assertTrue(sut.sharees.isEmpty()) + + sut.sharees.add(ShareeUser("alice", "Alice", ShareType.USER)) + assertEquals(1, sut.sharees.size) + } + + @Test + fun testShareesStayMutableWhenSetFromImmutableList() { + val sut = OCFile("/") + + sut.sharees = listOf(ShareeUser("alice", "Alice", ShareType.USER)) + + sut.sharees.add(ShareeUser("bob", "Bob", ShareType.USER)) + assertEquals(2, sut.sharees.size) + } + @Test fun testLongIds() { val sut = OCFile("/") From b2e46658d6198cda1bb5601d3cb3e093dc5c7706 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 27 Jul 2026 14:48:14 +0200 Subject: [PATCH 2/4] speed-up bindSharedAvatars Signed-off-by: alperozturk96 --- .../android/ui/adapter/OCFileListAdapter.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 352bc6472b8d..3edcc558d0ab 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -75,7 +75,6 @@ import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Locale; @@ -594,29 +593,44 @@ private void handleListMode(ListGridItemViewHolder holder, } private void bindSharedAvatars(ListItemViewHolder holder, OCFile file) { + final var sharedAvatars = holder.getSharedAvatars(); + if (!(file.isSharedWithMe() || file.isSharedWithSharee()) || isMultiSelect() || gridView || hideItemOptions) { - holder.getSharedAvatars().setVisibility(View.GONE); - holder.getSharedAvatars().removeAllViews(); + sharedAvatars.setVisibility(View.GONE); + if (sharedAvatars.getChildCount() > 0) { + sharedAvatars.removeAllViews(); + } return; } - final var sharees = new ArrayList<>(file.getSharees()); + sharedAvatars.setVisibility(View.VISIBLE); + sharedAvatars.setAvatars(user, avatarSharees(file), viewThemeUtils); + sharedAvatars.setOnClickListener(view -> ocFileListFragmentInterface.onShareIconClick(file)); + } + + private List avatarSharees(OCFile file) { + final List sharees = file.getSharees(); + ShareeUser owner = null; final String ownerId = file.getOwnerId(); if (!TextUtils.isEmpty(ownerId) && !ownerId.equals(userId)) { final var ownerSharee = new ShareeUser(ownerId, file.getOwnerDisplayName(), ShareType.USER); if (!sharees.contains(ownerSharee)) { - sharees.add(ownerSharee); + owner = ownerSharee; } } - Collections.reverse(sharees); + final var ordered = new ArrayList(sharees.size() + (owner == null ? 0 : 1)); + if (owner != null) { + ordered.add(owner); + } - final var sharedAvatars = holder.getSharedAvatars(); - sharedAvatars.setVisibility(View.VISIBLE); - sharedAvatars.removeAllViews(); - sharedAvatars.setAvatars(user, sharees, viewThemeUtils); - sharedAvatars.setOnClickListener(view -> ocFileListFragmentInterface.onShareIconClick(file)); + // count from last to first to get desired order + for (int i = sharees.size() - 1; i >= 0; i--) { + ordered.add(sharees.get(i)); + } + + return ordered; } private void bindListItemViewHolder(ListItemViewHolder holder, OCFile file) { From b36789d2f65d2a89b862e0fee441514cbedc02b9 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 27 Jul 2026 14:50:26 +0200 Subject: [PATCH 3/4] speed-up bindSharedAvatars Signed-off-by: alperozturk96 --- app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt index 79c910bb4ffc..939e1a3d73f5 100644 --- a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt +++ b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt @@ -1,6 +1,7 @@ /* * Nextcloud - Android Client * + * SPDX-FileCopyrightText: 2026 Alper Ozturk * SPDX-FileCopyrightText: 2022 Tobias Kaminsky * SPDX-FileCopyrightText: 2022 Nextcloud GmbH * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only From 9174089093825db963f24dea88fb79e2ef767cfa Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 27 Jul 2026 14:50:43 +0200 Subject: [PATCH 4/4] speed-up bindSharedAvatars Signed-off-by: alperozturk96 --- .../java/com/owncloud/android/ui/adapter/OCFileListAdapter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 3edcc558d0ab..8da468e266ce 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -1,6 +1,7 @@ /* * Nextcloud - Android Client * + * SPDX-FileCopyrightText: 2026 Alper Ozturk * SPDX-FileCopyrightText: 2023 TSI-mc * SPDX-FileCopyrightText: 2020 Chris Narkiewicz * SPDX-FileCopyrightText: 2018 Tobias Kaminsky