From 5eec3c954127224ccad75aa16cf0e6a55df453a2 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 25 Sep 2018 00:13:16 -0700 Subject: [PATCH] Add hairline border to avatars. --- .../securesms/components/AvatarImageView.java | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/AvatarImageView.java b/src/org/thoughtcrime/securesms/components/AvatarImageView.java index 8bb1bfae11..7ea9bffbf9 100644 --- a/src/org/thoughtcrime/securesms/components/AvatarImageView.java +++ b/src/org/thoughtcrime/securesms/components/AvatarImageView.java @@ -3,6 +3,9 @@ package org.thoughtcrime.securesms.components; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; import android.provider.ContactsContract; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -18,21 +21,42 @@ import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.util.ThemeUtil; public class AvatarImageView extends AppCompatImageView { private static final String TAG = AvatarImageView.class.getSimpleName(); - private boolean inverted; - private OnClickListener listener = null; + private static final Paint LIGHT_THEME_OUTLINE_PAINT = new Paint(); + private static final Paint DARK_THEME_OUTLINE_PAINT = new Paint(); + + static { + LIGHT_THEME_OUTLINE_PAINT.setColor(Color.argb((int) (255 * 0.2), 0, 0, 0)); + LIGHT_THEME_OUTLINE_PAINT.setStyle(Paint.Style.STROKE); + LIGHT_THEME_OUTLINE_PAINT.setStrokeWidth(1f); + LIGHT_THEME_OUTLINE_PAINT.setAntiAlias(true); + + DARK_THEME_OUTLINE_PAINT.setColor(Color.argb((int) (255 * 0.2), 255, 255, 255)); + DARK_THEME_OUTLINE_PAINT.setStyle(Paint.Style.STROKE); + DARK_THEME_OUTLINE_PAINT.setStrokeWidth(1f); + DARK_THEME_OUTLINE_PAINT.setAntiAlias(true); + } + + private boolean inverted; + private Paint outlinePaint; + private OnClickListener listener; public AvatarImageView(Context context) { super(context); - setScaleType(ScaleType.CENTER_CROP); + initialize(context, null); } public AvatarImageView(Context context, AttributeSet attrs) { super(context, attrs); + initialize(context, attrs); + } + + private void initialize(@NonNull Context context, @Nullable AttributeSet attrs) { setScaleType(ScaleType.CENTER_CROP); if (attrs != null) { @@ -40,6 +64,19 @@ public class AvatarImageView extends AppCompatImageView { inverted = typedArray.getBoolean(0, false); typedArray.recycle(); } + + outlinePaint = ThemeUtil.isDarkTheme(getContext()) ? DARK_THEME_OUTLINE_PAINT : LIGHT_THEME_OUTLINE_PAINT; + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + float cx = canvas.getWidth() / 2; + float cy = canvas.getHeight() / 2; + float radius = (canvas.getWidth() / 2) - (outlinePaint.getStrokeWidth() / 2); + + canvas.drawCircle(cx, cy, radius, outlinePaint); } @Override