From 42a25443ce114bae2034c72de7e0949ef417372a Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Fri, 26 Jul 2024 11:39:53 -0500 Subject: [PATCH] WIP Getting Gif to Work Signed-off-by: rapterjet2004 --- .../messages/PreviewMessageViewHolder.kt | 5 +++ .../com/nextcloud/talk/chat/ChatActivity.kt | 34 +++++++++++++++---- .../item_custom_incoming_preview_message.xml | 4 +-- .../item_custom_outcoming_preview_message.xml | 4 +-- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt index 7ff68e951..89d3da756 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt @@ -42,6 +42,7 @@ import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType import com.nextcloud.talk.utils.FileViewerUtils import com.nextcloud.talk.utils.FileViewerUtils.ProgressUi +import com.nextcloud.talk.utils.MimetypeUtils.isGif import com.nextcloud.talk.utils.message.MessageUtils import com.stfalcon.chatkit.messages.MessageHolders.IncomingImageMessageViewHolder import io.reactivex.Single @@ -232,6 +233,10 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) : if (message.selectedIndividualHashMap!!.containsKey(KEY_MIMETYPE)) { val mimetype = message.selectedIndividualHashMap!![KEY_MIMETYPE] + if (isGif(mimetype!!)) { + return message + } + val drawableResourceId = getDrawableResourceIdForMimeType(mimetype) var drawable = ContextCompat.getDrawable(context!!, drawableResourceId) if (drawable != null && 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 daec27426..bb7d3566d 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -50,6 +50,7 @@ import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.view.ContextThemeWrapper +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.content.PermissionChecker import androidx.core.content.PermissionChecker.PERMISSION_GRANTED @@ -187,6 +188,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode +import pl.droidsonroids.gif.GifDrawable import retrofit2.HttpException import retrofit2.Response import java.io.File @@ -1073,8 +1075,32 @@ class ChatActivity : adapter = TalkMessagesListAdapter( senderId, initMessageHolders(), - ImageLoader { imageView, url, placeholder -> - imageView.loadAvatarOrImagePreview(url!!, conversationUser!!, placeholder as Drawable?) + ImageLoader { imageView, url, data -> + try { + if ((data is ChatMessage)) { // It's a GIF + val filename = data.selectedIndividualHashMap!!["name"] + val path = context.cacheDir.absolutePath + "/" + filename + val file = File(context.cacheDir, filename!!) + if (file.exists()) { + val gifFromUri = GifDrawable(path) + imageView.setImageDrawable(gifFromUri) + } else { + // TODO download file to cache can't be called here -_-, need to figure out another way + // to get this preloaded, likely in PreviewMessageViewHolder + val placeholder = ContextCompat.getDrawable(context, R.drawable.ic_mimetype_file) + imageView.setImageDrawable(placeholder) + downloadFileToCache(data, false) { + val gifFromUri = GifDrawable(path) + imageView.setImageDrawable(gifFromUri) + } + } + } else { // Not a GIF + imageView.loadAvatarOrImagePreview(url!!, conversationUser!!, data as Drawable?) + } + } catch (e: java.lang.IllegalStateException) { + Log.e(TAG, "Error in ImageLoading in initAdapter $e") + } + }, this ) @@ -3384,10 +3410,6 @@ class ChatActivity : val messageTemp = message as ChatMessage messageTemp.lastEditTimestamp = message.lastEditTimestamp - val index = adapter?.getMessagePositionById(messageTemp.id) ?: 0 - val adapterMsg = adapter?.items?.get(index)?.item as ChatMessage - - messageTemp.parentMessage = adapterMsg.parentMessage messageTemp.isOneToOneConversation = currentConversation?.type == ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL messageTemp.activeUser = conversationUser diff --git a/app/src/main/res/layout/item_custom_incoming_preview_message.xml b/app/src/main/res/layout/item_custom_incoming_preview_message.xml index d55d065b1..ae87f04e7 100644 --- a/app/src/main/res/layout/item_custom_incoming_preview_message.xml +++ b/app/src/main/res/layout/item_custom_incoming_preview_message.xml @@ -63,11 +63,11 @@ app:layout_wrapBefore="true" tools:visibility="gone"> - diff --git a/app/src/main/res/layout/item_custom_outcoming_preview_message.xml b/app/src/main/res/layout/item_custom_outcoming_preview_message.xml index 886241975..b2cb6bf4c 100644 --- a/app/src/main/res/layout/item_custom_outcoming_preview_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_preview_message.xml @@ -39,11 +39,11 @@ app:layout_flexGrow="1" app:layout_wrapBefore="true"> -