package org.thoughtcrime.securesms.contacts.avatars; import android.content.Context; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.support.annotation.DrawableRes; import android.support.v4.graphics.ColorUtils; import android.widget.ImageView; import com.amulyakhare.textdrawable.TextDrawable; import com.makeramen.roundedimageview.RoundedDrawable; public class ResourceContactPhoto implements ContactPhoto { private final int resourceId; private final int callCardResourceId; ResourceContactPhoto(@DrawableRes int resourceId) { this(resourceId, resourceId); } ResourceContactPhoto(@DrawableRes int resourceId, @DrawableRes int callCardResourceId) { this.resourceId = resourceId; this.callCardResourceId = callCardResourceId; } @Override public Drawable asDrawable(Context context, int color) { return asDrawable(context, color, false); } @Override public Drawable asDrawable(Context context, int color, boolean inverted) { Drawable background = TextDrawable.builder().buildRound(" ", inverted ? Color.WHITE : color); RoundedDrawable foreground = (RoundedDrawable) RoundedDrawable.fromDrawable(context.getResources().getDrawable(resourceId)); foreground.setScaleType(ImageView.ScaleType.CENTER); if (inverted) { foreground.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); } return new ExpandingLayerDrawable(new Drawable[] {background, foreground}); } @Override public Drawable asCallCard(Context context) { return context.getResources().getDrawable(callCardResourceId); } @Override public boolean isGenerated() { return false; } @Override public boolean isResource() { return true; } private static class ExpandingLayerDrawable extends LayerDrawable { public ExpandingLayerDrawable(Drawable[] layers) { super(layers); } @Override public int getIntrinsicWidth() { return -1; } @Override public int getIntrinsicHeight() { return -1; } } }