diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 8cc9085..616cf8e 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -68,8 +68,8 @@
 import com.android.settings.applications.ProcessStatsSummary;
 import com.android.settings.applications.ProcessStatsUi;
 import com.android.settings.applications.UsageAccessDetails;
-import com.android.settings.applications.WriteSettingsDetails;
 import com.android.settings.applications.VrListenerSettings;
+import com.android.settings.applications.WriteSettingsDetails;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.dashboard.DashboardContainerFragment;
 import com.android.settings.dashboard.SearchResultsSummary;
@@ -109,7 +109,6 @@
 import com.android.settings.notification.ZenModeScheduleRuleSettings;
 import com.android.settings.notification.ZenModeSettings;
 import com.android.settings.notification.ZenModeVisualInterruptionSettings;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.print.PrintJobSettingsFragment;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.qstile.DevelopmentTiles;
@@ -695,6 +694,13 @@
                 + " ms");
     }
 
+    public void setDisplaySearchMenu(boolean displaySearch) {
+        if (displaySearch != mDisplaySearch) {
+            mDisplaySearch = displaySearch;
+            invalidateOptionsMenu();
+        }
+    }
+
     private void setTitleFromIntent(Intent intent) {
         final int initialTitleResId = intent.getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
         if (initialTitleResId > 0) {
diff --git a/src/com/android/settings/dashboard/DashboardContainerFragment.java b/src/com/android/settings/dashboard/DashboardContainerFragment.java
index b33063d..51c6694 100644
--- a/src/com/android/settings/dashboard/DashboardContainerFragment.java
+++ b/src/com/android/settings/dashboard/DashboardContainerFragment.java
@@ -31,6 +31,7 @@
 import com.android.internal.logging.MetricsProto;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
+import com.android.settings.SettingsActivity;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.overlay.SupportFeatureProvider;
 import com.android.settings.widget.SlidingTabLayout;
@@ -62,11 +63,10 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
         final View content = inflater.inflate(R.layout.dashboard_container, parent, false);
-        final Context context = getContext();
         mViewPager = (ViewPager) content.findViewById(R.id.pager);
-        mPagerAdapter = new DashboardViewPagerAdapter(context, getChildFragmentManager());
+        mPagerAdapter = new DashboardViewPagerAdapter(getContext(), getChildFragmentManager());
         mViewPager.setAdapter(mPagerAdapter);
-        mViewPager.addOnPageChangeListener(new TabInstrumentationListener(context));
+        mViewPager.addOnPageChangeListener(new TabChangeListener((SettingsActivity) getActivity()));
         mHeaderView = inflater.inflate(R.layout.dashboard_container_header, parent, false);
         ((SlidingTabLayout) mHeaderView).setViewPager(mViewPager);
         return content;
@@ -127,13 +127,13 @@
         }
     }
 
-    private static final class TabInstrumentationListener
+    private static final class TabChangeListener
             implements ViewPager.OnPageChangeListener {
 
-        private final Context mContext;
+        private final SettingsActivity mActivity;
 
-        public TabInstrumentationListener(Context context) {
-            mContext = context;
+        public TabChangeListener(SettingsActivity activity) {
+            mActivity = activity;
         }
 
         @Override
@@ -150,11 +150,14 @@
         public void onPageSelected(int position) {
             switch (position) {
                 case INDEX_SUMMARY_FRAGMENT:
-                    MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_SELECT_SUMMARY);
+                    MetricsLogger.action(
+                            mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUMMARY);
+                    mActivity.setDisplaySearchMenu(true);
                     break;
                 case INDEX_SUPPORT_FRAGMENT:
                     MetricsLogger.action(
-                            mContext, MetricsProto.MetricsEvent.ACTION_SELECT_SUPPORT_FRAGMENT);
+                            mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUPPORT_FRAGMENT);
+                    mActivity.setDisplaySearchMenu(false);
                     break;
             }
         }
