diff --git a/briar-android/build.gradle b/briar-android/build.gradle index bf90f1b36..8db584571 100644 --- a/briar-android/build.gradle +++ b/briar-android/build.gradle @@ -121,6 +121,7 @@ dependencies { exclude group: 'com.android.support' exclude module: 'disklrucache' // when there's no disk cache, we can't accidentally use it } + implementation "com.github.zjupure:webpdecoder:2.0.$glideVersion" annotationProcessor 'com.google.dagger:dagger-compiler:2.24' annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion" diff --git a/briar-android/src/main/java/org/briarproject/briar/android/attachment/media/ImageHelperImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/attachment/media/ImageHelperImpl.java index 384437b84..fd46cb020 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/attachment/media/ImageHelperImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/attachment/media/ImageHelperImpl.java @@ -3,6 +3,8 @@ package org.briarproject.briar.android.attachment.media; import android.graphics.BitmapFactory; import android.webkit.MimeTypeMap; +import com.bumptech.glide.integration.webp.WebpBitmapFactory; + import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.io.InputStream; @@ -25,6 +27,10 @@ class ImageHelperImpl implements ImageHelper { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(is, null, options); + if (options.outWidth < 1 || options.outHeight < 1) { + // BitmapFactory doesn't fully support WebP on API < 17 + WebpBitmapFactory.decodeStream(is, null, options); + } String mimeType = options.outMimeType; if (mimeType == null) mimeType = ""; return new DecodeResult(options.outWidth, options.outHeight, diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java index a2dba12e2..8d4e6ebf1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java @@ -4,6 +4,8 @@ import android.graphics.Bitmap; import android.view.View; import android.widget.ImageView; +import com.bumptech.glide.integration.webp.decoder.WebpDrawable; +import com.bumptech.glide.integration.webp.decoder.WebpDrawableTransformation; import com.bumptech.glide.load.Transformation; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -80,7 +82,9 @@ class ImageViewHolder extends ViewHolder { .load(a.getHeader()) .diskCacheStrategy(NONE) .error(ERROR_RES) - .transform(transformation) + .optionalTransform(transformation) + .optionalTransform(WebpDrawable.class, + new WebpDrawableTransformation(transformation)) .transition(withCrossFade()) .into(imageView) .waitForLayout();