Splitting pickers into their own activity

Change-Id: I1998b446b0aaaedc086ad99416fb6118d840623c
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c5811ec..3ebfe3c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -210,7 +210,12 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.TAB" />
             </intent-filter>
-
+        </activity>
+        
+        <activity android:name=".activities.ContactSelectionActivity"
+            android:label="@string/contactsList"
+            android:clearTaskOnLaunch="true"
+        >
             <intent-filter>
                 <action android:name="android.intent.action.INSERT_OR_EDIT" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -329,7 +334,7 @@
         </activity>
 
         <activity-alias android:name="ContactShortcut"
-            android:targetActivity="ContactsListActivity"
+            android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutContact"
             android:icon="@drawable/ic_launcher_shortcut_contact">
 
@@ -341,7 +346,7 @@
         </activity-alias>
 
         <activity-alias android:name="alias.DialShortcut"
-            android:targetActivity="ContactsListActivity"
+            android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutDialContact"
             android:icon="@drawable/ic_launcher_shortcut_directdial">
 
@@ -354,7 +359,7 @@
         </activity-alias>
 
         <activity-alias android:name="alias.MessageShortcut"
-            android:targetActivity="ContactsListActivity"
+            android:targetActivity=".activities.ContactSelectionActivity"
             android:label="@string/shortcutMessageContact"
             android:icon="@drawable/ic_launcher_shortcut_directmessage">
 
@@ -450,10 +455,10 @@
             android:theme="@android:style/Theme.Translucent">
         </activity>
 
-        <!-- Makes .ContactsListActivity the search target for any activity in Contacts -->
+        <!-- Makes .ContactListActivity the search target for any activity in Contacts -->
         <meta-data
             android:name="android.app.default_searchable"
-            android:value=".ContactsListActivity" />
+            android:value=".activities.ContactListActivity" />
 
 
         <!-- LIVE FOLDERS -->
diff --git a/src/com/android/contacts/activities/ContactListActivity.java b/src/com/android/contacts/activities/ContactListActivity.java
index 234d8d9..ef831f0 100644
--- a/src/com/android/contacts/activities/ContactListActivity.java
+++ b/src/com/android/contacts/activities/ContactListActivity.java
@@ -22,16 +22,10 @@
 import com.android.contacts.interactions.PhoneNumberInteraction;
 import com.android.contacts.list.ContactBrowseListContextMenuAdapter;
 import com.android.contacts.list.ContactEntryListFragment;
-import com.android.contacts.list.ContactPickerFragment;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.list.OnContactBrowserActionListener;
-import com.android.contacts.list.OnContactPickerActionListener;
-import com.android.contacts.list.OnPhoneNumberPickerActionListener;
-import com.android.contacts.list.OnPostalAddressPickerActionListener;
-import com.android.contacts.list.PhoneNumberPickerFragment;
-import com.android.contacts.list.PostalAddressPickerFragment;
 import com.android.contacts.list.StrequentContactListFragment;
 import com.android.contacts.ui.ContactsPreferencesActivity;
 import com.android.contacts.views.detail.ContactDetailFragment;
