Removed com.amulyakhare.textdrawable

Cleaned up references to TextDrawable.
Also cleaned up the way we  load layered drawables, used in ProfilePictureView for the load state as the icons were stretched across and didn't look nice.
This commit is contained in:
ThomasSession
2024-08-08 17:04:59 +10:00
committed by fanchao
parent 518fe5e712
commit 62873ee773
10 changed files with 40 additions and 309 deletions

View File

@@ -5,6 +5,6 @@ import android.graphics.drawable.Drawable;
public interface FallbackContactPhoto {
public Drawable asDrawable(Context context, int color);
public Drawable asDrawable(Context context, int color, boolean inverted);
public Drawable asDrawable(Context context, int color, boolean inverted, Float padding);
}

View File

@@ -1,83 +0,0 @@
package org.session.libsession.avatars;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.text.TextUtils;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.amulyakhare.textdrawable.TextDrawable;
import org.session.libsession.R;
import org.session.libsession.utilities.ThemeUtil;
import org.session.libsession.utilities.ViewUtil;
import java.util.regex.Pattern;
public class GeneratedContactPhoto implements FallbackContactPhoto {
private static final Pattern PATTERN = Pattern.compile("[^\\p{L}\\p{Nd}\\p{S}]+");
private static final Typeface TYPEFACE = Typeface.create("sans-serif-medium", Typeface.NORMAL);
private final String name;
private final int fallbackResId;
public GeneratedContactPhoto(@NonNull String name, @DrawableRes int fallbackResId) {
this.name = name;
this.fallbackResId = fallbackResId;
}
@Override
public Drawable asDrawable(Context context, int color) {
return asDrawable(context, color,false);
}
@Override
public Drawable asDrawable(Context context, int color, boolean inverted) {
int targetSize = context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size);
String character = getAbbreviation(name);
if (!TextUtils.isEmpty(character)) {
Drawable base = TextDrawable.builder()
.beginConfig()
.width(targetSize)
.height(targetSize)
.useFont(TYPEFACE)
.fontSize(ViewUtil.dpToPx(context, 24))
.textColor(inverted ? color : Color.WHITE)
.endConfig()
.buildRound(character, inverted ? Color.WHITE : color);
Drawable gradient = context.getResources().getDrawable(ThemeUtil.isDarkTheme(context) ? R.drawable.avatar_gradient_dark
: R.drawable.avatar_gradient_light);
return new LayerDrawable(new Drawable[] { base, gradient });
}
return new ResourceContactPhoto(fallbackResId).asDrawable(context, color, inverted);
}
private @Nullable String getAbbreviation(String name) {
String[] parts = name.split(" ");
StringBuilder builder = new StringBuilder();
int count = 0;
for (int i = 0; i < parts.length && count < 2; i++) {
String cleaned = PATTERN.matcher(parts[i]).replaceFirst("");
if (!TextUtils.isEmpty(cleaned)) {
builder.appendCodePoint(cleaned.codePointAt(0));
count++;
}
}
if (builder.length() == 0) {
return null;
} else {
return builder.toString();
}
}
}

View File

@@ -4,13 +4,13 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.widget.ImageView;
import androidx.annotation.DrawableRes;
import androidx.appcompat.content.res.AppCompatResources;
import com.amulyakhare.textdrawable.TextDrawable;
import com.makeramen.roundedimageview.RoundedDrawable;
import org.session.libsession.R;
@@ -25,19 +25,33 @@ public class ResourceContactPhoto implements FallbackContactPhoto {
}
@Override
public Drawable asDrawable(Context context, int color) {
return asDrawable(context, color, false);
public Drawable asDrawable(Context context, int color, boolean inverted) {
return asDrawable(context, 0, false, 0f);
}
@Override
public Drawable asDrawable(Context context, int color, boolean inverted) {
Drawable background = TextDrawable.builder().buildRound(" ", inverted ? Color.WHITE : color);
public Drawable asDrawable(Context context, int color, boolean inverted, Float padding) {
// rounded colored background
GradientDrawable background = new GradientDrawable();
background.setShape(GradientDrawable.OVAL);
background.setColor(inverted ? Color.WHITE : color);
// resource image in the foreground
RoundedDrawable foreground = (RoundedDrawable) RoundedDrawable.fromDrawable(AppCompatResources.getDrawable(context, resourceId));
foreground.setScaleType(ImageView.ScaleType.CENTER_CROP);
if (foreground != null) {
if(padding == 0f){
foreground.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
// apply padding via a transparent border oterhwise things get misaligned
foreground.setScaleType(ImageView.ScaleType.FIT_CENTER);
foreground.setBorderColor(Color.TRANSPARENT);
foreground.setBorderWidth(padding);
}
if (inverted) {
foreground.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
if (inverted) {
foreground.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}
}
Drawable gradient = AppCompatResources.getDrawable(

View File

@@ -3,6 +3,8 @@ package org.session.libsession.avatars;
import android.content.Context;
import android.graphics.drawable.Drawable;
import androidx.core.content.ContextCompat;
import com.makeramen.roundedimageview.RoundedDrawable;
public class TransparentContactPhoto implements FallbackContactPhoto {
@@ -10,13 +12,13 @@ public class TransparentContactPhoto implements FallbackContactPhoto {
public TransparentContactPhoto() {}
@Override
public Drawable asDrawable(Context context, int color) {
return asDrawable(context, color, false);
public Drawable asDrawable(Context context, int color, boolean inverted) {
return asDrawable(context, color, inverted, 0f);
}
@Override
public Drawable asDrawable(Context context, int color, boolean inverted) {
return RoundedDrawable.fromDrawable(context.getResources().getDrawable(android.R.color.transparent));
public Drawable asDrawable(Context context, int color, boolean inverted, Float padding) {
return RoundedDrawable.fromDrawable(ContextCompat.getDrawable(context, android.R.color.transparent));
}
}