Apply the quick contact color to default photos in the compact editor

Bug 19124091

Change-Id: I375fc8c88ab7b1bd452fbeab0e3e6444b83be094
diff --git a/res/layout/compact_contact_editor_fragment.xml b/res/layout/compact_contact_editor_fragment.xml
index a61b290..1a0788e 100644
--- a/res/layout/compact_contact_editor_fragment.xml
+++ b/res/layout/compact_contact_editor_fragment.xml
@@ -37,7 +37,8 @@
                 android:layout_gravity="center_horizontal"
                 android:orientation="vertical">
 
-            <ImageView android:id="@+id/photo"
+            <com.android.contacts.widget.QuickContactImageView
+                    android:id="@+id/photo"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     android:clickable="true"
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
index e4e9049..46edc31 100644
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
@@ -161,6 +161,12 @@
     public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED =
             "finishActivityOnSaveCompleted";
 
+    /**
+     * Intent key to pass the calculated photo palette calculated by
+     * {@link com.android.contacts.quickcontact.QuickContactActivity} to the compact editor.
+     */
+    public static final String INTENT_KEY_MATERIAL_PALETTE = "materialPalette";
+
     protected ContactEditor mFragment;
     private boolean mFinishActivityOnSaveCompleted;
 
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index c93f873..5635d09 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -19,10 +19,12 @@
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
 import com.android.contacts.activities.CompactContactEditorActivity;
+import com.android.contacts.activities.ContactEditorBaseActivity;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.detail.PhotoSelectionHandler;
 import com.android.contacts.util.ContactPhotoUtils;
 
@@ -50,6 +52,7 @@
     private static final String KEY_PHOTO_URI = "photo_uri";
     private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
     private static final String KEY_UPDATED_PHOTOS = "updated_photos";
+    private static final String KEY_MATERIAL_PALETTE = "material_palette";
 
     /**
      * Displays a PopupWindow with photo edit options.
@@ -112,6 +115,7 @@
     private Uri mPhotoUri;
     private long mPhotoRawContactId;
     private Bundle mUpdatedPhotos = new Bundle();
+    private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
 
     @Override
     public void onCreate(Bundle savedState) {
@@ -121,6 +125,10 @@
             mPhotoUri = savedState.getParcelable(KEY_PHOTO_URI);
             mPhotoRawContactId = savedState.getLong(KEY_PHOTO_RAW_CONTACT_ID);
             mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
+            mMaterialPalette = savedState.getParcelable(KEY_MATERIAL_PALETTE);
+        } else {
+            mMaterialPalette = getActivity().getIntent().getParcelableExtra(
+                    ContactEditorBaseActivity.INTENT_KEY_MATERIAL_PALETTE);
         }
     }
 
@@ -139,6 +147,9 @@
         outState.putParcelable(KEY_PHOTO_URI, mPhotoUri);
         outState.putLong(KEY_PHOTO_RAW_CONTACT_ID, mPhotoRawContactId);
         outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
+        if (mMaterialPalette != null) {
+            outState.putParcelable(KEY_MATERIAL_PALETTE, mMaterialPalette);
+        }
         super.onSaveInstanceState(outState);
     }
 
@@ -162,7 +173,7 @@
 
         final CompactRawContactsEditorView editorView = getContent();
         editorView.setListener(this);
-        editorView.setState(mState, mViewIdGenerator);
+        editorView.setState(mState, mMaterialPalette, mViewIdGenerator);
         editorView.setEnabled(isEnabled());
         editorView.setVisibility(View.VISIBLE);
 
diff --git a/src/com/android/contacts/editor/CompactHeaderView.java b/src/com/android/contacts/editor/CompactHeaderView.java
index d150902..5634b8a 100644
--- a/src/com/android/contacts/editor/CompactHeaderView.java
+++ b/src/com/android/contacts/editor/CompactHeaderView.java
@@ -24,9 +24,11 @@
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.editor.CompactContactEditorFragment.PhotoHandler;
 import com.android.contacts.util.ContactPhotoUtils;
 import com.android.contacts.util.SchedulingUtils;
+import com.android.contacts.widget.QuickContactImageView;
 
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -59,8 +61,9 @@
     private ValuesDelta mValuesDelta;
     private boolean mReadOnly;
     private boolean mIsPhotoSet;
+    private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
 
-    private ImageView mPhotoImageView;
+    private QuickContactImageView mPhotoImageView;
 
     public CompactHeaderView(Context context) {
         this(context, null);
@@ -81,14 +84,17 @@
         super.onFinishInflate();
         mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
 
-        mPhotoImageView = (ImageView) findViewById(R.id.photo);
+        mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo);
         mPhotoImageView.setOnClickListener(this);
     }
 
     public void setValues(DataKind dataKind, ValuesDelta valuesDelta,
-            RawContactDelta rawContactDelta, boolean readOnly, ViewIdGenerator viewIdGenerator) {
+            RawContactDelta rawContactDelta, boolean readOnly,
+            MaterialColorMapUtils.MaterialPalette materialPalette,
+            ViewIdGenerator viewIdGenerator) {
         mValuesDelta = valuesDelta;
         mReadOnly = readOnly;
+        mMaterialPalette = materialPalette;
 
         setId(viewIdGenerator.getId(rawContactDelta, dataKind, valuesDelta, /* viewIndex =*/ 0));
 