@@ -64,7 +58,7 @@
  */
 public class ContactListActivity extends Activity implements View.OnCreateContextMenuListener {
 
-    private static final String TAG = "ContactsListActivity";
+    private static final String TAG = "ContactListActivity";
 
     private static final int SUBACTIVITY_NEW_CONTACT = 1;
     private static final int SUBACTIVITY_VIEW_CONTACT = 2;
@@ -233,20 +227,11 @@
     private void onCreateFragment() {
         mActionCode = mRequest.getActionCode();
         switch (mActionCode) {
-            case ContactsRequest.ACTION_DEFAULT:
-            case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
+            case ContactsRequest.ACTION_DEFAULT: {
                 DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
                 fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-
-                if (mActionCode == ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT) {
-                    fragment.setEditMode(true);
-                    fragment.setCreateContactEnabled(true);
-                }
-
                 fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
-
                 fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
-
                 fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
                 fragment.setSearchMode(mRequest.isSearchMode());
                 fragment.setQueryString(mRequest.getQueryString());
@@ -286,79 +271,6 @@
                 break;
             }
 
-            case ContactsRequest.ACTION_PICK_CONTACT: {
-                ContactPickerFragment fragment = new ContactPickerFragment();
-                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setSearchMode(mRequest.isSearchMode());
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
-                ContactPickerFragment fragment = new ContactPickerFragment();
-                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
-                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
-                ContactPickerFragment fragment = new ContactPickerFragment();
-                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
-                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setSearchMode(mRequest.isSearchMode());
-                fragment.setQueryString(mRequest.getQueryString());
-                fragment.setDirectorySearchEnabled(mRequest.isDirectorySearchEnabled());
-                fragment.setShortcutRequested(true);
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_PICK_PHONE: {
-                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
-                fragment.setOnPhoneNumberPickerActionListener(
-                        new PhoneNumberPickerActionListener());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
-                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
-                fragment.setOnPhoneNumberPickerActionListener(
-                        new PhoneNumberPickerActionListener());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setShortcutAction(Intent.ACTION_CALL);
-                fragment.setSearchMode(mRequest.isSearchMode());
-
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
-                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
-                fragment.setOnPhoneNumberPickerActionListener(
-                        new PhoneNumberPickerActionListener());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setShortcutAction(Intent.ACTION_SENDTO);
-                fragment.setSearchMode(mRequest.isSearchMode());
-
-                mListFragment = fragment;
-                break;
-            }
-
-            case ContactsRequest.ACTION_PICK_POSTAL: {
-                PostalAddressPickerFragment fragment = new PostalAddressPickerFragment();
-                fragment.setOnPostalAddressPickerActionListener(
-                        new PostalAddressPickerActionListener());
-                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                mListFragment = fragment;
-                break;
-            }
-
             default:
                 throw new IllegalStateException("Invalid action code: " + mActionCode);
         }
@@ -422,47 +334,6 @@
         }
     }
 
-    private final class ContactPickerActionListener implements OnContactPickerActionListener {
-        public void onCreateNewContactAction() {
-            Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-            startActivityAndForwardResult(intent);
-        }
-
-        public void onPickContactAction(Uri contactUri) {
-            Intent intent = new Intent();
-            setResult(RESULT_OK, intent.setData(contactUri));
-            finish();
-        }
-
-        public void onShortcutIntentCreated(Intent intent) {
-            setResult(RESULT_OK, intent);
-            finish();
-        }
-    }
-
-    private final class PhoneNumberPickerActionListener implements
-            OnPhoneNumberPickerActionListener {
-        public void onPickPhoneNumberAction(Uri dataUri) {
-            Intent intent = new Intent();
-            setResult(RESULT_OK, intent.setData(dataUri));
-            finish();
-        }
-
-        public void onShortcutIntentCreated(Intent intent) {
-            setResult(RESULT_OK, intent);
-            finish();
-        }
-    }
-
-    private final class PostalAddressPickerActionListener implements
-            OnPostalAddressPickerActionListener {
-        public void onPickPostalAddressAction(Uri dataUri) {
-            Intent intent = new Intent();
-            setResult(RESULT_OK, intent.setData(dataUri));
-            finish();
-        }
-    }
-
     private class DetailFragmentListener implements ContactDetailFragment.Listener {
         public void onContactNotFound() {
             Toast.makeText(ContactListActivity.this, "onContactNotFound", Toast.LENGTH_LONG).show();
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
new file mode 100644
index 0000000..55d225a
--- /dev/null
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -0,0 +1,473 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import com.android.contacts.R;
+import com.android.contacts.list.ContactEntryListFragment;
+import com.android.contacts.list.ContactPickerFragment;
+import com.android.contacts.list.ContactsIntentResolver;
+import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.list.DefaultContactBrowseListFragment;
+import com.android.contacts.list.OnContactBrowserActionListener;
+import com.android.contacts.list.OnContactPickerActionListener;
+import com.android.contacts.list.OnPhoneNumberPickerActionListener;
+import com.android.contacts.list.OnPostalAddressPickerActionListener;
+import com.android.contacts.list.PhoneNumberPickerFragment;
+import com.android.contacts.list.PostalAddressPickerFragment;
+import com.android.contacts.widget.ContextMenuAdapter;
+import com.android.contacts.widget.SearchEditText;
+import com.android.contacts.widget.SearchEditText.OnFilterTextListener;
+
+import android.app.Activity;
+import android.app.FragmentTransaction;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+
+/**
+ * Displays a list of contacts (or phone numbers or postal addresses) for the
+ * purposes of selecting one.
+ */
+public class ContactSelectionActivity extends Activity implements View.OnCreateContextMenuListener {
+
+    private static final String TAG = "ContactSelectionActivity";
+
+    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 ContactsIntentResolver mIntentResolver;
+    protected ContactEntryListFragment<?> mListFragment;
+
+    private int mActionCode;
+
+    private boolean mSearchInitiated;
+
+    private ContactsRequest mRequest;
+    private SearchEditText mSearchEditText;
+
+    public ContactSelectionActivity() {
+        mIntentResolver = new ContactsIntentResolver(this);
+    }
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        // Extract relevant information from the intent
+        mRequest = mIntentResolver.resolveIntent(getIntent());
+        if (!mRequest.isValid()) {
+            setResult(RESULT_CANCELED);
+            finish();
+            return;
+        }
+
+        Intent redirect = mRequest.getRedirectIntent();
+        if (redirect != null) {
+            // Need to start a different activity
+            startActivity(redirect);
+            finish();
+            return;
+        }
+
+        setTitle(mRequest.getActivityTitle());
+
+        onCreateFragment();
+
+        int listFragmentContainerId;
+        if (mRequest.isSearchMode()) {
+            setContentView(R.layout.contacts_search_content);
+            listFragmentContainerId = R.id.list_container;
+            setupSearchUI();
+        } else {
+            listFragmentContainerId = android.R.id.content;
+        }
+
+        FragmentTransaction transaction = openFragmentTransaction();
+        transaction.add(listFragmentContainerId, mListFragment);
+        transaction.commit();
+    }
+
+    private void setupSearchUI() {
+        mSearchEditText = (SearchEditText)findViewById(R.id.search_src_text);
+        mSearchEditText.setText(mRequest.getQueryString());
+        mSearchEditText.setOnFilterTextListener(new OnFilterTextListener() {
+            public void onFilterChange(String queryString) {
+                mListFragment.setQueryString(queryString);
+            }
+
+            public void onCancelSearch() {
+                finish();
+            }
+        });
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (mRequest.isSearchMode()) {
+            mSearchEditText.requestFocus();
+        }
+    }
+
+    /**
+     * Creates the fragment based on the current request.
+     */
+    private void onCreateFragment() {
+        mActionCode = mRequest.getActionCode();
+        switch (mActionCode) {
+            case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
+                DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
+                fragment.setOnContactListActionListener(new ContactBrowserActionListener());
+                fragment.setEditMode(true);
+                fragment.setCreateContactEnabled(true);
+                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
+                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
+                fragment.setSearchMode(mRequest.isSearchMode());
+                fragment.setQueryString(mRequest.getQueryString());
+                fragment.setDirectorySearchEnabled(false);
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_PICK_CONTACT: {
+                ContactPickerFragment fragment = new ContactPickerFragment();
+                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                fragment.setSearchMode(mRequest.isSearchMode());
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
+                ContactPickerFragment fragment = new ContactPickerFragment();
+                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
+                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
+                ContactPickerFragment fragment = new ContactPickerFragment();
+                fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
+                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                fragment.setSearchMode(mRequest.isSearchMode());
+                fragment.setQueryString(mRequest.getQueryString());
+                fragment.setDirectorySearchEnabled(mRequest.isDirectorySearchEnabled());
+                fragment.setShortcutRequested(true);
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_PICK_PHONE: {
+                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
+                fragment.setOnPhoneNumberPickerActionListener(
+                        new PhoneNumberPickerActionListener());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
+                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
+                fragment.setOnPhoneNumberPickerActionListener(
+                        new PhoneNumberPickerActionListener());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                fragment.setShortcutAction(Intent.ACTION_CALL);
+                fragment.setSearchMode(mRequest.isSearchMode());
+
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
+                PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
+                fragment.setOnPhoneNumberPickerActionListener(
+                        new PhoneNumberPickerActionListener());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                fragment.setShortcutAction(Intent.ACTION_SENDTO);
+                fragment.setSearchMode(mRequest.isSearchMode());
+
+                mListFragment = fragment;
+                break;
+            }
+
+            case ContactsRequest.ACTION_PICK_POSTAL: {
+                PostalAddressPickerFragment fragment = new PostalAddressPickerFragment();
+                fragment.setOnPostalAddressPickerActionListener(
+                        new PostalAddressPickerActionListener());
+                fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+                mListFragment = fragment;
+                break;
+            }
+
+            default:
+                throw new IllegalStateException("Invalid action code: " + mActionCode);
+        }
+        mListFragment.setContactsRequest(mRequest);
+    }
+
+    private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
+        public void onViewContactAction(Uri contactLookupUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onCreateNewContactAction() {
+            Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+            Bundle extras = getIntent().getExtras();
+            if (extras != null) {
+                intent.putExtras(extras);
+            }
+            startActivity(intent);
+        }
+
+        public void onEditContactAction(Uri contactLookupUri) {
+            Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+            Bundle extras = getIntent().getExtras();
+            if (extras != null) {
+                intent.putExtras(extras);
+            }
+            startActivity(intent);
+        }
+
+        public void onAddToFavoritesAction(Uri contactUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onRemoveFromFavoritesAction(Uri contactUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onCallContactAction(Uri contactUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onSmsContactAction(Uri contactUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onDeleteContactAction(Uri contactUri) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void onFinishAction() {
+            onBackPressed();
+        }
+    }
+
+    private final class ContactPickerActionListener implements OnContactPickerActionListener {
+        public void onCreateNewContactAction() {
+            Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+            startActivityAndForwardResult(intent);
+        }
+
+        public void onPickContactAction(Uri contactUri) {
+            Intent intent = new Intent();
+            setResult(RESULT_OK, intent.setData(contactUri));
+            finish();
+        }
+
+        public void onShortcutIntentCreated(Intent intent) {
+            setResult(RESULT_OK, intent);
+            finish();
+        }
+    }
+
+    private final class PhoneNumberPickerActionListener implements
+            OnPhoneNumberPickerActionListener {
+        public void onPickPhoneNumberAction(Uri dataUri) {
+            Intent intent = new Intent();
+            setResult(RESULT_OK, intent.setData(dataUri));
+            finish();
+        }
+
+        public void onShortcutIntentCreated(Intent intent) {
+            setResult(RESULT_OK, intent);
+            finish();
+        }
+    }
+
+    private final class PostalAddressPickerActionListener implements
+            OnPostalAddressPickerActionListener {
+        public void onPickPostalAddressAction(Uri dataUri) {
+            Intent intent = new Intent();
+            setResult(RESULT_OK, intent.setData(dataUri));
+            finish();
+        }
+    }
+
+    public void startActivityAndForwardResult(final Intent intent) {
+        intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+        // Forward extras to the new activity
+        Bundle extras = getIntent().getExtras();
+        if (extras != null) {
+            intent.putExtras(extras);
+        }
+        startActivity(intent);
+        finish();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+
+        MenuInflater inflater = getMenuInflater();
+        if (!mListFragment.isSearchMode()) {
+            inflater.inflate(R.menu.search, menu);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.menu_search: {
+                onSearchRequested();
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+            boolean globalSearch) {
+// TODO
+//        if (mProviderStatus != ProviderStatus.STATUS_NORMAL) {
+//            return;
+//        }
+
+        if (globalSearch) {
+            super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+        } else {
+            mListFragment.startSearch(initialQuery);
+        }
+    }
+
+    @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_VIEW_CONTACT:
+//                if (resultCode == RESULT_OK) {
+//                    mAdapter.notifyDataSetChanged();
+//                }
+//                break;
+//
+//            case SUBACTIVITY_DISPLAY_GROUP:
+//                // Mark as just created so we re-run the view query
+////                mJustCreated = true;
+//                break;
+//
+            case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
+                if (resultCode == RESULT_OK) {
+                    mListFragment.onPickerResult(data);
+                }
+
+// TODO fix or remove multipicker code
+//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
+//                    // Finish the activity if the sub activity was canceled as back key is used
+//                    // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
+//                    finish();
+//                }
+//                break;
+        }
+    }
+
+    @Override
+    public boolean onContextItemSelected(MenuItem item) {
+        ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter();
+        if (menuAdapter != null) {
+            return menuAdapter.onContextItemSelected(item);
+        }
+
+        return super.onContextItemSelected(item);
+    }
+
+    /**
+     * Event handler for the use case where the user starts typing without
+     * bringing up the search UI first.
+     */
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if (!mSearchInitiated && !mRequest.isSearchMode()) {
+            int unicodeChar = event.getUnicodeChar();
+            if (unicodeChar != 0) {
+                mSearchInitiated = true;
+                startSearch(new String(new int[]{unicodeChar}, 0, 1), false, null, false);
+                return true;
+            }
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        // TODO move to the fragment
+        switch (keyCode) {
+//            case KeyEvent.KEYCODE_CALL: {
+//                if (callSelection()) {
+//                    return true;
+//                }
+//                break;
+//            }
+
+            case KeyEvent.KEYCODE_DEL: {
+                if (deleteSelection()) {
+                    return true;
+                }
+                break;
+            }
+        }
+
+        return super.onKeyDown(keyCode, event);
+    }
+
+    private boolean deleteSelection() {
+        // TODO move to the fragment
+//        if (mActionCode == ContactsRequest.ACTION_DEFAULT) {
+//            final int position = mListView.getSelectedItemPosition();
+//            if (position != ListView.INVALID_POSITION) {
+//                Uri contactUri = getContactUri(position);
+//                if (contactUri != null) {
+//                    doContactDelete(contactUri);
+//                    return true;
+//                }
+//            }
+//        }
+        return false;
+    }
+}
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index c0e9043..0570b2c 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -43,7 +43,7 @@
 @SuppressWarnings("deprecation")
 public class ContactsIntentResolver {
 
-    private static final String TAG = "ContactsListActivity";
+    private static final String TAG = "ContactsIntentResolver";
 
     private final Activity mContext;
 
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 0666879..7af7dfc 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -52,8 +52,8 @@
 
     private static final String ANDROID_CONTACTS_PACKAGE = "com.android.contacts";
 
-    private static final String CONTACTS_LIST_ACTIVITY_CLASS_NAME =
-            "com.android.contacts.activities.ContactsListActivity";
+    private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
+            "com.android.contacts.activities.ContactListActivity";
     private static final String SEARCH_RESULTS_ACTIVITY_CLASS_NAME =
             "com.android.contacts.SearchResultsActivity";
     private static final String MULTIPLE_PHONE_PICKER_ACTIVITY_CLASS_NAME =
@@ -124,87 +124,87 @@
 
         switch (position) {
             case LIST_DEFAULT: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(Intent.ACTION_VIEW, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_ALL_CONTACTS_ACTION: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(UI.LIST_ALL_CONTACTS_ACTION, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_CONTACTS_WITH_PHONES_ACTION: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(UI.LIST_CONTACTS_WITH_PHONES_ACTION, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_STARRED_ACTION: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(UI.LIST_STARRED_ACTION, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_STARRED_ACTION_WITH_FILTER: {
-                startContactsListActivity(buildFilterIntent(ContactsRequest.ACTION_STARRED, false));
+                startContactListActivity(buildFilterIntent(ContactsRequest.ACTION_STARRED, false));
                 break;
             }
             case LIST_FREQUENT_ACTION: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(UI.LIST_FREQUENT_ACTION, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_FREQUENT_ACTION_WITH_FILTER: {
-                startContactsListActivity(
+                startContactListActivity(
                         buildFilterIntent(ContactsRequest.ACTION_FREQUENT, false));
                 break;
             }
             case LIST_STREQUENT_ACTION: {
-                startContactsListActivity(
+                startContactListActivity(
                         new Intent(UI.LIST_STREQUENT_ACTION, Contacts.CONTENT_URI));
                 break;
             }
             case LIST_STREQUENT_ACTION_WITH_FILTER: {
-                startContactsListActivity(
+                startContactListActivity(
                         buildFilterIntent(ContactsRequest.ACTION_STREQUENT, false));
                 break;
             }
             case ACTION_PICK_CONTACT: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI));
                 break;
             }
             case ACTION_PICK_CONTACT_LEGACY: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, People.CONTENT_URI));
                 break;
             }
             case ACTION_PICK_PHONE: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, Phone.CONTENT_URI));
                 break;
             }
             case ACTION_PICK_PHONE_LEGACY: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, Phones.CONTENT_URI));
                 break;
             }
             case ACTION_PICK_POSTAL: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, StructuredPostal.CONTENT_URI));
                 break;
             }
             case ACTION_PICK_POSTAL_LEGACY: {
                 Intent intent = new Intent(Intent.ACTION_PICK);
                 intent.setType(ContactMethods.CONTENT_POSTAL_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_CREATE_SHORTCUT_CONTACT: {
                 Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_CREATE_SHORTCUT_CONTACT_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT,
                                 false));
                 break;
@@ -217,7 +217,7 @@
                 break;
             }
             case ACTION_CREATE_SHORTCUT_DIAL_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL,
                                 false));
                 break;
