mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Blur avatar photos from unknown senders when in message request state.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user