From d560a4a2a975804e331729a1998306a5c48890da Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Sun, 30 Apr 2023 16:44:50 +0200 Subject: [PATCH] use avatar version of conversations to avoid unnecessary reloading/flickering Signed-off-by: Marcel Hibbe --- .../talk/adapters/items/ConversationItem.kt | 2 +- .../java/com/nextcloud/talk/chat/ChatActivity.kt | 5 +++-- .../conversationinfo/ConversationInfoActivity.kt | 2 +- .../ConversationInfoEditActivity.kt | 2 +- .../talk/extensions/ImageViewExtensions.kt | 16 ++++++++-------- .../models/json/conversations/Conversation.kt | 5 ++++- .../java/com/nextcloud/talk/utils/ApiUtils.java | 5 +++++ 7 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt index 96c121631..343cb531d 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt @@ -181,7 +181,7 @@ class ConversationItem( ConversationType.ROOM_GROUP_CALL, ConversationType.FORMER_ONE_TO_ONE, ConversationType.ROOM_PUBLIC_CALL -> - holder.binding.dialogAvatar.loadConversationAvatar(user, model, isInitialLoad) + holder.binding.dialogAvatar.loadConversationAvatar(user, model) else -> holder.binding.dialogAvatar.visibility = View.GONE } diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 72c31c10f..108b4b016 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -1000,10 +1000,11 @@ class ChatActivity : true ) } else if (isGroupConversation() || isPublicConversation()) { - url = ApiUtils.getUrlForConversationAvatar( + url = ApiUtils.getUrlForConversationAvatarWithVersion( 1, conversationUser!!.baseUrl, - currentConversation!!.token + currentConversation!!.token, + currentConversation!!.avatarVersion ) } diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt index 721a8d084..a7308fea0 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -807,7 +807,7 @@ class ConversationInfoActivity : } Conversation.ConversationType.ROOM_GROUP_CALL, Conversation.ConversationType.ROOM_PUBLIC_CALL -> { - binding.avatarImage.loadConversationAvatar(conversationUser, conversation!!, true) + binding.avatarImage.loadConversationAvatar(conversationUser, conversation!!) } Conversation.ConversationType.ROOM_SYSTEM -> { diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt index b2bb236a6..e2b0dbc76 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt @@ -359,7 +359,7 @@ class ConversationInfoEditActivity : } Conversation.ConversationType.ROOM_GROUP_CALL, Conversation.ConversationType.ROOM_PUBLIC_CALL -> { - binding.avatarImage.loadConversationAvatar(conversationUser, conversation!!, true) + binding.avatarImage.loadConversationAvatar(conversationUser, conversation!!) } Conversation.ConversationType.ROOM_SYSTEM -> { diff --git a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt index e061756be..bf8ef28eb 100644 --- a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt +++ b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt @@ -54,14 +54,14 @@ private const val TAG = "ImageViewExtensions" fun ImageView.loadConversationAvatar( user: User, - conversation: Conversation, - replace: Boolean + conversation: Conversation ): io.reactivex.disposables .Disposable { - val imageRequestUri = ApiUtils.getUrlForConversationAvatar( + val imageRequestUri = ApiUtils.getUrlForConversationAvatarWithVersion( 1, user.baseUrl, - conversation.token + conversation.token, + conversation.avatarVersion ) // these placeholders are only used when the request fails completely. The server also return default avatars @@ -77,7 +77,7 @@ fun ImageView.loadConversationAvatar( else -> ContextCompat.getDrawable(context, R.drawable.account_circle_96dp) } - return loadAvatarInternal(user, imageRequestUri, replace, placeholder) + return loadAvatarInternal(user, imageRequestUri, false, placeholder) } fun ImageView.loadUserAvatar( @@ -100,17 +100,17 @@ fun ImageView.loadUserAvatar( private fun ImageView.loadAvatarInternal( user: User?, url: String, - replace: Boolean, + ignoreCache: Boolean, placeholder: Drawable? ): io.reactivex.disposables .Disposable { - val cachePolicy = if (replace) { + val cachePolicy = if (ignoreCache) { CachePolicy.WRITE_ONLY } else { CachePolicy.ENABLED } - if (replace && this.result is SuccessResult) { + if (ignoreCache && this.result is SuccessResult) { val result = this.result as SuccessResult val memoryCacheKey = result.memoryCacheKey val memoryCache = context.imageLoader.memoryCache diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt index 30d891671..b31eda0b7 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt @@ -143,7 +143,10 @@ data class Conversation( var statusClearAt: Long? = 0, @JsonField(name = ["callRecording"]) - var callRecording: Int = 0 + var callRecording: Int = 0, + + @JsonField(name = ["avatarVersion"]) + var avatarVersion: String? = null ) : Parcelable { // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index 041063b5f..d2d1ab944 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -379,6 +379,11 @@ public class ApiUtils { return getUrlForRoom(version, baseUrl, token) + "/avatar"; } + public static String getUrlForConversationAvatarWithVersion(int version, String baseUrl, String token, + String avatarVersion) { + return getUrlForRoom(version, baseUrl, token) + "/avatar?avatarVersion=" + avatarVersion; + } + public static String getCredentials(String username, String token) { if (TextUtils.isEmpty(username) && TextUtils.isEmpty(token)) { return null;