@@ -122,6 +128,10 @@
             }
         }
 
+        if (!mIsPhotoSet && mMaterialPalette != null) {
+            mPhotoImageView.setTint(materialPalette.mPrimaryColor);
+        }
+
         // Make the photo a square
         SchedulingUtils.doOnPreDraw(this, /* drawNextFrame =*/ false, new Runnable() {
             @Override
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 7506f5a..6560ad0 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -25,6 +25,7 @@
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountType.EditField;
 import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.editor.CompactContactEditorFragment.PhotoHandler;
 
 import android.content.Context;
@@ -70,6 +71,7 @@
     private AccountTypeManager mAccountTypeManager;
     private LayoutInflater mLayoutInflater;
     private ViewIdGenerator mViewIdGenerator;
+    private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
 
     private CompactHeaderView mHeader;
     private ViewGroup mNames;
@@ -182,7 +184,9 @@
         return mPhotoRawContactId;
     }
 
-    public void setState(RawContactDeltaList rawContactDeltas, ViewIdGenerator viewIdGenerator) {
+    public void setState(RawContactDeltaList rawContactDeltas,
+            MaterialColorMapUtils.MaterialPalette materialPalette,
+            ViewIdGenerator viewIdGenerator) {
         mNames.removeAllViews();
         mPhoneticNames.removeAllViews();
         mNicknames.removeAllViews();
@@ -197,6 +201,7 @@
         mViewIdGenerator = viewIdGenerator;
         setId(mViewIdGenerator.getId(rawContactDeltas.get(0), /* dataKind =*/ null,
                 /* valuesDelta =*/ null, ViewIdGenerator.NO_VIEW_INDEX));
+        mMaterialPalette = materialPalette;
 
         addHeaderView(rawContactDeltas, viewIdGenerator);
         addStructuredNameView(rawContactDeltas);
@@ -224,7 +229,7 @@
                     final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
                             dataKind.mimeType, /* forceSelection =*/ true);
                     mHeader.setValues(dataKind, valuesDelta, rawContactDelta,
-                            /* readOnly =*/ !dataKind.editable, viewIdGenerator);
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette, viewIdGenerator);
                     return;
                 }
             }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index bec1568..cf6cc47 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -92,6 +92,7 @@
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorBaseActivity;
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.ClipboardUtils;
 import com.android.contacts.common.Collapser;
@@ -2151,6 +2152,10 @@
         final Intent intent = new Intent(Intent.ACTION_EDIT, mContactData.getLookupUri());
         intent.setPackage(this.getPackageName());
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+        if (mHasComputedThemeColor) {
+            intent.putExtra(ContactEditorBaseActivity.INTENT_KEY_MATERIAL_PALETTE,
+                    new MaterialPalette(mColorFilterColor, mStatusBarColor));
+        }
         return intent;
     }