Replace enum by int

Change-Id: I0d7aafa509f6d2747e78493b67dc65de52c9bb68
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 0260ca6..3024418 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -77,27 +77,16 @@
     private boolean mShowHomeIcon;
     private boolean mShowTabsAsText;
 
-    public enum TabState {
-        GROUPS,
-        ALL,
-        FAVORITES;
+    public interface TabState {
+        public static int GROUPS = 0;
+        public static int ALL = 1;
+        public static int FAVORITES = 2;
 
-        public static TabState fromInt(int value) {
-            if (GROUPS.ordinal() == value) {
-                return GROUPS;
-            }
-            if (ALL.ordinal() == value) {
-                return ALL;
-            }
-            if (FAVORITES.ordinal() == value) {
-                return FAVORITES;
-            }
-            throw new IllegalArgumentException("Invalid value: " + value);
-        }
+        public static int COUNT = 3;
+        public static int DEFAULT = ALL;
     }
 
-    private static final TabState DEFAULT_TAB = TabState.ALL;
-    private TabState mCurrentTab = DEFAULT_TAB;
+    private int mCurrentTab = TabState.DEFAULT;
 
     public ActionBarAdapter(Context context, Listener listener, ActionBar actionBar,
             boolean isUsingTwoPanes) {
@@ -149,7 +138,7 @@
             mQueryString = savedState.getString(EXTRA_KEY_QUERY);
 
             // Just set to the field here.  The listener will be notified by update().
-            mCurrentTab = TabState.fromInt(savedState.getInt(EXTRA_KEY_SELECTED_TAB));
+            mCurrentTab = savedState.getInt(EXTRA_KEY_SELECTED_TAB);
         }
         // Show tabs or the expanded {@link SearchView}, depending on whether or not we are in
         // search mode.
@@ -165,9 +154,8 @@
         mListener = listener;
     }
 
