WIP Getting Gif to Work

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2024-07-26 11:39:53 -05:00
parent 5caf93357f
commit 42a25443ce
No known key found for this signature in database
GPG Key ID: 3AA5FDFED7944099
4 changed files with 37 additions and 10 deletions

View File

@ -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 &&

View File

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

View File

@ -63,11 +63,11 @@
app:layout_wrapBefore="true"
tools:visibility="gone">
<ImageView
<pl.droidsonroids.gif.GifImageView
android:id="@id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitStart"
android:minHeight="200dp"
tools:src="@drawable/ic_call_black_24dp"
tools:ignore="ContentDescription" />

View File

@ -39,11 +39,11 @@
app:layout_flexGrow="1"
app:layout_wrapBefore="true">
<ImageView
<pl.droidsonroids.gif.GifImageView
android:id="@id/image"
android:layout_width="match_parent"
android:minHeight="200dp"
android:layout_height="wrap_content"
android:scaleType="fitStart"
tools:src="@drawable/ic_call_black_24dp"
tools:ignore="ContentDescription" />