Replace switches on resources with if-else

This is necessary for the project to build as an Android library which
is planned for Google3.

Test: ran GoogleContactsTests

Bug 33782320

Change-Id: I62f15486b7e976bb20a6e9c631dc8404a4170dbb
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index ee4b726..654263b 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -172,18 +172,17 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // Go back to previous screen, intending "cancel"
-                setResult(RESULT_CANCELED);
-                onBackPressed();
-                return true;
-            case R.id.menu_search:
-                mIsSearchMode = !mIsSearchMode;
-                configureSearchMode();
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {// Go back to previous screen, intending "cancel"
+            setResult(RESULT_CANCELED);
+            onBackPressed();
+        } else if (id == R.id.menu_search) {
+            mIsSearchMode = !mIsSearchMode;
+            configureSearchMode();
+        } else {
+            return super.onOptionsItemSelected(item);
         }
-        return super.onOptionsItemSelected(item);
+        return true;
     }
 
     @Override
@@ -631,11 +630,9 @@
 
     @Override
     public void onFocusChange(View view, boolean hasFocus) {
-        switch (view.getId()) {
-            case R.id.search_view: {
-                if (hasFocus) {
-                    mActionBarAdapter.setFocusOnSearchView();
-                }
+        if (view.getId() == R.id.search_view) {
+            if (hasFocus) {
+                mActionBarAdapter.setFocusOnSearchView();
             }
         }
     }
@@ -654,11 +651,8 @@
 
     @Override
     public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.floating_action_button: {
-                startCreateNewContactActivity();
-                break;
-            }
+        if (view.getId() == R.id.floating_action_button) {
+            startCreateNewContactActivity();
         }
     }
 
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index c9153e1..27a355f 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -784,19 +784,19 @@
             return true;
         }
 
