diff --git a/res/values/colors.xml b/res/values/colors.xml
index 2ccf643..b8119bc 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -102,6 +102,23 @@
#6733b5e5
#44000000
+
+ - #DB4437
+ - #E91E63
+ - #9C27B0
+ - #673AB7
+ - #3F51B5
+ - #4285F4
+ - #039BE5
+ - #0097A7
+ - #009688
+ - #0F9D58
+ - #689F38
+ - #EF6C00
+ - #FF5722
+ - #757575
+
+
#ffffff
#29000000
diff --git a/res/values/config.xml b/res/values/config.xml
index 954f5ed..c3038fe 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -18,4 +18,7 @@
0
+
+
+ true
diff --git a/src/com/android/messaging/datamodel/media/AvatarRequest.java b/src/com/android/messaging/datamodel/media/AvatarRequest.java
index 6a738c7..c6b06b1 100644
--- a/src/com/android/messaging/datamodel/media/AvatarRequest.java
+++ b/src/com/android/messaging/datamodel/media/AvatarRequest.java
@@ -17,6 +17,7 @@ package com.android.messaging.datamodel.media;
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.Matrix;
@@ -27,6 +28,7 @@ import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.media.ExifInterface;
import android.net.Uri;
+import android.text.TextUtils;
import com.android.messaging.R;
import com.android.messaging.util.Assert;
@@ -42,10 +44,12 @@ import java.util.List;
public class AvatarRequest extends UriImageRequest {
private static Bitmap sDefaultPersonBitmap;
private static Bitmap sDefaultPersonBitmapLarge;
+ private TypedArray mColors;
public AvatarRequest(final Context context,
final AvatarRequestDescriptor descriptor) {
super(context, descriptor);
+ mColors = mContext.getResources().obtainTypedArray(R.array.letter_tile_colors);
}
@Override
@@ -116,7 +120,7 @@ public class AvatarRequest extends UriImageRequest {
private Bitmap renderDefaultAvatar(final int width, final int height) {
final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height,
- getBackgroundColor());
+ getBackgroundColor(AvatarUriUtil.getIdentifier(mDescriptor.uri)));
final Canvas canvas = new Canvas(bitmap);
if (sDefaultPersonBitmap == null) {
@@ -158,7 +162,7 @@ public class AvatarRequest extends UriImageRequest {
final float halfHeight = height / 2;
final int minOfWidthAndHeight = Math.min(width, height);
final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height,
- getBackgroundColor());
+ getBackgroundColor(AvatarUriUtil.getIdentifier(mDescriptor.uri)));
final Resources resources = mContext.getResources();
final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
@@ -178,8 +182,15 @@ public class AvatarRequest extends UriImageRequest {
return bitmap;
}
- private int getBackgroundColor() {
- return mContext.getResources().getColor(R.color.primary_color);
+ private int getBackgroundColor(final String identifier) {
+ if (!TextUtils.isEmpty(identifier) &&
+ mContext.getResources().getBoolean(R.bool.contact_colors)) {
+ int idcolor = Math.abs(identifier.hashCode()) % mColors.length();
+ return mColors.getColor(idcolor,
+ mContext.getResources().getColor(R.color.primary_color));
+ } else {
+ return mContext.getResources().getColor(R.color.primary_color);
+ }
}
@Override
diff --git a/src/com/android/messaging/ui/ConversationDrawables.java b/src/com/android/messaging/ui/ConversationDrawables.java
index cf858e2..46f483f 100644
--- a/src/com/android/messaging/ui/ConversationDrawables.java
+++ b/src/com/android/messaging/ui/ConversationDrawables.java
@@ -17,6 +17,7 @@ package com.android.messaging.ui;
import android.content.Context;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import com.android.messaging.Factory;
@@ -52,6 +53,7 @@ public class ConversationDrawables {
private int mIncomingAudioButtonColor;
private int mSelectedBubbleColor;
private int mThemeColor;
+ private TypedArray mColors;
public static ConversationDrawables get() {
if (sInstance == null) {
@@ -102,10 +104,11 @@ public class ConversationDrawables {
resources.getColor(R.color.message_audio_button_color_incoming);
mSelectedBubbleColor = resources.getColor(R.color.message_bubble_color_selected);
mThemeColor = resources.getColor(R.color.primary_color);
+ mColors = resources.obtainTypedArray(R.array.letter_tile_colors);
}
public Drawable getBubbleDrawable(final boolean selected, final boolean incoming,
- final boolean needArrow, final boolean isError) {
+ final boolean needArrow, final boolean isError, final String identifier) {
final Drawable protoDrawable;
if (needArrow) {
if (incoming) {
@@ -127,7 +130,13 @@ public class ConversationDrawables {
if (isError) {
color = mIncomingErrorBubbleColor;
} else {
- color = mThemeColor;
+ if (identifier != null &&
+ mContext.getResources().getBoolean(R.bool.contact_colors)) {
+ int idcolor = Math.abs(identifier.hashCode()) % mColors.length();
+ color = mColors.getColor(idcolor, mThemeColor);
+ } else {
+ color = mThemeColor;
+ }
}
} else {
color = mOutgoingBubbleColor;
diff --git a/src/com/android/messaging/ui/conversation/ConversationMessageView.java b/src/com/android/messaging/ui/conversation/ConversationMessageView.java
index 282e172..935a23c 100644
--- a/src/com/android/messaging/ui/conversation/ConversationMessageView.java
+++ b/src/com/android/messaging/ui/conversation/ConversationMessageView.java
@@ -701,7 +701,8 @@ public class ConversationMessageView extends FrameLayout implements View.OnClick
isSelected(),
incoming,
false /* needArrow */,
- mData.hasIncomingErrorStatus());
+ mData.hasIncomingErrorStatus(),
+ mData.getSenderContactLookupKey());
textMinHeight = messageTextMinHeightDefault;
textTopMargin = messageTopPaddingClustered;
textTopPadding = textTopPaddingDefault;
@@ -729,7 +730,8 @@ public class ConversationMessageView extends FrameLayout implements View.OnClick
isSelected(),
incoming,
shouldShowMessageBubbleArrow(),
- mData.hasIncomingErrorStatus());
+ mData.hasIncomingErrorStatus(),
+ mData.getSenderContactLookupKey());
textMinHeight = messageTextMinHeightDefault;
textTopMargin = 0;
textTopPadding = textTopPaddingDefault;
@@ -1121,7 +1123,7 @@ public class ConversationMessageView extends FrameLayout implements View.OnClick
audioView.bindMessagePartData(attachment, mData.getIsIncoming(), isSelected());
audioView.setBackground(ConversationDrawables.get().getBubbleDrawable(
isSelected(), mData.getIsIncoming(), false /* needArrow */,
- mData.hasIncomingErrorStatus()));
+ mData.hasIncomingErrorStatus(), mData.getSenderContactLookupKey()));
}
@Override
@@ -1138,7 +1140,7 @@ public class ConversationMessageView extends FrameLayout implements View.OnClick
attachment));
personView.setBackground(ConversationDrawables.get().getBubbleDrawable(
isSelected(), mData.getIsIncoming(), false /* needArrow */,
- mData.hasIncomingErrorStatus()));
+ mData.hasIncomingErrorStatus(), mData.getSenderContactLookupKey()));
final int nameTextColorRes;
final int detailsTextColorRes;
if (isSelected()) {