diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java index b154a9be07d..104761f7c88 100644 --- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java +++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java @@ -75,7 +75,8 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements // Interval between initiating SavedNetworkTracker scans private static final long SCAN_INTERVAL_MILLIS = 10_000; - private NetworkDetailsTracker mNetworkDetailsTracker; + @VisibleForTesting + NetworkDetailsTracker mNetworkDetailsTracker; private HandlerThread mWorkerThread; private WifiDetailPreferenceController2 mWifiDetailPreferenceController2; private List mWifiDialogListeners = new ArrayList<>(); @@ -125,9 +126,11 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify); - item.setIcon(com.android.internal.R.drawable.ic_mode_edit); - item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + if (isEditable()) { + MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify); + item.setIcon(com.android.internal.R.drawable.ic_mode_edit); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + } super.onCreateOptionsMenu(menu, inflater); } @@ -252,6 +255,17 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements getArguments().getString(KEY_CHOSEN_WIFIENTRY_KEY)); } + private boolean isEditable() { + if (mNetworkDetailsTracker == null) { + return false; + } + final WifiEntry wifiEntry = mNetworkDetailsTracker.getWifiEntry(); + if (wifiEntry == null) { + return false; + } + return wifiEntry.isSaved(); + } + /** * API call for refreshing the preferences in this fragment. */ diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java index e0fb578b8ea..66b5bcb9bcc 100644 --- a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java +++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java @@ -24,9 +24,9 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.view.Menu; @@ -36,12 +36,17 @@ import android.view.MenuItem; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.wifitrackerlib.NetworkDetailsTracker; +import com.android.wifitrackerlib.WifiEntry; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -52,11 +57,22 @@ public class WifiNetworkDetailsFragment2Test { final String TEST_PREFERENCE_KEY = "TEST_PREFERENCE_KEY"; + @Mock + WifiEntry mWifiEntry; + @Mock + NetworkDetailsTracker mNetworkDetailsTracker; + @Mock + Menu mMenu; private WifiNetworkDetailsFragment2 mFragment; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + doReturn(mWifiEntry).when(mNetworkDetailsTracker).getWifiEntry(); + doReturn(true).when(mWifiEntry).isSaved(); + mFragment = new WifiNetworkDetailsFragment2(); + mFragment.mNetworkDetailsTracker = mNetworkDetailsTracker; } @Test @@ -77,15 +93,23 @@ public class WifiNetworkDetailsFragment2Test { @Test public void onCreateOptionsMenu_shouldSetCorrectIcon() { - final Menu menu = mock(Menu.class); final MenuItem menuItem = mock(MenuItem.class); - doReturn(menuItem).when(menu).add(anyInt(), eq(Menu.FIRST), anyInt(), anyInt()); + doReturn(menuItem).when(mMenu).add(anyInt(), eq(Menu.FIRST), anyInt(), anyInt()); - mFragment.onCreateOptionsMenu(menu, mock(MenuInflater.class)); + mFragment.onCreateOptionsMenu(mMenu, mock(MenuInflater.class)); verify(menuItem).setIcon(com.android.internal.R.drawable.ic_mode_edit); } + @Test + public void onCreateOptionsMenu_isNotSavedNetwork_shouldNotAddEditMenu() { + doReturn(false).when(mWifiEntry).isSaved(); + + mFragment.onCreateOptionsMenu(mMenu, mock(MenuInflater.class)); + + verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), eq(R.string.wifi_modify)); + } + @Test public void refreshPreferences_controllerShouldUpdateStateAndDisplayPreference() { final FakeFragment fragment = spy(new FakeFragment());