Merge "Use a PopupMenu to show the available fields to add"
diff --git a/src/com/android/contacts/ui/widget/ContactEditorView.java b/src/com/android/contacts/ui/widget/ContactEditorView.java
index 15d1726..f296661 100644
--- a/src/com/android/contacts/ui/widget/ContactEditorView.java
+++ b/src/com/android/contacts/ui/widget/ContactEditorView.java
@@ -22,18 +22,11 @@
 import com.android.contacts.model.EntityModifier;
 import com.android.contacts.model.ContactsSource.DataKind;
 import com.android.contacts.model.ContactsSource.EditType;
-import com.android.contacts.model.Editor.EditorListener;
 import com.android.contacts.model.EntityDelta.ValuesDelta;
 import com.android.contacts.ui.ViewIdGenerator;
-import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.DialogManager.DialogShowingView;
 
-import android.app.AlertDialog;
-import android.app.Dialog;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Entity;
-import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.RawContacts;
@@ -42,10 +35,13 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.ImageView;
+import android.widget.PopupMenu;
 import android.widget.TextView;
 
 import java.util.ArrayList;
@@ -61,7 +57,7 @@
  * adding {@link Data} rows or changing {@link EditType}, are performed through
  * {@link EntityModifier} to ensure that {@link ContactsSource} are enforced.
  */
-public class ContactEditorView extends BaseContactEditorView implements DialogShowingView {
+public class ContactEditorView extends BaseContactEditorView {
     private View mPhotoStub;
     private GenericEditorView mName;
 
@@ -78,11 +74,6 @@
 
     private long mRawContactId = -1;
 
-    private DialogManager mDialogManager = null;
-
-    private static final String DIALOG_ID_KEY = "dialog_id";
-    private static final int DIALOG_ID_FIELD_SELECTOR = 1;
-
     public ContactEditorView(Context context) {
         super(context);
     }
@@ -114,7 +105,7 @@
         mHeader.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
-                setExpanded(!mExpanded, true);
+                setExpanded(!mExpanded);
             }
         });
         mHeaderIcon = (ImageView) findViewById(R.id.header_icon);
@@ -123,8 +114,9 @@
 
         mAddFieldButton = (Button) findViewById(R.id.button_add_field);
         mAddFieldButton.setOnClickListener(new OnClickListener() {
+            @Override
             public void onClick(View v) {
-                showDialog(DIALOG_ID_FIELD_SELECTOR);
+                showAddInformationPopupWindow();
             }
         });
     }
@@ -209,63 +201,37 @@
         return mRawContactId;
     }
 
-    /* package */ void setExpanded(boolean value, boolean animate) {
+    /* package */ void setExpanded(boolean value) {
         if (value == mExpanded) return;
 
         mExpanded = value;
         mBody.setVisibility(value ? View.VISIBLE : View.GONE);
     }
 
-    /* package */ void showDialog(int bundleDialogId) {
-        final Bundle bundle = new Bundle();
-        bundle.putInt(DIALOG_ID_KEY, bundleDialogId);
-        getDialogManager().showDialogInView(this, bundle);
-    }
+    private void showAddInformationPopupWindow() {
+        final ArrayList<KindSectionView> fields =
+                new ArrayList<KindSectionView>(mFields.getChildCount());
 
-    private DialogManager getDialogManager() {
-        if (mDialogManager == null) {
-            Context context = getContext();
-            if (!(context instanceof DialogManager.DialogShowingViewActivity)) {
-                throw new IllegalStateException(
-                        "View must be hosted in an Activity that implements " +
-                        "DialogManager.DialogShowingViewActivity");
+        final PopupMenu popupMenu = new PopupMenu(getContext(), mAddFieldButton);
+        final Menu menu = popupMenu.getMenu();
+        for (int i = 0; i < mFields.getChildCount(); i++) {
+            final KindSectionView sectionView = (KindSectionView) mFields.getChildAt(i);
+            // not a list and already exists? ignore
+            if (!sectionView.getKind().isList && sectionView.getEditorCount() != 0) {
+                continue;
             }
-            mDialogManager = ((DialogManager.DialogShowingViewActivity)context).getDialogManager();
+            menu.add(Menu.NONE, i, Menu.NONE, sectionView.getTitle());
+            fields.add(sectionView);
         }
-        return mDialogManager;
-    }
+        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+            @Override
+            public boolean onMenuItemClick(MenuItem item) {
+                final KindSectionView view = fields.get(item.getOrder());
+                view.addItem();
+                return true;
+            }
+        });
 
-    public Dialog createDialog(Bundle bundle) {
-        if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
-        final int dialogId = bundle.getInt(DIALOG_ID_KEY);
-        switch (dialogId) {
-            case DIALOG_ID_FIELD_SELECTOR:
-                final ArrayList<KindSectionView> usedFields =
-                    new ArrayList<KindSectionView>(mFields.getChildCount());
-                final ArrayList<CharSequence> usedFieldTitles =
-                        new ArrayList<CharSequence>(mFields.getChildCount());
-
-                for (int i = 0; i < mFields.getChildCount(); i++) {
-                    final KindSectionView sectionView = (KindSectionView) mFields.getChildAt(i);
-                    // not a list and already exists? ignore
-                    if (!sectionView.getKind().isList && sectionView.getEditorCount() != 0) {
-                        continue;
-                    }
-                    usedFieldTitles.add(sectionView.getTitle());
-                    usedFields.add(sectionView);
-                }
-                final DialogInterface.OnClickListener itemClickListener =
-                        new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int which) {
-                        final KindSectionView view = usedFields.get(which);
-                        view.addItem();
-                    }
-                };
-                return new AlertDialog.Builder(getContext())
-                        .setItems(usedFieldTitles.toArray(new CharSequence[0]), itemClickListener)
-                        .create();
-            default:
-                throw new IllegalArgumentException("Invalid dialogId: " + dialogId);
-        }
+        popupMenu.show();
     }
 }