diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 93df621d9..288d2dfe3 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -372,8 +372,13 @@ private suspend fun loadContactPictureWithCoil( } else { val displayName = contact.contact.value?.name ?: contact.displayName.value.orEmpty() val source = contact.contact.value?.getPictureUri(useThumbnail) + val sourceStr = source.toString() + val base64 = if (ImageUtils.isBase64(sourceStr)) { + Log.d("[Coil] Picture URI is base64 encoded") + ImageUtils.getBase64ImageFromString(sourceStr) + } else null - imageView.load(source) { + imageView.load(base64 ?: source) { transformations(CircleCropTransformation()) error( if (displayName.isEmpty() || AppUtils.getInitials(displayName) == "+") { diff --git a/app/src/main/java/org/linphone/utils/ImageUtils.kt b/app/src/main/java/org/linphone/utils/ImageUtils.kt index 73d4f2bd1..3e2a8a432 100644 --- a/app/src/main/java/org/linphone/utils/ImageUtils.kt +++ b/app/src/main/java/org/linphone/utils/ImageUtils.kt @@ -22,12 +22,24 @@ package org.linphone.utils import android.content.Context import android.graphics.* import android.net.Uri +import android.util.Base64 import java.io.FileNotFoundException import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log class ImageUtils { companion object { + private const val BASE64_REGEX = "^data:image\\/(gif|png|jpeg|bmp|webp|svg\\+xml)(;charset=utf-8)?;base64,[A-Za-z0-9+\\/]+={0,2}\$" + + fun isBase64(source: String): Boolean { + return source.matches(Regex(BASE64_REGEX)) + } + + fun getBase64ImageFromString(base64: String): ByteArray? { + val substring = base64.substring(base64.indexOf(",") + 1) + return Base64.decode(substring, Base64.DEFAULT) + } + fun getRoundBitmapFromUri( context: Context, fromPictureUri: Uri?