From e5e5b93884c378b86d111c5e2a1f0ed145881d88 Mon Sep 17 00:00:00 2001 From: Lukas Barth Date: Sun, 9 Mar 2014 14:00:39 +0100 Subject: [PATCH] Add k-9 style avatars to group conversations Closes #1107 --- assets/fonts/Roboto-Light.ttf | Bin 0 -> 115200 bytes res/values/arrays.xml | 14 ++ .../securesms/ConversationItem.java | 12 +- .../securesms/recipients/AvatarGenerator.java | 120 ++++++++++++++++++ .../securesms/recipients/Recipient.java | 9 ++ 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 assets/fonts/Roboto-Light.ttf create mode 100644 src/org/thoughtcrime/securesms/recipients/AvatarGenerator.java diff --git a/assets/fonts/Roboto-Light.ttf b/assets/fonts/Roboto-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..13bf13af00e38e751a475526675e12d27753d4cc GIT binary patch literal 115200 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 Український + + #6dcaec + #cf9fe7 + #b6db49 + #ffd060 + #ff7979 + + #2cb1e1 + #c182e0 + #92c500 + #ffb61c + #f83a3a + + zz en diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java index fbb007f9cc..6db7dd0f54 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/ConversationItem.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.TypedArray; +import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; @@ -40,6 +41,7 @@ import android.widget.Toast; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.DatabaseFactory; +import org.thoughtcrime.securesms.contacts.ContactPhotoFactory; import org.thoughtcrime.securesms.database.MmsDatabase; import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; @@ -405,7 +407,15 @@ public class ConversationItem extends LinearLayout { private void setContactPhotoForRecipient(final Recipient recipient) { if (contactPhoto == null) return; - contactPhoto.setImageBitmap(recipient.getCircleCroppedContactPhoto()); + Bitmap contactPhotoBitmap; + + if ((recipient.getContactPhoto() == ContactPhotoFactory.getDefaultContactPhoto(context)) && (groupThread)) { + contactPhotoBitmap = recipient.getGeneratedAvatar(context); + } else { + contactPhotoBitmap = recipient.getCircleCroppedContactPhoto(); + } + + contactPhoto.setImageBitmap(contactPhotoBitmap); contactPhoto.setOnClickListener(new View.OnClickListener() { @Override diff --git a/src/org/thoughtcrime/securesms/recipients/AvatarGenerator.java b/src/org/thoughtcrime/securesms/recipients/AvatarGenerator.java new file mode 100644 index 0000000000..188514435c --- /dev/null +++ b/src/org/thoughtcrime/securesms/recipients/AvatarGenerator.java @@ -0,0 +1,120 @@ +package org.thoughtcrime.securesms.recipients; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.Typeface; + +import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.contacts.ContactPhotoFactory; +import org.thoughtcrime.securesms.util.BitmapUtil; + +/** + * Utility class to generate avatars for contacts who don't have a contact + * picture set. + * + * @author Lukas Barth + */ +public class AvatarGenerator { + + public static Bitmap generateFor(Context context, Recipient recipient) { + if ((recipient == null) || (recipient.getName() == null)) { + return BitmapUtil.getCircleCroppedBitmap(ContactPhotoFactory.getDefaultContactPhoto(context)); + } + + final int size = ContactPhotoFactory.getDefaultContactPhoto(context).getHeight(); + final Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(output); + final int color = getColorForRecipient(recipient, context); + final Paint paint = new Paint(); + final int innerRectOffset = (int) Math.ceil((size - Math.sqrt(2) * (size / 2)) / 2); + final Rect innerRect = new Rect(innerRectOffset, innerRectOffset, + size - innerRectOffset, size - innerRectOffset); + + paint.setAntiAlias(true); + paint.setColor(color); + canvas.drawCircle(size / 2, size / 2, size / 2, paint); + + paint.setColor(Color.WHITE); + Typeface robotoLightTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf"); + paint.setTypeface(robotoLightTypeface); + setFontSize(innerRect, paint); + + paint.setTextAlign(Paint.Align.CENTER); + + int initialIndex = 0; + char[] contactName = recipient.getName().toCharArray(); + + if (contactName.length == 0) { + contactName = new char[]{'?'}; + initialIndex = 0; + } else { + while ((! Character.isLetter(contactName[initialIndex]))) { + initialIndex ++; + + if (initialIndex >= contactName.length) { + contactName[0] = '?'; + initialIndex = 0; + break; + } + } + } + + Rect textBounds = new Rect(); + paint.getTextBounds(contactName, initialIndex, 1, textBounds); + + int bottomOffset = (innerRect.height() - textBounds.height()) / 2; + + canvas.drawText(Character.toString(contactName[initialIndex]), + innerRect.centerX(), innerRect.bottom - bottomOffset, paint); + + return output; + } + + + private static int getColorForRecipient(Recipient recipient, Context context) { + if ((recipient == null) || (recipient.getName() == null)) { + return Color.WHITE; + } + + long nameHash = recipient.getName().hashCode(); + Resources res = context.getResources(); + TypedArray colorArray = res.obtainTypedArray(R.array.avatar_colors); + int index = Math.abs((int) (nameHash % colorArray.length())); + int color = colorArray.getColor(index, Color.BLACK); + + colorArray.recycle(); + + return color; + } + + private static int setFontSize(Rect textRect, Paint paint) { + boolean overflow = false; + int currentSize = 0; + + while (!overflow) { + currentSize++; + paint.setTextSize(currentSize); + + Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt(); + int textHeight = fontMetrics.descent - fontMetrics.ascent; + + if (textHeight > textRect.height()) { + overflow = true; + } + } + + currentSize--; + + currentSize *= 1.2; + + paint.setTextSize(currentSize); + + return currentSize; + } +} diff --git a/src/org/thoughtcrime/securesms/recipients/Recipient.java b/src/org/thoughtcrime/securesms/recipients/Recipient.java index 9efb4b70ef..b4a1160fc8 100644 --- a/src/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/src/org/thoughtcrime/securesms/recipients/Recipient.java @@ -54,6 +54,7 @@ public class Recipient implements Parcelable { private Bitmap contactPhoto; private Bitmap circleCroppedContactPhoto; + private Bitmap generatedAvatar; private Uri contactUri; @@ -64,6 +65,7 @@ public class Recipient implements Parcelable { this.circleCroppedContactPhoto = circleCroppedContactPhoto; this.contactPhoto = contactPhoto; this.recipientId = recipientId; + this.generatedAvatar = null; future.addListener(new FutureTaskListener() { @Override @@ -187,6 +189,13 @@ public class Recipient implements Parcelable { return this.circleCroppedContactPhoto; } + public synchronized Bitmap getGeneratedAvatar(Context context) { + if (this.generatedAvatar == null) + this.generatedAvatar = AvatarGenerator.generateFor(context, this); + + return this.generatedAvatar; + } + public static Recipient getUnknownRecipient(Context context) { return new Recipient("Unknown", "Unknown", -1, null, ContactPhotoFactory.getDefaultContactPhoto(context),