Using an intent to switch to aggregation suggestion.

When the user picks an aggregation suggestion to edit,
switching to the new editor is now done with an intent
instead of a reload. This adds a nice transitional
animation.

Change-Id: Iaeab24a6328be51dcde69c1a6ed9babc929709a4
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index ba37da4..8ac23a4 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -24,14 +24,18 @@
 
 import android.app.Activity;
 import android.app.Dialog;
+import android.content.ContentValues;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.ContactsContract.Intents.Insert;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 
+import java.util.ArrayList;
+
 public class ContactEditorActivity extends Activity implements
         DialogManager.DialogShowingViewActivity {
     private static final String TAG = "ContactEditorActivity";
@@ -144,6 +148,22 @@
         public void onDeleteRequested(Uri lookupUri) {
             getContactDeletionInteraction().deleteContact(lookupUri);
         }
+
+        @Override
+        public void onEditOtherContactRequested(
+                Uri contactLookupUri, ArrayList<ContentValues> values) {
+            Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+            intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                    | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+            // Pass on all the data that has been entered so far
+            if (values != null && values.size() != 0) {
+                intent.putParcelableArrayListExtra(Insert.DATA, values);
+            }
+
+            startActivity(intent);
+            finish();
+        }
     };
 
     @Override
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index 3efca45..64980a8 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -18,13 +18,13 @@
 
 import com.android.contacts.JoinContactActivity;
 import com.android.contacts.R;
+import com.android.contacts.model.AccountTypes;
 import com.android.contacts.model.BaseAccountType;
 import com.android.contacts.model.EntityDelta;
 import com.android.contacts.model.EntityDelta.ValuesDelta;
 import com.android.contacts.model.EntityDeltaList;
 import com.android.contacts.model.EntityModifier;
 import com.android.contacts.model.GoogleAccountType;
-import com.android.contacts.model.AccountTypes;
 import com.android.contacts.util.EmptyService;
 import com.android.contacts.util.WeakAsyncTask;
 import com.android.contacts.views.ContactLoader;
@@ -66,7 +66,6 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents.Insert;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.MediaStore;
 import android.text.TextUtils;
@@ -941,6 +940,13 @@
          * User decided to delete the contact.
          */
         void onDeleteRequested(Uri lookupUri);
+
+        /**
+         * User switched to editing a different contact (a suggestion from the
+         * aggregation engine).
+         */
+        void onEditOtherContactRequested(
+                Uri contactLookupUri, ArrayList<ContentValues> contentValues);
     }
 
     private class EntityDeltaComparator implements Comparator<EntityDelta> {
@@ -1215,21 +1221,12 @@
 
                 @Override
                 public void onEditAction(Uri contactLookupUri) {
-                    // Save all the data that has been entered so far
-                    ArrayList<ContentValues> values = mState.get(0).getContentValues();
-
-                    // Abandon the currently inserted contact
-                    mState = null;
-
-                    // Load the suggested one
-                    Bundle extras = null;
-                    if (values.size() != 0) {
-                        extras = new Bundle();
-                        extras.putParcelableArrayList(Insert.DATA, values);
+                    // Abandon the currently edited contact and switch to editing
+                    // the suggested one, transferring all the data there
+                    if (mListener != null) {
+                        mListener.onEditOtherContactRequested(
+                                contactLookupUri, mState.get(0).getContentValues());
                     }
-                    load(Intent.ACTION_EDIT, contactLookupUri, Contacts.CONTENT_TYPE, extras);
-                    mStatus = Status.LOADING;
-                    getLoaderManager().restartLoader(LOADER_DATA, null, mDataLoaderListener);
                 }
             });
             suggestionView.bindSuggestion(suggestion);