Show contact after creation; refactor ContactEditorFragment.Listener

Change-Id: I1fcf45334196a3776ed187cfeb93334f88cee281
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index c94907e..f030311 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -67,10 +67,10 @@
 
     private static final String KEY_MODE = "mode";
 
-    private static final int SUBACTIVITY_NEW_CONTACT = 1;
-    private static final int SUBACTIVITY_VIEW_CONTACT = 2;
-    private static final int SUBACTIVITY_DISPLAY_GROUP = 3;
-    private static final int SUBACTIVITY_SEARCH = 4;
+    private static final int SUBACTIVITY_NEW_CONTACT = 2;
+    private static final int SUBACTIVITY_VIEW_CONTACT = 3;
+    private static final int SUBACTIVITY_DISPLAY_GROUP = 4;
+    private static final int SUBACTIVITY_SEARCH = 5;
 
     private DialogManager mDialogManager = new DialogManager(this);
 
@@ -503,20 +503,14 @@
 
     private class EditorFragmentListener implements ContactEditorFragment.Listener {
         @Override
-        public void closeAfterDelete() {
-            Toast.makeText(ContactBrowserActivity.this, "closeAfterDelete",
-                    Toast.LENGTH_LONG).show();
-        }
-
-        @Override
-        public void closeAfterRevert() {
+        public void onReverted() {
             final Uri uri = mEditorFragment.getUri();
             closeEditorFragment(false);
             setupContactDetailFragment(uri);
         }
 
         @Override
-        public void closeAfterSaving(int resultCode, Intent resultIntent) {
+        public void onSaveFinished(int resultCode, Intent resultIntent) {
             // it is already saved, so no need to save again here
             final Uri uri = mEditorFragment.getUri();
             closeEditorFragment(false);
@@ -524,19 +518,19 @@
         }
 
         @Override
-        public void closeAfterSplit() {
+        public void onSplit() {
             Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit",
                     Toast.LENGTH_LONG).show();
         }
 
         @Override
-        public void closeBecauseAccountSelectorAborted() {
+        public void onAccountSelectorAborted() {
             Toast.makeText(ContactBrowserActivity.this, "closeBecauseAccountSelectorAborted",
                     Toast.LENGTH_LONG).show();
         }
 
         @Override
-        public void closeBecauseContactNotFound() {
+        public void onContactNotFound() {
             Toast.makeText(ContactBrowserActivity.this, "closeBecauseContactNotFound",
                     Toast.LENGTH_LONG).show();
         }
@@ -602,7 +596,7 @@
             }
             case R.id.menu_add: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-                startActivity(intent);
+                startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
                 return true;
             }
             case R.id.menu_import_export: {
@@ -683,13 +677,14 @@
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
-//            case SUBACTIVITY_NEW_CONTACT:
-//                if (resultCode == RESULT_OK) {
-//                    returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
-//                            data.getData());
-//                    setRe
-//                }
-//                break;
+            case SUBACTIVITY_NEW_CONTACT: {
+                if (resultCode == RESULT_OK && mContactContentDisplayed) {
+                    final Uri newContactUri = data.getData();
+                    mListFragment.setSelectedContactUri(newContactUri);
+                    setupContactDetailFragment(newContactUri);
+                }
+                break;
+            }
 
 //            case SUBACTIVITY_VIEW_CONTACT:
 //                if (resultCode == RESULT_OK) {
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 59a4e83..71ed3c5 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -97,39 +97,35 @@
     private final ContactEditorFragment.Listener mFragmentListener =
             new ContactEditorFragment.Listener() {
         @Override
-        public void closeAfterDelete() {
-            Toast.makeText(ContactEditorActivity.this, "closeAfterDelete",
-                    Toast.LENGTH_LONG).show();
-        }
-
-        @Override
-        public void closeAfterRevert() {
+        public void onReverted() {
             finish();
         }
 
         @Override
-        public void closeAfterSaving(int resultCode, Intent resultIntent) {
+        public void onSaveFinished(int resultCode, Intent resultIntent) {
+            setResult(resultCode, resultIntent);
             finish();
         }
 
         @Override
-        public void closeAfterSplit() {
+        public void onSplit() {
             finish();
         }
 
         @Override
-        public void closeBecauseAccountSelectorAborted() {
+        public void onAccountSelectorAborted() {
             finish();
         }
 
         @Override
-        public void closeBecauseContactNotFound() {
+        public void onContactNotFound() {
+            setResult(Activity.RESULT_CANCELED, null);
             finish();
         }
 
         @Override
         public void setTitleTo(int resourceId) {
-            Toast.makeText(ContactEditorActivity.this, "setTitleTo", Toast.LENGTH_LONG).show();
+            setTitle(resourceId);
         }
     };
 
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index f75cfd1..5951f7f 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -519,7 +519,7 @@
             public void onCancel(DialogInterface dialog) {
                 // If nothing remains, close activity
                 if (!hasValidState()) {
-                    mListener.closeBecauseAccountSelectorAborted();
+                    mListener.onAccountSelectorAborted();
                 }
             }
         };
@@ -733,7 +733,7 @@
     }
 
     private boolean doRevertAction() {
-        if (mListener != null) mListener.closeAfterRevert();
+        if (mListener != null) mListener.onReverted();
 
         return true;
     }
@@ -767,10 +767,10 @@
                     resultCode = Activity.RESULT_CANCELED;
                     resultIntent = null;
                 }
-                if (mListener != null) mListener.closeAfterSaving(resultCode, resultIntent);
+                if (mListener != null) mListener.onSaveFinished(resultCode, resultIntent);
                 break;
             case SAVE_MODE_SPLIT:
-                if (mListener != null) mListener.closeAfterSplit();
+                if (mListener != null) mListener.onSplit();
                 break;
 
             case SAVE_MODE_JOIN:
@@ -898,29 +898,25 @@
 
     public static interface Listener {
         /**
-         * Contact was not found, so somehow close this fragment.
+         * Contact was not found, so somehow close this fragment. This is raised after a contact
+         * is removed via Menu/Delete (unless it was a new contact)
          */
-        void closeBecauseContactNotFound();
+        void onContactNotFound();
 
         /**
          * Contact was split, so we can close now
          */
-        void closeAfterSplit();
+        void onSplit();
 
         /**
          * User was presented with an account selection and couldn't decide.
          */
-        void closeBecauseAccountSelectorAborted();
+        void onAccountSelectorAborted();
 
         /**
          * User has tapped Revert, close the fragment now.
          */
-        void closeAfterRevert();
-
-        /**
-         * User has removed the contact, close the fragment now.
-         */
-        void closeAfterDelete();
+        void onReverted();
 
         /**
          * Set the Title (e.g. of the Activity)
@@ -928,11 +924,9 @@
         void setTitleTo(int resourceId);
 
         /**
-         * Contact was
-         * @param resultCode
-         * @param resultIntent
+         * Contact was saved and the Fragment can now be closed safely.
          */
-        void closeAfterSaving(int resultCode, Intent resultIntent);
+        void onSaveFinished(int resultCode, Intent resultIntent);
     }
 
     private class EntityDeltaComparator implements Comparator<EntityDelta> {
@@ -1117,7 +1111,7 @@
             }
             // Save the deletes
             doSaveAction(SAVE_MODE_DEFAULT);
-            mListener.closeAfterDelete();
+            mListener.onContactNotFound();
         }
     }
 
@@ -1330,7 +1324,7 @@
             if (data == ContactLoader.Result.NOT_FOUND) {
                 // Item has been deleted
                 Log.i(TAG, "No contact found. Closing activity");
-                if (mListener != null) mListener.closeBecauseContactNotFound();
+                if (mListener != null) mListener.onContactNotFound();
                 return;
             }