Fix avatar blurring during calls.

This commit is contained in:
Alex Hart
2023-07-07 14:50:50 -03:00
parent 1d6f4fd4e7
commit f628ffca06
2 changed files with 19 additions and 9 deletions

View File

@@ -14,6 +14,9 @@ import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import com.bumptech.glide.load.engine.DiskCacheStrategy; 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.target.CustomViewTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
@@ -57,8 +60,7 @@ public final class AvatarUtil {
GlideApp.with(target) GlideApp.with(target)
.load(photo) .load(photo)
.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS)) .transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS), new CenterCrop())
.centerCrop()
.into(new CustomViewTarget<View, Drawable>(target) { .into(new CustomViewTarget<View, Drawable>(target) {
@Override @Override
public void onLoadFailed(@Nullable Drawable errorDrawable) { 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) { 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) { 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) { 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); 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; final ContactPhoto photo;
if (Recipient.self().equals(recipient) && loadSelf) { if (Recipient.self().equals(recipient) && loadSelf) {
photo = new ProfileContactPhoto(recipient); photo = new ProfileContactPhoto(recipient);
@@ -164,7 +166,14 @@ public final class AvatarUtil {
.diskCacheStrategy(DiskCacheStrategy.ALL); .diskCacheStrategy(DiskCacheStrategy.ALL);
if (recipient.shouldBlurAvatar()) { 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 { } else {
return request; return request;
} }

View File

@@ -20,6 +20,7 @@ import java.util.Locale;
public final class BlurTransformation extends BitmapTransformation { public final class BlurTransformation extends BitmapTransformation {
private static final int VERSION = 1;
public static final float MAX_RADIUS = 25f; public static final float MAX_RADIUS = 25f;
private final RenderScript rs; private final RenderScript rs;
@@ -58,6 +59,6 @@ public final class BlurTransformation extends BitmapTransformation {
@Override @Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { 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());
} }
} }