Forward intent extras to editor activity from springboard

Apply the extras once we have selected a raw contact to edit.

Test:
Selected an existing contact to add to and saw passed in
data was correctly applied.
Tested cases where editor auto loads, and picker dialog shows up.
In the case of the picker made sure that selecting any of them
would have the data passed through.

Bug: 32345528
Change-Id: I9a4088b3358ab532362c878394c657781965fb03
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 1b37dab..fe7894a 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -21,6 +21,7 @@
 import android.database.Cursor;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -223,6 +224,8 @@
 
     private boolean mIsExpanded;
 
+    private Bundle mIntentExtras;
+
     private ValuesDelta mPhotoValuesDelta;
 
     public RawContactEditorView(Context context) {
@@ -425,6 +428,10 @@
         }
     }
 
+    public void setIntentExtras(Bundle extras) {
+        mIntentExtras = extras;
+    }
+
     public void setState(RawContactDeltaList rawContactDeltas,
             MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
             boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
@@ -455,6 +462,8 @@
             return;
         }
         pickRawContactDelta();
+        // Apply any intent extras now that we have selected a raw contact delta.
+        applyIntentExtras();
         parseRawContactDelta();
         if (mKindSectionDataMap.isEmpty()) {
             elog("No kind section data parsed from RawContactDelta(s)");
@@ -531,6 +540,17 @@
 
     }
 
+    private void applyIntentExtras() {
+        if (mIntentExtras == null || mIntentExtras.size() == 0) {
+            return;
+        }
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
+        final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+        RawContactModifier.parseExtras(getContext(), type, mCurrentRawContactDelta, mIntentExtras);
+        mIntentExtras = null;
+    }
+
     private void parseRawContactDelta() {
         mKindSectionDataMap.clear();
         mSortedMimetypes.clear();