-        switch (item.getItemId()) {
-            case R.id.menu_save:
-                return save(SaveMode.CLOSE);
-            case R.id.menu_delete:
-                if (mListener != null) mListener.onDeleteRequested(mLookupUri);
-                return true;
-            case R.id.menu_split:
-                return doSplitContactAction();
-            case R.id.menu_join:
-                return doJoinContactAction();
-            case R.id.menu_help:
-                HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
-                return true;
+        final int id = item.getItemId();
+        if (id == R.id.menu_save) {
+            return save(SaveMode.CLOSE);
+        } else if (id == R.id.menu_delete) {
+            if (mListener != null) mListener.onDeleteRequested(mLookupUri);
+            return true;
+        } else if (id == R.id.menu_split) {
+            return doSplitContactAction();
+        } else if (id == R.id.menu_join) {
+            return doJoinContactAction();
+        } else if (id == R.id.menu_help) {
+            HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
+            return true;
         }
 
         return false;
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 4c29330..5d47d95 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -144,11 +144,10 @@
     public Dialog createDialog(Bundle bundle) {
         if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
         int dialogId = bundle.getInt(DIALOG_ID_KEY);
-        switch (dialogId) {
-            case R.id.dialog_event_date_picker:
-                return createDatePickerDialog();
-            default:
-                return super.createDialog(bundle);
+        if (dialogId == R.id.dialog_event_date_picker) {
+            return createDatePickerDialog();
+        } else {
+            return super.createDialog(bundle);
         }
     }
 
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index ea7ab64..5ca1e9b 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -461,57 +461,43 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                mActivity.onBackPressed();
-                return true;
-            }
-            case R.id.menu_add: {
-                startGroupAddMemberActivity();
-                return true;
-            }
-            case R.id.menu_multi_send_email: {
-                final long[] ids = mActionBarAdapter.isSelectionMode()
-                        ? getAdapter().getSelectedContactIdsArray()
-                        : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
-                sendToGroup(ids, ContactsUtils.SCHEME_MAILTO,
-                        getString(R.string.menu_sendEmailOption));
-                return true;
-            }
-            case R.id.menu_multi_send_message: {
-                final long[] ids = mActionBarAdapter.isSelectionMode()
-                        ? getAdapter().getSelectedContactIdsArray()
-                        : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
-                sendToGroup(ids, ContactsUtils.SCHEME_SMSTO,
-                        getString(R.string.menu_sendMessageOption));
-                return true;
-            }
-            case R.id.menu_rename_group: {
-                GroupNameEditDialogFragment.newInstanceForUpdate(
-                        new AccountWithDataSet(mGroupMetaData.accountName,
-                                mGroupMetaData.accountType, mGroupMetaData.dataSet),
-                        GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
-                        mGroupMetaData.groupName).show(getFragmentManager(),
-                        TAG_GROUP_NAME_EDIT_DIALOG);
-                return true;
-            }
-            case R.id.menu_delete_group: {
-                deleteGroup();
-                return true;
-            }
-            case R.id.menu_edit_group: {
-                mIsEditMode = true;
-                mActionBarAdapter.setSelectionMode(true);
-                displayDeleteButtons(true);
-                return true;
-            }
-            case R.id.menu_remove_from_group: {
-                logListEvent();
-                removeSelectedContacts();
-                return true;
-            }
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            mActivity.onBackPressed();
+        } else if (id == R.id.menu_add) {
+            startGroupAddMemberActivity();
+        } else if (id == R.id.menu_multi_send_email) {
+            final long[] ids = mActionBarAdapter.isSelectionMode()
+                    ? getAdapter().getSelectedContactIdsArray()
+                    : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+            sendToGroup(ids, ContactsUtils.SCHEME_MAILTO,
+                    getString(R.string.menu_sendEmailOption));
+        } else if (id == R.id.menu_multi_send_message) {
+            final long[] ids = mActionBarAdapter.isSelectionMode()
+                    ? getAdapter().getSelectedContactIdsArray()
+                    : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+            sendToGroup(ids, ContactsUtils.SCHEME_SMSTO,
+                    getString(R.string.menu_sendMessageOption));
+        } else if (id == R.id.menu_rename_group) {
+            GroupNameEditDialogFragment.newInstanceForUpdate(
+                    new AccountWithDataSet(mGroupMetaData.accountName,
+                            mGroupMetaData.accountType, mGroupMetaData.dataSet),
+                    GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
+                    mGroupMetaData.groupName).show(getFragmentManager(),
+                    TAG_GROUP_NAME_EDIT_DIALOG);
+        } else if (id == R.id.menu_delete_group) {
+            deleteGroup();
+        } else if (id == R.id.menu_edit_group) {
+            mIsEditMode = true;
+            mActionBarAdapter.setSelectionMode(true);
+            displayDeleteButtons(true);
+        } else if (id == R.id.menu_remove_from_group) {
+            logListEvent();
+            removeSelectedContacts();
+        } else {
+            return super.onOptionsItemSelected(item);
         }
-        return super.onOptionsItemSelected(item);
+        return true;
     }
 
     private void removeSelectedContacts() {
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 76f3935..c13e475 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -129,14 +129,14 @@
 
     @Override
     public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.add_account_button:
-                final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
-                ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
-                break;
-            case R.id.import_contacts_button:
-                ImportDialogFragment.show(getFragmentManager());
-                break;
+        final int id = v.getId();
+        if (id == R.id.add_account_button) {
+            final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
+            ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+
+        } else if (id == R.id.import_contacts_button) {
+            ImportDialogFragment.show(getFragmentManager());
+
         }
     }
 
diff --git a/src/com/android/contacts/list/CustomContactListFilterActivity.java b/src/com/android/contacts/list/CustomContactListFilterActivity.java
index bbde17b..2fe9e12 100644
--- a/src/com/android/contacts/list/CustomContactListFilterActivity.java
+++ b/src/com/android/contacts/list/CustomContactListFilterActivity.java
@@ -934,15 +934,14 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                confirmFinish();
-                return true;
-            case R.id.menu_save:
-                this.doSaveAction();
-                return true;
-            default:
-                break;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            confirmFinish();
+            return true;
+        } else if (id == R.id.menu_save) {
+            this.doSaveAction();
+            return true;
+        } else {
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 079c5a5..855a530 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -1014,43 +1014,36 @@
             return false;
         }
 
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                // The home icon on the action bar is pressed
-                if (mActionBarAdapter.isUpShowing()) {
-                    // "UP" icon press -- should be treated as "back".
-                    mActivity.onBackPressed();
-                }
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            if (mActionBarAdapter.isUpShowing()) {
+                // "UP" icon press -- should be treated as "back".
+                mActivity.onBackPressed();
             }
