Use MaterialColorMapUtils
Bug: 500800
Change-Id: I050b70a8ac44e73cca327a82efd341e3d81ce3c2
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a04e9cd..b44f34b 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -60,4 +60,8 @@
<!-- Background color of pinned header items. -->
<color name="list_item_pinned_header_color">#f5f5f5</color>
+
+ <!-- The default color used for tinting photos when no color can be extracted via Palette,
+ this is Blue Grey 500 -->
+ <color name="quickcontact_default_photo_tint_color">#607D8B</color>
</resources>
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index bc7dc1f..0411152 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -110,6 +110,8 @@
import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
import com.android.contacts.common.model.dataitem.WebsiteDataItem;
import com.android.contacts.common.util.DateUtils;
+import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.contacts.detail.ContactDetailDisplayUtils;
import com.android.contacts.interactions.CalendarInteractionsLoader;
import com.android.contacts.interactions.CallLogInteractionsLoader;
@@ -124,7 +126,7 @@
import com.android.contacts.util.StructuredPostalUtils;
import com.android.contacts.widget.MultiShrinkScroller;
import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
-import com.google.common.annotations.VisibleForTesting;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
@@ -135,10 +137,8 @@
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* Mostly translucent {@link Activity} that shows QuickContact dialog. It loads
@@ -160,7 +160,6 @@
private static final int ANIMATION_STATUS_BAR_COLOR_CHANGE_DURATION = 150;
private static final int REQUEST_CODE_CONTACT_EDITOR_ACTIVITY = 1;
- private static final float SYSTEM_BAR_BRIGHTNESS_FACTOR = 0.7f;
private static final int SCRIM_COLOR = Color.argb(0xB2, 0, 0, 0);
private static final String SCHEME_SMSTO = "smsto";
private static final String MIMETYPE_SMS = "vnd.android-dir/mms-sms";
@@ -567,7 +566,7 @@
// header tint before the MultiShrinkScroller has been measured will
// cause incorrect tinting calculations.
if (color != 0) {
- setThemeColor(color);
+ setThemeColor(MaterialColorMapUtils.calculateSecondaryColor(color));
}
}
});
@@ -1121,22 +1120,29 @@
return;
}
final Drawable imageViewDrawable = mPhotoView.getDrawable();
- new AsyncTask<Void, Void, Integer>() {
+ new AsyncTask<Void, Void, MaterialPalette>() {
@Override
- protected Integer doInBackground(Void... params) {
+ protected MaterialPalette doInBackground(Void... params) {
+
if (imageViewDrawable instanceof BitmapDrawable) {
final Bitmap bitmap = ((BitmapDrawable) imageViewDrawable).getBitmap();
- return colorFromBitmap(bitmap);
+ final int primaryColor = colorFromBitmap(bitmap);
+ if (primaryColor != 0) {
+ return MaterialColorMapUtils.calculatePrimaryAndSecondaryColor(
+ primaryColor);
+ }
}
if (imageViewDrawable instanceof LetterTileDrawable) {
- return ((LetterTileDrawable) imageViewDrawable).getColor();
+ final int primaryColor = ((LetterTileDrawable) imageViewDrawable).getColor();
+ return MaterialColorMapUtils.calculateSecondaryColor(primaryColor);
}
- return 0;
+ return MaterialColorMapUtils.calculatePrimaryAndSecondaryColor(
+ getResources().getColor(R.color.quickcontact_default_photo_tint_color));
}
@Override
- protected void onPostExecute(Integer color) {
- super.onPostExecute(color);
+ protected void onPostExecute(MaterialPalette palette) {
+ super.onPostExecute(palette);
if (mHasComputedThemeColor) {
// If we had previously computed a theme color from the contact photo,
// then do not update the theme color. Changing the theme color several
@@ -1149,7 +1155,7 @@
// color needs to be extracted
if (imageViewDrawable == mPhotoView.getDrawable()) {
mHasComputedThemeColor = true;
- setThemeColor(color);
+ setThemeColor(palette);
}
}
}.execute();
@@ -1179,27 +1185,18 @@
}.execute();
}
- private void setThemeColor(int color) {
+ private void setThemeColor(MaterialPalette palette) {
// If the color is invalid, use the predefined default
- if (color == 0) {
- color = getResources().getColor(R.color.actionbar_background_color);
- }
- mScroller.setHeaderTintColor(color);
-
- // Create a darker version of the actionbar color. HSV is device dependent
- // and not perceptually-linear. Therefore, we can't say mStatusBarColor is
- // 70% as bright as the action bar color. We can only say: it is a bit darker.
- final float hsvComponents[] = new float[3];
- Color.colorToHSV(color, hsvComponents);
- hsvComponents[2] *= SYSTEM_BAR_BRIGHTNESS_FACTOR;
- mStatusBarColor = Color.HSVToColor(hsvComponents);
+ final int primaryColor = palette.mPrimaryColor;
+ mScroller.setHeaderTintColor(primaryColor);
+ mStatusBarColor = palette.mSecondaryColor;
updateStatusBarColor();
mColorFilter =
- new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP);
- mContactCard.setColorAndFilter(color, mColorFilter);
- mRecentCard.setColorAndFilter(color, mColorFilter);
- mAboutCard.setColorAndFilter(color, mColorFilter);
+ new PorterDuffColorFilter(primaryColor, PorterDuff.Mode.SRC_ATOP);
+ mContactCard.setColorAndFilter(primaryColor, mColorFilter);
+ mRecentCard.setColorAndFilter(primaryColor, mColorFilter);
+ mAboutCard.setColorAndFilter(primaryColor, mColorFilter);
}
private void updateStatusBarColor() {