From 2e99575cb16c3beb71a4517b5125611683bae65e Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 22 Sep 2026 13:56:16 +0200 Subject: [PATCH] fix(avatar): flicker Signed-off-by: alperozturk96 --- .../extensions/ServerCredentialsExtensions.kt | 5 +++-- .../utils/share/UnifiedShareSharees.kt | 21 +++++++++++++------ .../ui/fragment/FileDetailSharingFragment.kt | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/ServerCredentialsExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/ServerCredentialsExtensions.kt index e30b915d210e..e3fdbf0be152 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/ServerCredentialsExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/ServerCredentialsExtensions.kt @@ -15,10 +15,11 @@ import com.owncloud.android.lib.common.utils.Log_OC private const val TAG = "ServerCredentialsExtensions" -suspend fun ServerCredentials.supportsUnifiedShare(): Boolean { +suspend fun ServerCredentials.supportsUnifiedShare(): Boolean? { val capabilities = ShareRemoteRepository(NextcloudHttpClient.create(this)) .fetchSharingCapabilities() .dataOrElse { Log_OC.e(TAG, "Failed to fetch sharing capabilities") } + ?: return null - return capabilities?.isUnifiedShareEnabled == true + return capabilities.isUnifiedShareEnabled } diff --git a/app/src/main/java/com/nextcloud/utils/share/UnifiedShareSharees.kt b/app/src/main/java/com/nextcloud/utils/share/UnifiedShareSharees.kt index abd6bd70ab68..7755aeef64b9 100644 --- a/app/src/main/java/com/nextcloud/utils/share/UnifiedShareSharees.kt +++ b/app/src/main/java/com/nextcloud/utils/share/UnifiedShareSharees.kt @@ -9,6 +9,7 @@ package com.nextcloud.utils.share import com.nextcloud.android.common.ui.network.auth.ServerCredentials import com.nextcloud.android.common.ui.share.avatar.ShareAvatarRepository +import com.nextcloud.android.common.ui.share.model.api.recipients.Recipient import com.nextcloud.android.common.ui.share.model.api.share.Share import com.nextcloud.client.account.User import com.nextcloud.utils.extensions.supportsUnifiedShare @@ -75,19 +76,27 @@ object UnifiedShareSharees { unifiedShareSupport[accountName]?.let { return it } // a failed capability request stays uncached so that the next listing can resolve it again - val supported = runCatching { credentials.supportsUnifiedShare() }.getOrNull() ?: return false - unifiedShareSupport[accountName] = supported + val supported = runCatching { credentials.supportsUnifiedShare() }.getOrNull() + supported?.let { unifiedShareSupport[accountName] = it } - return supported + return supported == true } private suspend fun ShareAvatarRepository.fetchSharees(file: OCFile) { - file.sharees = fetchShareAvatars(file.localId.toString())?.toAvatarSharees().orEmpty() + val sharees = fetchShareAvatars(file.localId.toString())?.toAvatarSharees() ?: return + file.sharees = sharees } private fun List.toAvatarSharees(): List = asSequence() .flatMap { share -> share.invitedRecipients } - .distinctBy { recipient -> recipient.value } - .map { recipient -> ShareeUser(recipient.value, recipient.displayName, ShareType.USER) } + .distinctBy { recipient -> recipient.clazz to recipient.value } + .map { recipient -> ShareeUser(recipient.value, recipient.displayName, recipient.toShareType()) } .toList() + + private fun Recipient.toShareType(): ShareType = when (clazz) { + Recipient.GROUP_RECIPIENT_CLASS -> ShareType.GROUP + Recipient.TEAM_RECIPIENT_CLASS -> ShareType.CIRCLE + Recipient.EMAIL_RECIPIENT_CLASS -> ShareType.EMAIL + else -> ShareType.USER + } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt index b1ef8f903866..ab627af79432 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt @@ -172,7 +172,7 @@ class FileDetailSharingFragment : private fun initializeSharingMode() { viewLifecycleOwner.lifecycleScope.launch { withContext(Dispatchers.IO) { - user?.toServerCredentials()?.takeIf { it.supportsUnifiedShare() } + user?.toServerCredentials()?.takeIf { it.supportsUnifiedShare() == true } }?.let(::showUnifiedShare) ?: showLegacyShare() } }