diff --git a/src/com/android/contacts/activities/NavigationBar.java b/src/com/android/contacts/activities/ActionBarAdapter.java
similarity index 79%
rename from src/com/android/contacts/activities/NavigationBar.java
rename to src/com/android/contacts/activities/ActionBarAdapter.java
index 5b6caa6..2247d93 100644
--- a/src/com/android/contacts/activities/NavigationBar.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * Copyright (C) 2010 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.
@@ -33,12 +33,12 @@
 import java.util.HashMap;
 
 /**
- * Navigation bar at the top of the Contacts activity.
+ * Adapter for the action bar at the top of the Contacts activity.
  */
-public class NavigationBar implements OnFilterTextListener, OnClickListener {
+public class ActionBarAdapter implements OnFilterTextListener, OnClickListener {
 
     public interface Listener {
-        void onNavigationBarChange();
+        void onAction();
     }
 
     private static final String EXTRA_KEY_DEFAULT_MODE = "navBar.defaultMode";
@@ -49,12 +49,8 @@
     private static final String KEY_MODE_FAVORITES = "mode_favorites";
     private static final String KEY_MODE_SEARCH = "mode_search";
 
-    public static final int MODE_CONTACTS = 0;
-    public static final int MODE_FAVORITES = 1;
-    public static final int MODE_SEARCH = 2;
-
-    private int mMode = MODE_CONTACTS;
-    private int mDefaultMode = MODE_CONTACTS;
+    private int mMode = ContactBrowserMode.MODE_CONTACTS;
+    private int mDefaultMode = ContactBrowserMode.MODE_CONTACTS;
     private String mQueryString;
     private HashMap<Integer, Bundle> mSavedStateByMode = new HashMap<Integer, Bundle>();
 
@@ -71,7 +67,7 @@
     private ToggleButton mSearchButton;
     private ImageView mCancelSearchButton;
 
-    public NavigationBar(Context context) {
+    public ActionBarAdapter(Context context) {
         mContext = context;
     }
 
@@ -83,19 +79,19 @@
             mDefaultMode = savedState.getInt(EXTRA_KEY_DEFAULT_MODE, -1);
             mMode = savedState.getInt(EXTRA_KEY_MODE, -1);
             mQueryString = savedState.getString(EXTRA_KEY_QUERY);
-            restoreSavedState(savedState, MODE_CONTACTS, KEY_MODE_CONTACTS);
-            restoreSavedState(savedState, MODE_FAVORITES, KEY_MODE_FAVORITES);
-            restoreSavedState(savedState, MODE_SEARCH, KEY_MODE_SEARCH);
+            restoreSavedState(savedState, ContactBrowserMode.MODE_CONTACTS, KEY_MODE_CONTACTS);
+            restoreSavedState(savedState, ContactBrowserMode.MODE_FAVORITES, KEY_MODE_FAVORITES);
+            restoreSavedState(savedState, ContactBrowserMode.MODE_SEARCH, KEY_MODE_SEARCH);
         }
 
         int actionCode = request.getActionCode();
         if (mDefaultMode == -1) {
             mDefaultMode = actionCode == ContactsRequest.ACTION_DEFAULT
-                    ? NavigationBar.MODE_CONTACTS
-                    : NavigationBar.MODE_FAVORITES;
+                    ? ContactBrowserMode.MODE_CONTACTS
+                    : ContactBrowserMode.MODE_FAVORITES;
         }
         if (mMode == -1) {
-            mMode = request.isSearchMode() ? NavigationBar.MODE_SEARCH : mDefaultMode;
+            mMode = request.isSearchMode() ? ContactBrowserMode.MODE_SEARCH : mDefaultMode;
         }
         if (mQueryString == null) {
             mQueryString = request.getQueryString();
@@ -133,7 +129,7 @@
         mMode = mode;
         update();
         if (mListener != null) {
-            mListener.onNavigationBarChange();
+            mListener.onAction();
         }
     }
 
@@ -156,7 +152,7 @@
 
     public void update() {
         switch(mMode) {
-            case MODE_CONTACTS:
+            case ContactBrowserMode.MODE_CONTACTS:
                 mContactsButton.setChecked(true);
                 mFavoritesButton.setChecked(false);
                 mSearchButton.setChecked(false);
@@ -164,7 +160,7 @@
                 mSearchEditText.setVisibility(View.GONE);
                 mCancelSearchButton.setVisibility(View.GONE);
                 break;
-            case MODE_FAVORITES:
+            case ContactBrowserMode.MODE_FAVORITES:
                 mContactsButton.setChecked(false);
                 mFavoritesButton.setChecked(true);
                 mSearchButton.setChecked(false);
@@ -172,7 +168,7 @@
                 mSearchEditText.setVisibility(View.GONE);
                 mCancelSearchButton.setVisibility(View.GONE);
                 break;
-            case MODE_SEARCH:
+            case ContactBrowserMode.MODE_SEARCH:
                 mContactsButton.setChecked(false);
                 mFavoritesButton.setChecked(false);
                 mSearchButton.setVisibility(View.GONE);
@@ -187,19 +183,21 @@
     }
 
     public void toggleSearchMode() {
-        setMode(mMode == MODE_SEARCH ? mDefaultMode : MODE_SEARCH);
+        setMode(mMode == ContactBrowserMode.MODE_SEARCH
+                ? mDefaultMode
+                : ContactBrowserMode.MODE_SEARCH);
     }
 
     @Override
     public void onClick(View view) {
         if (view == mSearchButton) {
-            setMode(MODE_SEARCH);
+            setMode(ContactBrowserMode.MODE_SEARCH);
         } else if (view == mContactsButton) {
-            setMode(MODE_CONTACTS);
-            setDefaultMode(MODE_CONTACTS);
+            setMode(ContactBrowserMode.MODE_CONTACTS);
+            setDefaultMode(ContactBrowserMode.MODE_CONTACTS);
         } else if (view == mFavoritesButton) {
-            setMode(MODE_FAVORITES);
-            setDefaultMode(MODE_FAVORITES);
+            setMode(ContactBrowserMode.MODE_FAVORITES);
+            setDefaultMode(ContactBrowserMode.MODE_FAVORITES);
         } else {        // mCancelSearchButton
             setMode(mDefaultMode);
         }
@@ -209,7 +207,7 @@
     public void onFilterChange(String queryString) {
         mQueryString = queryString;
         if (mListener != null) {
-            mListener.onNavigationBarChange();
+            mListener.onAction();
         }
     }
 
@@ -230,9 +228,9 @@
         outState.putInt(EXTRA_KEY_DEFAULT_MODE, mDefaultMode);
         outState.putInt(EXTRA_KEY_MODE, mMode);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
-        saveInstanceState(outState, MODE_CONTACTS, KEY_MODE_CONTACTS);
-        saveInstanceState(outState, MODE_FAVORITES, KEY_MODE_FAVORITES);
-        saveInstanceState(outState, MODE_SEARCH, KEY_MODE_SEARCH);
+        saveInstanceState(outState, ContactBrowserMode.MODE_CONTACTS, KEY_MODE_CONTACTS);
+        saveInstanceState(outState, ContactBrowserMode.MODE_FAVORITES, KEY_MODE_FAVORITES);
+        saveInstanceState(outState, ContactBrowserMode.MODE_SEARCH, KEY_MODE_SEARCH);
     }
 
     private void saveInstanceState(Bundle outState, int mode, String key) {
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 40b5693..eb951d2 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * Copyright (C) 2010 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.
@@ -60,7 +60,7 @@
  * the right
  */
 public class ContactBrowserActivity extends Activity
-        implements View.OnCreateContextMenuListener, NavigationBar.Listener,
+        implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener,
         DialogManager.DialogShowingViewActivity {
 
     private static final String TAG = "ContactBrowserActivity";
@@ -79,31 +79,33 @@
             DIALOG_MANAGER_ID_2);
 
     private ContactsIntentResolver mIntentResolver;
+    private ContactsRequest mRequest;
+
+    private boolean mHasActionBar;
+    private ActionBarAdapter mActionBarAdapter;
+
+    /**
+     * Contact browser mode, see {@link ContactBrowserMode}.
+     */
+    private int mMode = -1;
+
     private ContactBrowseListFragment mListFragment;
-
-    private PhoneNumberInteraction mPhoneNumberCallInteraction;
-    private PhoneNumberInteraction mSendTextMessageInteraction;
-    private ContactDeletionInteraction mContactDeletionInteraction;
-    private ImportExportInteraction mImportExportInteraction;
-
     private ContactNoneFragment mEmptyFragment;
 
+    private boolean mContactContentDisplayed;
     private ContactDetailFragment mDetailFragment;
     private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener();
 
     private ContactEditorFragment mEditorFragment;
     private EditorFragmentListener mEditorFragmentListener = new EditorFragmentListener();
 
+    private PhoneNumberInteraction mPhoneNumberCallInteraction;
+    private PhoneNumberInteraction mSendTextMessageInteraction;
+    private ContactDeletionInteraction mContactDeletionInteraction;
+    private ImportExportInteraction mImportExportInteraction;
+
     private boolean mSearchInitiated;
 
-    private ContactsRequest mRequest;
-
-    private boolean mContactContentDisplayed;
-    private NavigationBar mNavigationBar;
-    private int mMode = -1;
-
-    private boolean mHasActionBar;
-
     public ContactBrowserActivity() {
         mIntentResolver = new ContactsIntentResolver(this);
     }
@@ -151,15 +153,14 @@
         setTitle(mRequest.getActivityTitle());
         setContentView(R.layout.contact_browser);
 
-
         mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         if (mHasActionBar) {
-            mNavigationBar = new NavigationBar(this);
-            mNavigationBar.onCreate(savedState, mRequest);
-            mNavigationBar.setListener(this);
+            mActionBarAdapter = new ActionBarAdapter(this);
+            mActionBarAdapter.onCreate(savedState, mRequest);
+            mActionBarAdapter.setListener(this);
 
             ActionBar actionBar = getActionBar();
-            View navBarView = mNavigationBar.onCreateView(getLayoutInflater());
+            View navBarView = mActionBarAdapter.onCreateView(getLayoutInflater());
             actionBar.setCustomNavigationMode(navBarView);
         }
 
@@ -174,19 +175,19 @@
     private void configureListFragment() {
         int mode = -1;
         if (mHasActionBar) {
-            mode = mNavigationBar.getMode();
-            if (mode == NavigationBar.MODE_SEARCH
-                    && TextUtils.isEmpty(mNavigationBar.getQueryString())) {
-                mode = mNavigationBar.getDefaultMode();
+            mode = mActionBarAdapter.getMode();
+            if (mode == ContactBrowserMode.MODE_SEARCH
+                    && TextUtils.isEmpty(mActionBarAdapter.getQueryString())) {
+                mode = mActionBarAdapter.getDefaultMode();
             }
         } else {
             int actionCode = mRequest.getActionCode();
             if (actionCode == ContactsRequest.ACTION_FREQUENT ||
                     actionCode == ContactsRequest.ACTION_STARRED ||
                     actionCode == ContactsRequest.ACTION_STREQUENT) {
-                mode = NavigationBar.MODE_FAVORITES;
+                mode = ContactBrowserMode.MODE_FAVORITES;
             } else {
-                mode = NavigationBar.MODE_CONTACTS;
+                mode = ContactBrowserMode.MODE_CONTACTS;
             }
         }
 
@@ -195,11 +196,11 @@
             closeListFragment();
             mMode = mode;
             switch (mMode) {
-                case NavigationBar.MODE_CONTACTS: {
+                case ContactBrowserMode.MODE_CONTACTS: {
                     mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT);
                     break;
                 }
-                case NavigationBar.MODE_FAVORITES: {
+                case ContactBrowserMode.MODE_FAVORITES: {
                     int favoritesAction = mRequest.getActionCode();
                     if (favoritesAction == ContactsRequest.ACTION_DEFAULT) {
                         favoritesAction = ContactsRequest.ACTION_STREQUENT;
@@ -207,19 +208,19 @@
                     mListFragment = createListFragment(favoritesAction);
                     break;
                 }
-                case NavigationBar.MODE_SEARCH: {
+                case ContactBrowserMode.MODE_SEARCH: {
                     mListFragment = createContactSearchFragment();
                     break;
                 }
             }
         }
 
-        if (mMode == NavigationBar.MODE_SEARCH) {
-            mListFragment.setQueryString(mNavigationBar.getQueryString());
+        if (mMode == ContactBrowserMode.MODE_SEARCH) {
+            mListFragment.setQueryString(mActionBarAdapter.getQueryString());
         }
 
         if (mHasActionBar) {
-            Bundle savedStateForMode = mNavigationBar.getSavedStateForMode(mMode);
+            Bundle savedStateForMode = mActionBarAdapter.getSavedStateForMode(mMode);
             if (savedStateForMode != null) {
                 mListFragment.restoreSavedState(savedStateForMode);
             }
@@ -239,7 +240,7 @@
             if (mHasActionBar) {
                 Bundle state = new Bundle();
                 mListFragment.onSaveInstanceState(state);
-                mNavigationBar.saveStateForMode(mMode, state);
+                mActionBarAdapter.saveStateForMode(mMode, state);
             }
 
             mListFragment = null;
@@ -328,8 +329,11 @@
         mEmptyFragment = null;
     }
 
+    /**
+     * Handler for action bar actions.
+     */
     @Override
-    public void onNavigationBarChange() {
+    public void onAction() {
         configureListFragment();
         setupContactDetailFragment(mListFragment.getSelectedContactUri());
     }
@@ -551,7 +555,7 @@
         super.onCreateOptionsMenu(menu);
 
         MenuInflater inflater = getMenuInflater();
-        if (mContactContentDisplayed) {
+        if (mHasActionBar) {
             inflater.inflate(R.menu.actions, menu);
             return true;
         } else if (mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT ||
@@ -740,10 +744,10 @@
 
                 if (unicodeChar != 0) {
                     String query = new String(new int[]{ unicodeChar }, 0, 1);
-                    if (mContactContentDisplayed) {
-                        if (mNavigationBar.getMode() != NavigationBar.MODE_SEARCH) {
-                            mNavigationBar.setQueryString(query);
-                            mNavigationBar.setMode(NavigationBar.MODE_SEARCH);
+                    if (mHasActionBar) {
+                        if (mActionBarAdapter.getMode() != ContactBrowserMode.MODE_SEARCH) {
+                            mActionBarAdapter.setQueryString(query);
+                            mActionBarAdapter.setMode(ContactBrowserMode.MODE_SEARCH);
                             return true;
                         }
                     } else if (!mRequest.isSearchMode()) {
@@ -779,8 +783,8 @@
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putInt(KEY_MODE, mMode);
-        if (mNavigationBar != null) {
-            mNavigationBar.onSaveInstanceState(outState);
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.onSaveInstanceState(outState);
         }
     }
 
diff --git a/src/com/android/contacts/activities/ContactBrowserMode.java b/src/com/android/contacts/activities/ContactBrowserMode.java
new file mode 100644
index 0000000..c135c1d
--- /dev/null
+++ b/src/com/android/contacts/activities/ContactBrowserMode.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2010 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;
+
+/**
+ * Contact browser mode constants.
+ */
+public class ContactBrowserMode {
+
+    public static final int MODE_CONTACTS = 0;
+    public static final int MODE_FAVORITES = 1;
+    public static final int MODE_SEARCH = 2;
+
+}
