From ffd31975102006676750039bb8aa88827544d017 Mon Sep 17 00:00:00 2001 From: Amin Shaikh Date: Mon, 27 Mar 2017 10:24:49 -0700 Subject: [PATCH] Fix forget button on wifi details page. - Corrected logic for forgetting the current network in the network details page - After a user has forgotten a network, the button becomes disabled (TODO final UX on this - go/remaining-wifi-picker-work tracks this) - Added unit tests for forgetting network flow - Fixed bug where the current tethering WifiConfiguration was associated with the currrent network Bug: 36458941 Test: m RunSettingsRoboTests Change-Id: Ie3c4bae8b295908b17179e60359c8bc599519744 --- .../WifiDetailPreferenceController.java | 14 +++++++- .../details/WifiNetworkDetailsFragment.java | 13 ++----- .../WifiDetailPreferenceControllerTest.java | 34 ++++++++++++++++--- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 1ed25f2b364..d0e21e9269a 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -149,7 +149,6 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @Override public void onResume() { mWifiInfo = mWifiManager.getConnectionInfo(); - mWifiConfig = mWifiManager.getWifiApConfiguration(); refreshFromWifiInfo(); setIpText(); @@ -257,4 +256,17 @@ public class WifiDetailPreferenceController extends PreferenceController impleme } mDnsPref.setDetailText(builder.toString()); } + + /** + * Forgets the wifi network associated with this preference. + */ + public void forgetNetwork() { + if (mWifiConfig.ephemeral) { + mWifiManager.disableEphemeralNetwork(mWifiConfig.SSID); + } else if (mWifiConfig.isPasspoint()) { + mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN); + } else { + mWifiManager.forget(mWifiConfig.networkId, null /* action listener */); + } + } } diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java index 007320250d6..ade9d6a7b3a 100644 --- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java @@ -19,6 +19,7 @@ import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; +import android.view.View; import android.widget.Button; import com.android.internal.logging.nano.MetricsProto; @@ -69,17 +70,9 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { } private void forgetNetwork() { - WifiInfo info = mWifiDetailPreferenceController.getWifiInfo(); mMetricsFeatureProvider.action(getActivity(), MetricsProto.MetricsEvent.ACTION_WIFI_FORGET); - if (!info.isEphemeral()) { - // Network is active but has no network ID - must be ephemeral. - mWifiManager.disableEphemeralNetwork( - AccessPoint.convertToQuotedString(info.getSSID())); - } else if (mAccessPoint.getConfig().isPasspoint()) { - mWifiManager.removePasspointConfiguration(mAccessPoint.getConfig().FQDN); - } else { - mWifiManager.forget(info.getNetworkId(), null /* action listener */); - } + mWifiDetailPreferenceController.forgetNetwork(); + mForgetButton.setEnabled(false); } @Override diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index a7e12b3efef..88a63b37f3e 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -84,8 +84,6 @@ public class WifiDetailPreferenceControllerTest { MockitoAnnotations.initMocks(this); mLifecycle = new Lifecycle(); - mController = new WifiDetailPreferenceController( - mockAccessPoint, mContext, mLifecycle, mockWifiManager); when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig); when(mockAccessPoint.getLevel()).thenReturn(LEVEL); @@ -93,11 +91,13 @@ public class WifiDetailPreferenceControllerTest { when(mockAccessPoint.getRssi()).thenReturn(RSSI); when(mockAccessPoint.getSecurityString(false)).thenReturn(SECURITY); + mController = new WifiDetailPreferenceController( + mockAccessPoint, mContext, mLifecycle, mockWifiManager); + setupMockedPreferenceScreen(); - when (mockWifiInfo.getRssi()).thenReturn(RSSI); + when(mockWifiInfo.getRssi()).thenReturn(RSSI); when(mockWifiManager.getConnectionInfo()).thenReturn(mockWifiInfo); - when(mockWifiManager.getWifiApConfiguration()).thenReturn(mockWifiConfig); } private void setupMockedPreferenceScreen() { @@ -139,7 +139,6 @@ public class WifiDetailPreferenceControllerTest { mController.onResume(); verify(mockWifiManager).getConnectionInfo(); - verify(mockWifiManager).getWifiApConfiguration(); } @Test @@ -178,4 +177,29 @@ public class WifiDetailPreferenceControllerTest { verify(mockSignalStrengthPref).setDetailText(expectedStrength); } + + @Test + public void forgetNetwork_ephemeral() { + WifiConfiguration wifiConfiguration = new WifiConfiguration(); + wifiConfiguration.SSID = "ssid"; + // WifiConfiguration#isEphemeral will not be visible in robolectric until O is supported + wifiConfiguration.ephemeral = true; + when(mockAccessPoint.getConfig()).thenReturn(wifiConfiguration); + + mController = new WifiDetailPreferenceController( + mockAccessPoint, mContext, mLifecycle, mockWifiManager); + + mController.forgetNetwork(); + + verify(mockWifiManager).disableEphemeralNetwork(wifiConfiguration.SSID); + } + + @Test + public void forgetNetwork_saved() { + mockWifiConfig.networkId = 5; + + mController.forgetNetwork(); + + verify(mockWifiManager).forget(mockWifiConfig.networkId, null); + } }