diff --git a/res/values/integers.xml b/res/values/integers.xml
index 2ed0f7b..c1d0e11 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -25,4 +25,7 @@
     <!-- The maximum allowed group name length -->
     <integer name="group_name_max_length">40</integer>
 
+    <!-- Fade in/out duration of search and selection -->
+    <integer name="action_bar_animation_duration">195</integer>
+
 </resources>
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index aa48bce..9f7d8b0 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -98,6 +98,7 @@
 
     private int mMaxPortraitTabHeight;
     private int mMaxToolbarContentInsetStart;
+    private int mActionBarAnimationDuration;
 
     private final Activity mActivity;
     private final SharedPreferences mPrefs;
@@ -144,6 +145,8 @@
         mToolBarFrame = (FrameLayout) mToolbar.getParent();
         mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
         mSearchHintResId = searchHintResId;
+        mActionBarAnimationDuration =
+                mActivity.getResources().getInteger(R.integer.action_bar_animation_duration);
 
         setupSearchAndSelectionViews();
         setupTabs(mActivity);
@@ -465,7 +468,7 @@
             if (mSelectionMode) {
                 addSelectionContainer();
                 mSelectionContainer.setAlpha(0);
-                mSelectionContainer.animate().alpha(1);
+                mSelectionContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
                 animateTabHeightChange(mMaxPortraitTabHeight, 0);
                 updateDisplayOptions(isSearchModeChanging);
             } else {
@@ -474,7 +477,8 @@
                 }
                 mSelectionContainer.setAlpha(1);
                 animateTabHeightChange(0, mMaxPortraitTabHeight);
-                mSelectionContainer.animate().alpha(0).withEndAction(new Runnable() {
+                mSelectionContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
+                        .withEndAction(new Runnable() {
                     @Override
                     public void run() {
                         updateDisplayOptions(isSearchModeChanging);
@@ -491,13 +495,14 @@
             if (mSearchMode) {
                 addSearchContainer();
                 mSearchContainer.setAlpha(0);
-                mSearchContainer.animate().alpha(1);
+                mSearchContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
                 animateTabHeightChange(mMaxPortraitTabHeight, 0);
                 updateDisplayOptions(isSearchModeChanging);
             } else {
                 mSearchContainer.setAlpha(1);
                 animateTabHeightChange(0, mMaxPortraitTabHeight);
-                mSearchContainer.animate().alpha(0).withEndAction(new Runnable() {
+                mSearchContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
+                        .withEndAction(new Runnable() {
                     @Override
                     public void run() {
                         updateDisplayOptions(isSearchModeChanging);