-    private void addTab(TabState tabState, int icon, int description) {
+    private void addTab(int expectedTabIndex, int icon, int description) {
         final Tab tab = mActionBar.newTab();
-        tab.setTag(tabState);
         tab.setTabListener(mTabListener);
         if (mShowTabsAsText) {
             tab.setText(description);
@@ -176,6 +164,9 @@
             tab.setContentDescription(description);
         }
         mActionBar.addTab(tab);
+        if (expectedTabIndex != tab.getPosition()) {
+            throw new IllegalStateException("Tabs must be created in the right order");
+        }
     }
 
     private class MyTabListener implements ActionBar.TabListener {
@@ -191,7 +182,7 @@
 
         @Override public void onTabSelected(Tab tab, FragmentTransaction ft) {
             if (!mIgnoreTabSelected) {
-                setCurrentTab((TabState)tab.getTag());
+                setCurrentTab(tab.getPosition());
             }
         }
     }
@@ -199,31 +190,29 @@
     /**
      * Change the current tab, and notify the listener.
      */
-    public void setCurrentTab(TabState tab) {
+    public void setCurrentTab(int tab) {
         setCurrentTab(tab, true);
     }
 
     /**
      * Change the current tab
      */
-    public void setCurrentTab(TabState tab, boolean notifyListener) {
-        if (tab == null) throw new NullPointerException();
+    public void setCurrentTab(int tab, boolean notifyListener) {
         if (tab == mCurrentTab) {
             return;
         }
         mCurrentTab = tab;
 
-        int index = mCurrentTab.ordinal();
         if ((mActionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS)
-                && (index != mActionBar.getSelectedNavigationIndex())) {
-            mActionBar.setSelectedNavigationItem(index);
+                && (mCurrentTab != mActionBar.getSelectedNavigationIndex())) {
+            mActionBar.setSelectedNavigationItem(mCurrentTab);
         }
 
         if (notifyListener && mListener != null) mListener.onSelectedTabChanged();
         saveLastTabPreference(mCurrentTab);
     }
 
-    public TabState getCurrentTab() {
+    public int getCurrentTab() {
         return mCurrentTab;
     }
 
@@ -320,7 +309,7 @@
                 // after this anyway.
                 mTabListener.mIgnoreTabSelected = true;
                 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-                mActionBar.setSelectedNavigationItem(mCurrentTab.ordinal());
+                mActionBar.setSelectedNavigationItem(mCurrentTab);
                 mTabListener.mIgnoreTabSelected = false;
             }
             mActionBar.setTitle(null);
@@ -379,7 +368,7 @@
     public void onSaveInstanceState(Bundle outState) {
         outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
-        outState.putInt(EXTRA_KEY_SELECTED_TAB, mCurrentTab.ordinal());
+        outState.putInt(EXTRA_KEY_SELECTED_TAB, mCurrentTab);
     }
 
     /**
@@ -399,16 +388,16 @@
         mSearchView.setIconified(false); // Workaround for the "IME not popping up" issue.
     }
 
-    private void saveLastTabPreference(TabState tab) {
-        mPrefs.edit().putInt(PERSISTENT_LAST_TAB, tab.ordinal()).apply();
+    private void saveLastTabPreference(int tab) {
+        mPrefs.edit().putInt(PERSISTENT_LAST_TAB, tab).apply();
     }
 
-    private TabState loadLastTabPreference() {
+    private int loadLastTabPreference() {
         try {
-            return TabState.fromInt(mPrefs.getInt(PERSISTENT_LAST_TAB, DEFAULT_TAB.ordinal()));
+            return mPrefs.getInt(PERSISTENT_LAST_TAB, TabState.DEFAULT);
         } catch (IllegalArgumentException e) {
             // Preference is corrupt?
-            return DEFAULT_TAB;
+            return TabState.DEFAULT;
         }
     }
 }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 0d226d8..3300008 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -529,7 +529,7 @@
             ContactListFilter filter = null;
             int actionCode = mRequest.getActionCode();
             boolean searchMode = mRequest.isSearchMode();
-            TabState tabToOpen = null;
+            final int tabToOpen;
             switch (actionCode) {
                 case ContactsRequest.ACTION_ALL_CONTACTS:
                     filter = ContactListFilter.createFilterWithType(
@@ -555,8 +555,11 @@
                 case ContactsRequest.ACTION_GROUP:
                     tabToOpen = TabState.GROUPS;
                     break;
+                default:
+                    tabToOpen = -1;
+                    break;
             }
-            if (tabToOpen != null) {
+            if (tabToOpen != -1) {
                 mActionBarAdapter.setCurrentTab(tabToOpen);
             }
 
@@ -640,7 +643,7 @@
      * {@link ActionBarAdapter#isSearchMode()} and {@link ActionBarAdapter#getCurrentTab()}.
      */
     private void updateFragmentsVisibility() {
-        TabState tab = mActionBarAdapter.getCurrentTab();
+        int tab = mActionBarAdapter.getCurrentTab();
 
         // We use ViewPager on 1-pane.
         if (!PhoneCapabilityTester.isUsingTwoPanes(this)) {
@@ -650,9 +653,8 @@
                 // No smooth scrolling if quitting from the search mode.
                 final boolean wasSearchMode = mTabPagerAdapter.isSearchMode();
                 mTabPagerAdapter.setSearchMode(false);
-                int tabIndex = tab.ordinal();
-                if (mTabPager.getCurrentItem() != tabIndex) {
-                    mTabPager.setCurrentItem(tabIndex, !wasSearchMode);
+                if (mTabPager.getCurrentItem() != tab) {
+                    mTabPager.setCurrentItem(tab, !wasSearchMode);
                 }
             }
             invalidateOptionsMenu();
@@ -670,20 +672,20 @@
             tab = TabState.ALL;
         }
         switch (tab) {
-            case FAVORITES:
+            case TabState.FAVORITES:
                 mFavoritesView.setVisibility(View.VISIBLE);
                 mBrowserView.setVisibility(View.GONE);
                 mGroupDetailsView.setVisibility(View.GONE);
                 mContactDetailsView.setVisibility(View.GONE);
                 break;
-            case GROUPS:
+            case TabState.GROUPS:
                 mFavoritesView.setVisibility(View.GONE);
                 mBrowserView.setVisibility(View.VISIBLE);
                 mGroupDetailsView.setVisibility(View.VISIBLE);
                 mContactDetailsView.setVisibility(View.GONE);
                 mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable());
                 break;
-            case ALL:
+            case TabState.ALL:
                 mFavoritesView.setVisibility(View.GONE);
                 mBrowserView.setVisibility(View.VISIBLE);
                 mContactDetailsView.setVisibility(View.VISIBLE);
@@ -696,7 +698,7 @@
         // Note mContactDetailLoaderFragment is an invisible fragment, but we still have to show/
         // hide it so its options menu will be shown/hidden.
         switch (tab) {
-            case FAVORITES:
+            case TabState.FAVORITES:
                 showFragment(ft, mFavoritesFragment);
                 showFragment(ft, mFrequentFragment);
                 hideFragment(ft, mAllFragment);
@@ -705,7 +707,7 @@
                 hideFragment(ft, mGroupsFragment);
                 hideFragment(ft, mGroupDetailFragment);
                 break;
-            case ALL:
+            case TabState.ALL:
                 hideFragment(ft, mFavoritesFragment);
                 hideFragment(ft, mFrequentFragment);
                 showFragment(ft, mAllFragment);
@@ -714,7 +716,7 @@
                 hideFragment(ft, mGroupsFragment);
                 hideFragment(ft, mGroupDetailFragment);
                 break;
-            case GROUPS:
+            case TabState.GROUPS:
                 hideFragment(ft, mFavoritesFragment);
                 hideFragment(ft, mFrequentFragment);
                 hideFragment(ft, mAllFragment);
@@ -734,18 +736,18 @@
         showEmptyStateForTab(tab);
     }
 
-    private void showEmptyStateForTab(TabState tab) {
+    private void showEmptyStateForTab(int tab) {
         if (mContactsUnavailableFragment != null) {
             switch (tab) {
-                case FAVORITES:
+                case TabState.FAVORITES:
                     mContactsUnavailableFragment.setMessageText(
                             R.string.listTotalAllContactsZeroStarred, -1);
                     break;
-                case GROUPS:
+                case TabState.GROUPS:
                     mContactsUnavailableFragment.setMessageText(R.string.noGroups,
                             areGroupWritableAccountsAvailable() ? -1 : R.string.noAccounts);
                     break;
-                case ALL:
+                case TabState.ALL:
                     mContactsUnavailableFragment.setMessageText(R.string.noContacts, -1);
                     break;
             }
@@ -765,10 +767,9 @@
         public void onPageSelected(int position) {
             // Make sure not in the search mode, in which case position != TabState.ordinal().
             if (!mTabPagerAdapter.isSearchMode()) {
-                TabState selectedTab = TabState.fromInt(position);
-                mActionBarAdapter.setCurrentTab(selectedTab, false);
-                showEmptyStateForTab(selectedTab);
-                if (selectedTab == TabState.GROUPS) {
+                mActionBarAdapter.setCurrentTab(position, false);
+                showEmptyStateForTab(position);
+                if (position == TabState.GROUPS) {
                     mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable());
                 }
                 invalidateOptionsMenu();
@@ -812,7 +813,7 @@
 
         @Override
         public int getCount() {
-            return mTabPagerAdapterSearchMode ? 1 : TabState.values().length;
+            return mTabPagerAdapterSearchMode ? 1 : TabState.COUNT;
         }
 
         /** Gets called when the number of items changes. */
@@ -824,13 +825,13 @@
                 }
             } else {
                 if (object == mFavoritesFragment) {
-                    return TabState.FAVORITES.ordinal();
+                    return TabState.FAVORITES;
                 }
                 if (object == mAllFragment) {
-                    return TabState.ALL.ordinal();
+                    return TabState.ALL;
                 }
                 if (object == mGroupsFragment) {
-                    return TabState.GROUPS.ordinal();
+                    return TabState.GROUPS;
                 }
             }
             return POSITION_NONE;
@@ -846,11 +847,11 @@
                     return mAllFragment;
                 }
             } else {
-                if (position == TabState.FAVORITES.ordinal()) {
+                if (position == TabState.FAVORITES) {
                     return mFavoritesFragment;
-                } else if (position == TabState.ALL.ordinal()) {
+                } else if (position == TabState.ALL) {
                     return mAllFragment;
-                } else if (position == TabState.GROUPS.ordinal()) {
+                } else if (position == TabState.GROUPS) {
                     return mGroupsFragment;
                 }
             }
@@ -1032,8 +1033,7 @@
                 mainView.setVisibility(View.INVISIBLE);
             }
 
-            TabState tab = mActionBarAdapter.getCurrentTab();
-            showEmptyStateForTab(tab);
+            showEmptyStateForTab(mActionBarAdapter.getCurrentTab());
         }
 
         invalidateOptionsMenuIfNeeded();
@@ -1404,17 +1404,17 @@
             contactsFilterMenu.setVisible(false);
         } else {
             switch (mActionBarAdapter.getCurrentTab()) {
-                case FAVORITES:
+                case TabState.FAVORITES:
                     addContactMenu.setVisible(false);
                     addGroupMenu.setVisible(false);
                     contactsFilterMenu.setVisible(false);
                     break;
-                case ALL:
+                case TabState.ALL:
                     addContactMenu.setVisible(true);
                     addGroupMenu.setVisible(false);
                     contactsFilterMenu.setVisible(true);
                     break;
-                case GROUPS:
+                case TabState.GROUPS:
                     // Do not display the "new group" button if no accounts are available
                     if (areGroupWritableAccountsAvailable()) {
                         addGroupMenu.setVisible(true);