-            case R.id.menu_search: {
-                if (!mActionBarAdapter.isSelectionMode()) {
-                    mActionBarAdapter.setSearchMode(true);
-                }
-                return true;
+            return true;
+        } else if (id == R.id.menu_search) {
+            if (!mActionBarAdapter.isSelectionMode()) {
+                mActionBarAdapter.setSearchMode(true);
             }
-            case R.id.menu_share: {
-                shareSelectedContacts();
-                return true;
-            }
-            case R.id.menu_join: {
-                Logger.logListEvent(ListEvent.ActionType.LINK,
+            return true;
+        } else if (id == R.id.menu_share) {
+            shareSelectedContacts();
+            return true;
+        } else if (id == R.id.menu_join) {
+            Logger.logListEvent(ListEvent.ActionType.LINK,
                         /* listType */ getListTypeIncludingSearch(),
                         /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
                         /* numSelected */ getAdapter().getSelectedContactIds().size());
-                joinSelectedContacts();
-                return true;
-            }
-            case R.id.menu_delete: {
-                deleteSelectedContacts();
-                return true;
-            }
-            case R.id.export_database: {
-                final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
-                return true;
-            }
+            joinSelectedContacts();
+            return true;
+        } else if (id == R.id.menu_delete) {
+            deleteSelectedContacts();
+            return true;
+        } else if (id == R.id.export_database) {
+            final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+            ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index a554382..e94d73b 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -301,20 +301,18 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                final Activity activity = getActivity();
-                if (activity != null) {
-                    activity.onBackPressed();
-                }
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            final Activity activity = getActivity();
+            if (activity != null) {
+                activity.onBackPressed();
             }
-            case R.id.menu_select: {
-                if (mListener != null) {
-                    mListener.onSelectGroupMembers();
-                }
-                return true;
+            return true;
+        } else if (id == R.id.menu_select) {
+            if (mListener != null) {
+                mListener.onSelectGroupMembers();
             }
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
index ec0bff6..6f6a3c7 100644
--- a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
@@ -77,18 +77,16 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch(item.getItemId()) {
-            case R.id.menu_send: {
-                final String scheme = getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_SCHEME);
-                final String title= getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_TITLE);
-                final List<String> items = GroupUtil.getSendToDataForIds(
-                        getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
-                final String list = TextUtils.join(",", items);
-                GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
-                return true;
-            }
+        if (item.getItemId() == R.id.menu_send) {
+            final String scheme = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_SCHEME);
+            final String title = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_TITLE);
+            final List<String> items = GroupUtil.getSendToDataForIds(
+                    getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+            final String list = TextUtils.join(",", items);
+            GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
index 7d23182..2b7021e 100644
--- a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
@@ -77,18 +77,16 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch(item.getItemId()) {
-            case R.id.menu_send: {
-                final String scheme = getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_SCHEME);
-                final String title= getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_TITLE);
-                final List<String> items = GroupUtil.getSendToDataForIds(
-                        getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
-                final String list = TextUtils.join(",", items);
-                GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
-                return true;
-            }
+        if (item.getItemId() == R.id.menu_send) {
+            final String scheme = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_SCHEME);
+            final String title = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_TITLE);
+            final List<String> items = GroupUtil.getSendToDataForIds(
+                    getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+            final String list = TextUtils.join(",", items);
+            GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 3c04f68..767b6c7 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2757,137 +2757,128 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.menu_star:
-                // Make sure there is a contact
-                if (mContactData != null) {
-                    // Read the current starred value from the UI instead of using the last
-                    // loaded state. This allows rapid tapping without writing the same
-                    // value several times
-                    final boolean isStarred = item.isChecked();
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            isStarred ? ActionType.UNSTAR : ActionType.STAR,
+        final int id = item.getItemId();
+        if (id == R.id.menu_star) {// Make sure there is a contact
+            if (mContactData != null) {
+                // Read the current starred value from the UI instead of using the last
+                // loaded state. This allows rapid tapping without writing the same
+                // value several times
+                final boolean isStarred = item.isChecked();
+                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                        isStarred ? ActionType.UNSTAR : ActionType.STAR,
                             /* thirdPartyAction */ null);
-                    toggleStar(item, isStarred);
-                }
-                return true;
-            case R.id.menu_edit:
-                if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.ADD, /* thirdPartyAction */ null);
-
-                    // This action is used to launch the contact selector, with the option of
-                    // creating a new contact. Creating a new contact is an INSERT, while selecting
-                    // an exisiting one is an edit. The fields in the edit screen will be
-                    // prepopulated with data.
-
-                    final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-                    intent.setType(Contacts.CONTENT_ITEM_TYPE);
-
-                    ArrayList<ContentValues> values = mContactData.getContentValues();
-
-                    // Only pre-fill the name field if the provided display name is an nickname
-                    // or better (e.g. structured name, nickname)
-                    if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
-                        intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
-                    } else if (mContactData.getDisplayNameSource()
-                            == DisplayNameSources.ORGANIZATION) {
-                        // This is probably an organization. Instead of copying the organization
-                        // name into a name entry, copy it into the organization entry. This
-                        // way we will still consider the contact an organization.
-                        final ContentValues organization = new ContentValues();
-                        organization.put(Organization.COMPANY, mContactData.getDisplayName());
-                        organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-                        values.add(organization);
-                    }
-
-                    // Last time used and times used are aggregated values from the usage stat
-                    // table. They need to be removed from data values so the SQL table can insert
-                    // properly
-                    for (ContentValues value : values) {
-                        value.remove(Data.LAST_TIME_USED);
-                        value.remove(Data.TIMES_USED);
-                    }
-                    intent.putExtra(Intents.Insert.DATA, values);
-
-                    // If the contact can only export to the same account, add it to the intent.
-                    // Otherwise the ContactEditorFragment will show a dialog for selecting
-                    // an account.
-                    if (mContactData.getDirectoryExportSupport() ==
-                            Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
-                        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
-                                new Account(mContactData.getDirectoryAccountName(),
-                                        mContactData.getDirectoryAccountType()));
-                        intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
-                                mContactData.getRawContacts().get(0).getDataSet());
-                    }
-
-                    // Add this flag to disable the delete menu option on directory contact joins
-                    // with local contacts. The delete option is ambiguous when joining contacts.
-                    intent.putExtra(
-                            ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
-                            true);
-
-                    intent.setPackage(getPackageName());
-                    startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
-                } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.ADD, /* thirdPartyAction */ null);
-                    InvisibleContactUtil.addToDefaultGroup(mContactData, this);
-                } else if (isContactEditable()) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.EDIT, /* thirdPartyAction */ null);
-                    editContact();
-                }
-                return true;
-            case R.id.menu_join:
-                return doJoinContactAction();
-            case R.id.menu_linked_contacts:
-                return showRawContactPickerDialog();
-            case R.id.menu_delete:
+                toggleStar(item, isStarred);
+            }
+        } else if (id == R.id.menu_edit) {
+            if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.REMOVE, /* thirdPartyAction */ null);
-                if (isContactEditable()) {
-                    deleteContact();
+                        ActionType.ADD, /* thirdPartyAction */ null);
+
+                // This action is used to launch the contact selector, with the option of
+                // creating a new contact. Creating a new contact is an INSERT, while selecting
+                // an exisiting one is an edit. The fields in the edit screen will be
+                // prepopulated with data.
+
+                final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                intent.setType(Contacts.CONTENT_ITEM_TYPE);
+
+                ArrayList<ContentValues> values = mContactData.getContentValues();
+
+                // Only pre-fill the name field if the provided display name is an nickname
+                // or better (e.g. structured name, nickname)
+                if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
+                    intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
+                } else if (mContactData.getDisplayNameSource()
+                        == DisplayNameSources.ORGANIZATION) {
+                    // This is probably an organization. Instead of copying the organization
+                    // name into a name entry, copy it into the organization entry. This
+                    // way we will still consider the contact an organization.
+                    final ContentValues organization = new ContentValues();
+                    organization.put(Organization.COMPANY, mContactData.getDisplayName());
+                    organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+                    values.add(organization);
                 }