@@ -230,29 +230,29 @@
                 break;
             }
             case ACTION_CREATE_SHORTCUT_MESSAGE_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL, false));
                 break;
             }
             case ACTION_GET_CONTENT_CONTACT: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(Contacts.CONTENT_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_GET_CONTENT_CONTACT_LEGACY: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(People.CONTENT_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_GET_CONTENT_CONTACT_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT, false));
                 break;
             }
             case ACTION_GET_CONTENT_CONTACT_FILTER_LEGACY: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT,
                                 true));
                 break;
@@ -260,40 +260,40 @@
             case ACTION_GET_CONTENT_PHONE: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(Phone.CONTENT_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_GET_CONTENT_PHONE_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_PICK_PHONE, true));
                 break;
             }
             case ACTION_GET_CONTENT_PHONE_LEGACY: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(Phones.CONTENT_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_GET_CONTENT_POSTAL: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(StructuredPostal.CONTENT_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_GET_CONTENT_POSTAL_FILTER: {
-                startContactsListActivityForResult(
+                startContactSelectionActivityForResult(
                         buildFilterIntent(ContactsRequest.ACTION_PICK_POSTAL, false));
                 break;
             }
             case ACTION_GET_CONTENT_POSTAL_LEGACY: {
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                 intent.setType(ContactMethods.CONTENT_POSTAL_ITEM_TYPE);
-                startContactsListActivityForResult(intent);
+                startContactSelectionActivityForResult(intent);
                 break;
             }
             case ACTION_INSERT_OR_EDIT: {
                 Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-                startContactsListActivity(intent);
+                startContactListActivity(intent);
                 break;
             }
             case ACTION_SEARCH_CALL: {
@@ -328,7 +328,7 @@
                     Intent intent = new Intent(Intents.SEARCH_SUGGESTION_CLICKED);
                     intent.setData(contactUri);
                     intent.putExtra(SearchManager.ACTION_MSG, "call");
-                    startContactsListActivity(intent);
+                    startContactListActivity(intent);
                 }
                 break;
             }
@@ -338,20 +338,20 @@
                     Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
                     Intent intent = new Intent(Intents.SEARCH_SUGGESTION_CLICKED);
                     intent.setData(contactUri);
-                    startContactsListActivity(intent);
+                    startContactListActivity(intent);
                 }
                 break;
             }
             case SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED: {
                 Intent intent = new Intent(Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED);
                 intent.setData(Uri.parse("tel:800-4664411"));
-                startContactsListActivity(intent);
+                startContactListActivity(intent);
                 break;
             }
             case SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED: {
                 Intent intent = new Intent(Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED);
                 intent.setData(Uri.parse("tel:800-4664411"));
-                startContactsListActivity(intent);
+                startContactListActivity(intent);
                 break;
             }
             case JOIN_CONTACT: {
@@ -438,16 +438,14 @@
         return intent;
     }
 
-    private void startContactsListActivity(Intent intent) {
+    private void startContactListActivity(Intent intent) {
         intent.setComponent(
-                new ComponentName(ANDROID_CONTACTS_PACKAGE, CONTACTS_LIST_ACTIVITY_CLASS_NAME));
+                new ComponentName(ANDROID_CONTACTS_PACKAGE, CONTACT_LIST_ACTIVITY_CLASS_NAME));
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         startActivity(intent);
     }
 
-    private void startContactsListActivityForResult(Intent intent) {
-        intent.setComponent(
-                new ComponentName(ANDROID_CONTACTS_PACKAGE, CONTACTS_LIST_ACTIVITY_CLASS_NAME));
+    private void startContactSelectionActivityForResult(Intent intent) {
         startActivityForResult(intent, 12);
     }