From b2659940312db97dac21f6c14927db601d14166b Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 1 Jan 2020 20:01:01 +0100 Subject: [PATCH] Improve previews --- .../messages/MagicPreviewMessageViewHolder.kt | 19 ++++++++-------- .../talk/controllers/ChatController.kt | 22 ++++++++++--------- .../talk/models/json/chat/ChatMessage.java | 10 +++++++-- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt index c50d3f62b..5231c0c6e 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt @@ -27,7 +27,6 @@ import android.content.Intent import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.net.Uri -import android.os.Handler import android.view.View import androidx.emoji.widget.EmojiTextView import butterknife.BindView @@ -89,6 +88,7 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH } } } + if (message.messageType == SINGLE_NC_ATTACHMENT_MESSAGE) { // it's a preview for a Nextcloud share @@ -99,8 +99,9 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH ) if (message.getSelectedIndividualHashMap().containsKey("mimetype")) { - // we now handle this directly in imageloader - //image.load(getDrawableResourceIdForMimeType(message.getSelectedIndividualHashMap().get ("mimetype"))) + if (message.imageUrl == "no-preview") { + image.load(getDrawableResourceIdForMimeType(message.getSelectedIndividualHashMap()["mimetype"])) + } } else { fetchFileInformation( "/" + message.getSelectedIndividualHashMap()["path"], @@ -187,11 +188,8 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH if (davResponse.data != null) { val browserFileList = davResponse.data as List - if (!browserFileList.isEmpty()) { - Handler(context.mainLooper) - .post { - image.load(getDrawableResourceIdForMimeType(browserFileList[0].mimeType)) - } + if (browserFileList.isNotEmpty()) { + image.load(getDrawableResourceIdForMimeType(browserFileList[0].mimeType)) } } } @@ -202,10 +200,13 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH override fun getPayloadForImageLoader(message: ChatMessage): Any { val map = HashMap() + // used for setting a placeholder if (message.getSelectedIndividualHashMap().containsKey("mimetype")) { - map["mimetype"] = message.getSelectedIndividualHashMap().get("mimetype")!! + map["mimetype"] = message.getSelectedIndividualHashMap()["mimetype"]!! } + map["hasPreview"] = message.selectedIndividualHashMap.getOrDefault("has-preview", false) + return ImageLoaderPayload(map) } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index 12bfc0f27..6b12af6f3 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -364,21 +364,23 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter adapter = MessagesListAdapter( conversationUser?.userId, messageHolders, ImageLoader { imageView, url, payload -> - imageView.load(url) { - if (conversationUser != null && url!!.startsWith(conversationUser.baseUrl) && (url.contains( - "index.php/core/preview?fileId=") || url.contains("/avatar/"))) { - addHeader("Authorization", conversationUser.getCredentials()) - } + if (url != "no-preview") { + imageView.load(url) { + if (conversationUser != null && url!!.startsWith(conversationUser.baseUrl) && (url.contains( + "index.php/core/preview?fileId=") || url.contains("/avatar/"))) { + addHeader("Authorization", conversationUser.getCredentials()) + } - if (url!!.contains("/avatar/")) { - transformations(CircleCropTransformation()) - } else { - if (payload is ImageLoaderPayload) { - payload.map?.get("mimetype")?.let { + if (url!!.contains("/avatar/")) { + transformations(CircleCropTransformation()) + } else { + if (payload is ImageLoaderPayload) { + payload.map?.get("mimetype")?.let { val mimeTypeDrawableResource = getDrawableResourceIdForMimeType(it as String) val drawable = context.getDrawable(mimeTypeDrawableResource) placeholder(drawable) error(drawable) + } } } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java index 97961d949..83ec66feb 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java @@ -148,7 +148,13 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent Map individualHashMap = messageParameters.get(key); if (individualHashMap.get("type").equals("file")) { selectedIndividualHashMap = individualHashMap; - return (ApiUtils.getUrlForFilePreviewWithFileId(getActiveUser().getBaseUrl(), + if (selectedIndividualHashMap.containsKey("preview-available")) { + if (selectedIndividualHashMap.get("preview-available").equals("no")) { + return "no-preview"; + } + } + + return (ApiUtils.getUrlForFilePreviewWithFileId(activeUser.getBaseUrl(), individualHashMap.get("id"), NextcloudTalkApplication.Companion.getSharedApplication() .getResources() .getDimensionPixelSize(R.dimen.maximum_file_preview_size))); @@ -157,7 +163,7 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent } if (!messageTypesToIgnore.contains(getMessageType()) && isLinkPreviewAllowed) { - return getMessage().trim(); + return message.trim(); } return null;