-                return true;
-            case R.id.menu_share:
-                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.SHARE, /* thirdPartyAction */ null);
-                if (isContactShareable()) {
-                    shareContact();
+
+                // Last time used and times used are aggregated values from the usage stat
+                // table. They need to be removed from data values so the SQL table can insert
+                // properly
+                for (ContentValues value : values) {
+                    value.remove(Data.LAST_TIME_USED);
+                    value.remove(Data.TIMES_USED);
                 }
-                return true;
-            case R.id.menu_create_contact_shortcut:
-                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.SHORTCUT, /* thirdPartyAction */ null);
-                if (isShortcutCreatable()) {
-                    createLauncherShortcutWithContact();
+                intent.putExtra(Intents.Insert.DATA, values);
+
+                // If the contact can only export to the same account, add it to the intent.
+                // Otherwise the ContactEditorFragment will show a dialog for selecting
+                // an account.
+                if (mContactData.getDirectoryExportSupport() ==
+                        Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
+                    intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
+                            new Account(mContactData.getDirectoryAccountName(),
+                                    mContactData.getDirectoryAccountType()));
+                    intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
+                            mContactData.getRawContacts().get(0).getDataSet());
                 }
-                return true;
-            case R.id.menu_set_ringtone:
-                doPickRingtone();
-                return true;
-            case R.id.menu_send_to_voicemail:
-                // Update state and save
-                mSendToVoicemailState = !mSendToVoicemailState;
-                item.setTitle(mSendToVoicemailState
-                        ? R.string.menu_unredirect_calls_to_vm
-                        : R.string.menu_redirect_calls_to_vm);
-                final Intent intent = ContactSaveService.createSetSendToVoicemail(
-                        this, mLookupUri, mSendToVoicemailState);
-                this.startService(intent);
-                return true;
-            case R.id.menu_help:
+
+                // Add this flag to disable the delete menu option on directory contact joins
+                // with local contacts. The delete option is ambiguous when joining contacts.
+                intent.putExtra(
+                        ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
+                        true);
+
+                intent.setPackage(getPackageName());
+                startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
+            } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.HELP, /* thirdPartyAction */ null);
-                HelpUtils.launchHelpAndFeedbackForContactScreen(this);
-                return true;
-            default:
+                        ActionType.ADD, /* thirdPartyAction */ null);
+                InvisibleContactUtil.addToDefaultGroup(mContactData, this);
+            } else if (isContactEditable()) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
-                return super.onOptionsItemSelected(item);
+                        ActionType.EDIT, /* thirdPartyAction */ null);
+                editContact();
+            }
+        } else if (id == R.id.menu_join) {
+            return doJoinContactAction();
+        } else if (id == R.id.menu_linked_contacts) {
+            return showRawContactPickerDialog();
+        } else if (id == R.id.menu_delete) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.REMOVE, /* thirdPartyAction */ null);
+            if (isContactEditable()) {
+                deleteContact();
+            }
+        } else if (id == R.id.menu_share) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.SHARE, /* thirdPartyAction */ null);
+            if (isContactShareable()) {
+                shareContact();
+            }
+        } else if (id == R.id.menu_create_contact_shortcut) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.SHORTCUT, /* thirdPartyAction */ null);
+            if (isShortcutCreatable()) {
+                createLauncherShortcutWithContact();
+            }
+        } else if (id == R.id.menu_set_ringtone) {
+            doPickRingtone();
+        } else if (id == R.id.menu_send_to_voicemail) {// Update state and save
+            mSendToVoicemailState = !mSendToVoicemailState;
+            item.setTitle(mSendToVoicemailState
+                    ? R.string.menu_unredirect_calls_to_vm
+                    : R.string.menu_redirect_calls_to_vm);
+            final Intent intent = ContactSaveService.createSetSendToVoicemail(
+                    this, mLookupUri, mSendToVoicemailState);
+            this.startService(intent);
+        } else if (id == R.id.menu_help) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.HELP, /* thirdPartyAction */ null);
+            HelpUtils.launchHelpAndFeedbackForContactScreen(this);
+        } else {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+            return super.onOptionsItemSelected(item);
         }
+        return true;
     }
 
     private boolean showRawContactPickerDialog() {