diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/ImageLoaderPayload.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/ImageLoaderPayload.kt new file mode 100644 index 000000000..9c20986ec --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/ImageLoaderPayload.kt @@ -0,0 +1,30 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2019 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.adapters.messages + +import android.os.Parcelable +import kotlinx.android.parcel.Parcelize +import kotlinx.android.parcel.RawValue + +@Parcelize +data class ImageLoaderPayload( + val map: @RawValue HashMap? +): Parcelable \ No newline at end of file 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 720b5fb39..b22ac8826 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 @@ -55,6 +55,7 @@ import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ACCOUNT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_ID import com.stfalcon.chatkit.messages.MessageHolders.IncomingImageMessageViewHolder +import eu.davidea.flexibleadapter.Payload import io.reactivex.Single import io.reactivex.SingleObserver import io.reactivex.disposables.Disposable @@ -109,14 +110,17 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH message.getSelectedIndividualHashMap()["name"]!!, message.getSelectedIndividualHashMap()["link"]!!, messageText!! ) + if (message.getSelectedIndividualHashMap().containsKey("mimetype")) { - image.load(getDrawableResourceIdForMimeType(message.getSelectedIndividualHashMap().get("mimetype"))) + // we now handle this directly in imageloader + //image.load(getDrawableResourceIdForMimeType(message.getSelectedIndividualHashMap().get ("mimetype"))) } else { fetchFileInformation( "/" + message.getSelectedIndividualHashMap()["path"], message.activeUser ) } + image.setOnClickListener { v: View? -> val accountString = message.activeUser.username + "@" + message.activeUser @@ -209,6 +213,15 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH }) } + override fun getPayloadForImageLoader(message: ChatMessage): Any { + val map = HashMap() + if (message.getSelectedIndividualHashMap().containsKey("mimetype")) { + map.put("mimetype", message.getSelectedIndividualHashMap().get("mimetype")!!) + } + + return ImageLoaderPayload(map) + } + init { ButterKnife.bind(this, itemView!!) sharedApplication!!.componentApplication.inject(this) 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 bff79e716..5e9216d6c 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -58,9 +58,9 @@ import coil.transform.CircleCropTransformation import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler -import com.facebook.drawee.backends.pipeline.Fresco import com.nextcloud.talk.R import com.nextcloud.talk.activities.MagicCallActivity +import com.nextcloud.talk.adapters.messages.ImageLoaderPayload import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicOutcomingTextMessageViewHolder import com.nextcloud.talk.adapters.messages.MagicPreviewMessageViewHolder @@ -88,6 +88,7 @@ import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ConductorRemapping import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType import com.nextcloud.talk.utils.KeyboardUtils import com.nextcloud.talk.utils.MagicCharPolicy import com.nextcloud.talk.utils.NotificationUtils @@ -387,8 +388,24 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter adapter = MessagesListAdapter( conversationUser?.userId, messageHolders, ImageLoader { imageView, url, payload -> imageView.load(url) { - transformations(CircleCropTransformation()) - if (conversationUser != null) { + if (url!!.contains("/avatar/")) { + transformations(CircleCropTransformation()) + } else { + if (payload is ImageLoaderPayload) { + payload.map?.let { + if (payload.map.containsKey("mimetype")) { + placeholder( + getDrawableResourceIdForMimeType( + payload.map.get("mimetype") as String? + ) + ) + } + } + } + } + + if (conversationUser != null && url.startsWith(conversationUser.baseUrl) && url.contains( + "index.php/core/preview?fileId=")) { addHeader("Authorization", conversationUser.getCredentials()) } } @@ -1137,7 +1154,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter isFromTheFuture: Boolean, timeout: Int ) { - val xChatLastGivenHeader: String? = response.headers().get("X-Chat-Last-Given") + val xChatLastGivenHeader: String? = response.headers() + .get("X-Chat-Last-Given") if (response.headers().size() > 0 && !TextUtils.isEmpty(xChatLastGivenHeader)) { val header = Integer.parseInt(xChatLastGivenHeader!!)