diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 466fa01..ecae214 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -26,8 +26,6 @@
 import android.provider.SearchIndexableResource;
 import android.support.annotation.VisibleForTesting;
 import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
@@ -48,9 +46,6 @@
         MobilePlanPreferenceHost {
 
     private static final String TAG = "NetworkDashboardFrag";
-    private static final int MENU_NETWORK_RESET = Menu.FIRST;
-
-    private NetworkResetActionMenuController mNetworkResetController;
 
     @Override
     public int getMetricsCategory() {
@@ -70,7 +65,6 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        mNetworkResetController = new NetworkResetActionMenuController(context, MENU_NETWORK_RESET);
 
         use(AirplaneModePreferenceController.class).setFragment(this);
     }
@@ -81,12 +75,6 @@
     }
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        super.onCreateOptionsMenu(menu, inflater);
-        mNetworkResetController.buildMenuItem(menu);
-    }
-
-    @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(), mMetricsFeatureProvider, this
                 /* fragment */,
diff --git a/src/com/android/settings/network/NetworkResetActionMenuController.java b/src/com/android/settings/network/NetworkResetActionMenuController.java
deleted file mode 100644
index 08d6d63..0000000
--- a/src/com/android/settings/network/NetworkResetActionMenuController.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2017 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.settings.network;
-
-import android.content.Context;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.ResetNetwork;
-import com.android.settings.core.SubSettingLauncher;
-
-public class NetworkResetActionMenuController {
-
-    private final Context mContext;
-    private final NetworkResetRestrictionChecker mRestrictionChecker;
-    private final int mMenuId;
-
-    public NetworkResetActionMenuController(Context context, int menuId) {
-        mContext = context;
-        mRestrictionChecker = new NetworkResetRestrictionChecker(context);
-        mMenuId = menuId;
-    }
-
-    public void buildMenuItem(Menu menu) {
-        MenuItem item = null;
-        if (isAvailable() && menu != null) {
-            item = menu.add(0, mMenuId, 0, R.string.reset_network_title);
-        }
-        if (item != null) {
-            item.setOnMenuItemClickListener(target -> {
-                new SubSettingLauncher(mContext)
-                        .setDestination(ResetNetwork.class.getName())
-                        .setSourceMetricsCategory(MetricsEvent.SETTINGS_NETWORK_CATEGORY)
-                        .setTitle(R.string.reset_network_title)
-                        .launch();
-                return true;
-            });
-        }
-    }
-
-
-    boolean isAvailable() {
-        return !mRestrictionChecker.hasRestriction();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
index 51722e5..06e334a 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
@@ -73,17 +73,6 @@
     }
 
     @Test
-    public void testPrepareActionBar_networkResetShouldBeCreated() {
-        final NetworkResetActionMenuController resetController =
-                mock(NetworkResetActionMenuController.class);
-        ReflectionHelpers.setField(mFragment, "mNetworkResetController", resetController);
-
-        mFragment.onCreateOptionsMenu(null, null);
-
-        verify(resetController).buildMenuItem(nullable(Menu.class));
-    }
-
-    @Test
     public void testSummaryProvider_hasMobileAndHotspot_shouldReturnMobileSummary() {
         final MobileNetworkPreferenceController mobileNetworkPreferenceController =
                 mock(MobileNetworkPreferenceController.class);
diff --git a/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java b/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java
deleted file mode 100644
index 3135c91..0000000
--- a/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2017 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.settings.network;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.util.ReflectionHelpers;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-public class NetworkResetActionMenuControllerTest {
-
-    private static final int MENU_ID = Menu.FIRST;
-
-    private NetworkResetActionMenuController mController;
-    @Mock
-    private Menu mMenu;
-    @Mock
-    private MenuItem mMenuItem;
-    @Mock
-    private NetworkResetRestrictionChecker mRestrictionChecker;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mController = new NetworkResetActionMenuController(RuntimeEnvironment.application, MENU_ID);
-        ReflectionHelpers.setField(mController, "mRestrictionChecker", mRestrictionChecker);
-        when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem);
-    }
-
-    @Test
-    public void buildMenuItem_available_shouldAddToMenu() {
-        when(mRestrictionChecker.hasRestriction()).thenReturn(false);
-        mController.buildMenuItem(mMenu);
-
-        verify(mMenu).add(anyInt(), anyInt(), anyInt(), anyInt());
-        verify(mMenuItem).setOnMenuItemClickListener(any(MenuItem.OnMenuItemClickListener.class));
-    }
-
-    @Test
-    public void buildMenuItem_notAvailable_shouldNotAddToMenu() {
-        when(mRestrictionChecker.hasRestriction()).thenReturn(true);
-
-        mController.buildMenuItem(mMenu);
-
-        verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), anyInt());
-    }
-}
