Improve previews

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-10-26 14:14:58 +02:00
parent 1e251d4696
commit f2f9cc50ad
3 changed files with 66 additions and 5 deletions

View File

@ -0,0 +1,30 @@
/*
* Nextcloud Talk application
*
* @author Mario Danic
* Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
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<String, Any>?
): Parcelable

View File

@ -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<String, Any>()
if (message.getSelectedIndividualHashMap().containsKey("mimetype")) {
map.put("mimetype", message.getSelectedIndividualHashMap().get("mimetype")!!)
}
return ImageLoaderPayload(map)
}
init {
ButterKnife.bind(this, itemView!!)
sharedApplication!!.componentApplication.inject(this)

View File

@ -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!!)