From 67415a8dcbeff4ab3b52757400fe09fb015cca5c Mon Sep 17 00:00:00 2001 From: Daniel Bartram Date: Fri, 17 Jul 2015 17:44:24 +0100 Subject: [PATCH] Improve generated contact photos with emoji names Improve the logic for generating contact photos with contact names which start with emoji or non-language characters. This fixes the infamous "question-mark-in-a-box" character from appearing in the contact photo for contacts whose names begin with an emoji or a non-language symbol. Closes #3684 --- .../contacts/avatars/GeneratedContactPhoto.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java b/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java index 28aed79a86..9be3ed4b17 100644 --- a/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java +++ b/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java @@ -4,9 +4,9 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; import com.amulyakhare.textdrawable.TextDrawable; -import com.amulyakhare.textdrawable.util.ColorGenerator; import org.thoughtcrime.securesms.R; @@ -33,11 +33,21 @@ public class GeneratedContactPhoto implements ContactPhoto { .height(targetSize) .textColor(inverted ? color : Color.WHITE) .endConfig() - .buildRound(String.valueOf(name.charAt(0)), inverted ? Color.WHITE : color); + .buildRound(getCharacter(name), inverted ? Color.WHITE : color); + } + + private String getCharacter(String name) { + String cleanedName = name.replaceFirst("[^\\p{L}\\p{Nd}\\p{P}\\p{S}]+", ""); + + if (cleanedName.isEmpty()) { + return "#"; + } else { + return String.valueOf(cleanedName.charAt(0)); + } } @Override public Drawable asCallCard(Context context) { - return context.getResources().getDrawable(R.drawable.ic_contact_picture); + return ContextCompat.getDrawable(context, R.drawable.ic_contact_picture); } }