mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Fix avatar blurring during calls.
This commit is contained in:
@@ -14,6 +14,9 @@ import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
|
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
|
||||
import com.bumptech.glide.request.target.CustomViewTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
|
||||
@@ -57,8 +60,7 @@ public final class AvatarUtil {
|
||||
|
||||
GlideApp.with(target)
|
||||
.load(photo)
|
||||
.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS))
|
||||
.centerCrop()
|
||||
.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS), new CenterCrop())
|
||||
.into(new CustomViewTarget<View, Drawable>(target) {
|
||||
@Override
|
||||
public void onLoadFailed(@Nullable Drawable errorDrawable) {
|
||||
@@ -140,18 +142,18 @@ public final class AvatarUtil {
|
||||
}
|
||||
|
||||
private static <T> GlideRequest<T> requestCircle(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient, int targetSize) {
|
||||
return request(glideRequest, context, recipient, targetSize).circleCrop();
|
||||
return request(glideRequest, context, recipient, targetSize, new CircleCrop());
|
||||
}
|
||||
|
||||
private static <T> GlideRequest<T> requestSquare(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient) {
|
||||
return request(glideRequest, context, recipient, UNDEFINED_SIZE).centerCrop();
|
||||
return request(glideRequest, context, recipient, UNDEFINED_SIZE, new CenterCrop());
|
||||
}
|
||||
|
||||
private static <T> GlideRequest<T> request(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient, int targetSize) {
|
||||
return request(glideRequest, context, recipient, true, targetSize);
|
||||
private static <T> GlideRequest<T> request(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient, int targetSize, @Nullable BitmapTransformation transformation) {
|
||||
return request(glideRequest, context, recipient, true, targetSize, transformation);
|
||||
}
|
||||
|
||||
private static <T> GlideRequest<T> request(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient, boolean loadSelf, int targetSize) {
|
||||
private static <T> GlideRequest<T> request(@NonNull GlideRequest<T> glideRequest, @NonNull Context context, @NonNull Recipient recipient, boolean loadSelf, int targetSize, @Nullable BitmapTransformation transformation) {
|
||||
final ContactPhoto photo;
|
||||
if (Recipient.self().equals(recipient) && loadSelf) {
|
||||
photo = new ProfileContactPhoto(recipient);
|
||||
@@ -164,7 +166,14 @@ public final class AvatarUtil {
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL);
|
||||
|
||||
if (recipient.shouldBlurAvatar()) {
|
||||
return request.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS));
|
||||
BlurTransformation blur = new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS);
|
||||
if (transformation != null) {
|
||||
return request.transform(blur, transformation);
|
||||
} else {
|
||||
return request.transform(blur);
|
||||
}
|
||||
} else if (transformation != null) {
|
||||
return request.transform(transformation);
|
||||
} else {
|
||||
return request;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.util.Locale;
|
||||
|
||||
public final class BlurTransformation extends BitmapTransformation {
|
||||
|
||||
private static final int VERSION = 1;
|
||||
public static final float MAX_RADIUS = 25f;
|
||||
|
||||
private final RenderScript rs;
|
||||
@@ -58,6 +59,6 @@ public final class BlurTransformation extends BitmapTransformation {
|
||||
|
||||
@Override
|
||||
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
|
||||
messageDigest.update(String.format(Locale.US, "blur-%f-%f", bitmapScaleFactor, blurRadius).getBytes());
|
||||
messageDigest.update(String.format(Locale.US, "blur-%f-%f-%d", bitmapScaleFactor, blurRadius, VERSION).getBytes());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user