Hide edit menu if network is uneditable
- Screenshot:
https://screenshot.googleplex.com/3BhZRBrmQXjeaGL
Bug: 161896161
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=WifiNetworkDetailsFragment2Test
Change-Id: I47ea2cf19e178eff48f23e56903d0daa4ef8fa28
diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
index b154a9b..104761f 100644
--- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -75,7 +75,8 @@
// 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<WifiDialog2.WifiDialog2Listener> mWifiDialogListeners = new ArrayList<>();
@@ -125,9 +126,11 @@
@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 @@
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 e0fb578..66b5bcb 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.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 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 @@
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,16 +93,24 @@
@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());
final PreferenceScreen screen = mock(PreferenceScreen.class);