Blur avatar photos from unknown senders when in message request state.

This commit is contained in:
Cody Henthorne
2021-04-23 14:42:51 -04:00
committed by GitHub
parent bf124b87fa
commit ad81b310e3
19 changed files with 546 additions and 113 deletions

View File

@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.util;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.text.TextUtils;
@@ -108,7 +107,11 @@ public final class AvatarUtil {
@WorkerThread
public static @NonNull Icon getIconForShortcut(@NonNull Context context, @NonNull Recipient recipient) {
try {
return Icon.createWithAdaptiveBitmap(GlideApp.with(context).asBitmap().load(new ConversationShortcutPhoto(recipient)).submit().get());
GlideRequest<Bitmap> glideRequest = GlideApp.with(context).asBitmap().load(new ConversationShortcutPhoto(recipient));
if (recipient.shouldBlurAvatar()) {
glideRequest = glideRequest.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS));
}
return Icon.createWithAdaptiveBitmap(glideRequest.submit().get());
} catch (ExecutionException | InterruptedException e) {
throw new AssertionError("This call should not fail.");
}
@@ -117,7 +120,11 @@ public final class AvatarUtil {
@WorkerThread
public static @NonNull IconCompat getIconCompatForShortcut(@NonNull Context context, @NonNull Recipient recipient) {
try {
return IconCompat.createWithAdaptiveBitmap(GlideApp.with(context).asBitmap().load(new ConversationShortcutPhoto(recipient)).submit().get());
GlideRequest<Bitmap> glideRequest = GlideApp.with(context).asBitmap().load(new ConversationShortcutPhoto(recipient));
if (recipient.shouldBlurAvatar()) {
glideRequest = glideRequest.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS));
}
return IconCompat.createWithAdaptiveBitmap(glideRequest.submit().get());
} catch (ExecutionException | InterruptedException e) {
throw new AssertionError("This call should not fail.");
}
@@ -152,9 +159,15 @@ public final class AvatarUtil {
photo = recipient.getContactPhoto();
}
return glideRequest.load(photo)
.error(getFallback(context, recipient))
.diskCacheStrategy(DiskCacheStrategy.ALL);
final GlideRequest<T> request = glideRequest.load(photo)
.error(getFallback(context, recipient))
.diskCacheStrategy(DiskCacheStrategy.ALL);
if (recipient.shouldBlurAvatar()) {
return request.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS));
} else {
return request;
}
}
private static Drawable getFallback(@NonNull Context context, @NonNull Recipient recipient) {

View File

@@ -41,7 +41,9 @@ public final class BlurTransformation extends BitmapTransformation {
Matrix scaleMatrix = new Matrix();
scaleMatrix.setScale(bitmapScaleFactor, bitmapScaleFactor);
Bitmap blurredBitmap = Bitmap.createBitmap(toTransform, 0, 0, outWidth, outHeight, scaleMatrix, true);
int targetWidth = Math.min(outWidth, toTransform.getWidth());
int targetHeight = Math.min(outHeight, toTransform.getHeight());
Bitmap blurredBitmap = Bitmap.createBitmap(toTransform, 0, 0, targetWidth, targetHeight, scaleMatrix, true);
Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED);
Allocation output = Allocation.createTyped(rs, input.getType());
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));