Do setIntentExtras, on[Save|Join]Completed in base contact edit fragment

Do setGroupMetaData in the child classes since the layout will be
drastically different between the two.

Also moved a public Intent extra constant to the base.

Bug 19124091

Change-Id: Idd20ff39b91eb3584c69e406f1e3472bcb278f42
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
index 94f694e..7cf4298 100644
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
@@ -130,7 +130,7 @@
         void load(String action, Uri lookupUri, Bundle intentExtras);
 
         /**
-         * Merges extras from the intent.
+         * Applies extras from the hosting Activity to the first writable raw contact.
          */
         void setIntentExtras(Bundle extras);
 
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 4291f91..f312a46 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -20,7 +20,6 @@
 import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor;
 
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -55,24 +54,12 @@
     protected void bindEditors() {
     }
 
-    //
-    // ContactEditor
-    //
-
     @Override
-    public void setIntentExtras(Bundle extras) {
+    protected void setGroupMetaData() {
     }
 
     @Override
     protected boolean doSaveAction(int saveMode) {
-        onSaveCompleted(/* hadChanges =*/ false, saveMode,
-                /* saveSucceeded =*/ mLookupUri != null, mLookupUri);
-        return true;
-    }
-
-    @Override
-    public void onJoinCompleted(Uri uri) {
-        onSaveCompleted(/* hadChanges =*/ false, SaveMode.RELOAD,
-                /* saveSucceeded =*/ uri != null, uri);
+        return false;
     }
 }
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index d4f5a5a..b04c919 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -149,6 +149,11 @@
             "disableDeleteMenuOption";
 
     /**
+     * Intent extra to specify a {@link ContactEditor.SaveMode}.
+     */
+    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
+
+    /**
      * Callbacks for Activities that host contact editors Fragments.
      */
     public interface Listener {
@@ -661,6 +666,16 @@
         }
     }
 
+    /**
+     * Invalidates the options menu if we are still associated with an Activity.
+     */
+    protected void invalidateOptionsMenu() {
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
+    }
+
     @Override
     public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
         inflater.inflate(R.menu.edit_contact, menu);
@@ -1061,22 +1076,13 @@
     /**
      * Sets group metadata on all bound editors.
      */
-    protected void setGroupMetaData() {
-        if (mGroupMetaData == null) {
-            return;
-        }
-        int editorCount = mContent.getChildCount();
-        for (int i = 0; i < editorCount; i++) {
-            BaseRawContactEditorView editor = (BaseRawContactEditorView) mContent.getChildAt(i);
-            editor.setGroupMetaData(mGroupMetaData);
-        }
-    }
+    abstract protected void setGroupMetaData();
 
     /**
      * Bind editors using {@link #mState} and other members initialized from the loaded (or new)
      * Contact.
      */
-    abstract void bindEditors();
+    abstract protected void bindEditors();
 
     /**
      * Set the enabled state of editors.
@@ -1135,6 +1141,23 @@
     }
 
     @Override
+    public void setIntentExtras(Bundle extras) {
+        if (extras == null || extras.size() == 0) {
+            return;
+        }
+
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        for (RawContactDelta state : mState) {
+            final AccountType type = state.getAccountType(accountTypes);
+            if (type.areContactsWritable()) {
+                // Apply extras to the first writable raw contact only
+                RawContactModifier.parseExtras(mContext, type, state, extras);
+                break;
+            }
+        }
+    }
+
+    @Override
     public void onJoinCompleted(Uri uri) {
         onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri);
     }
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index c71c891..f30360c 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -71,8 +71,6 @@
     private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
     private static final String KEY_UPDATED_PHOTOS = "updatedPhotos";
 
-    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
-
     // Used to store which raw contact editors have been expanded. Keyed on raw contact ids.
     private HashMap<Long, Boolean> mExpandedEditors = new HashMap<Long, Boolean>();
 
@@ -132,23 +130,6 @@
         updatedExpandedEditorsMap();
     }
 
-    @Override
-    public void setIntentExtras(Bundle extras) {
-        if (extras == null || extras.size() == 0) {
-            return;
-        }
-
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        for (RawContactDelta state : mState) {
-            final AccountType type = state.getAccountType(accountTypes);
-            if (type.areContactsWritable()) {
-                // Apply extras to the first writable raw contact only
-                RawContactModifier.parseExtras(mContext, type, state, extras);
-                break;
-            }
-        }
-    }
-
     /**
      * Removes a current editor ({@link #mState}) and rebinds new editor for a new account.
      * Some of old data are reused with new restriction enforced by the new account.
@@ -181,6 +162,18 @@
     }
 
     @Override
+    protected void setGroupMetaData() {
+        if (mGroupMetaData == null) {
+            return;
+        }
+        int editorCount = mContent.getChildCount();
+        for (int i = 0; i < editorCount; i++) {
+            BaseRawContactEditorView editor = (BaseRawContactEditorView) mContent.getChildAt(i);
+            editor.setGroupMetaData(mGroupMetaData);
+        }
+    }
+
+    @Override
     protected void bindEditors() {
         // bindEditors() can only bind views if there is data in mState, so immediately return
         // if mState is null
@@ -309,8 +302,7 @@
 
         // Refresh Action Bar as the visibility of the join command
         // Activity can be null if we have been detached from the Activity
-        final Activity activity = getActivity();
-        if (activity != null) activity.invalidateOptionsMenu();
+        invalidateOptionsMenu();
 
         updatedExpandedEditorsMap();
     }