From c03bd8f86f6d52712bc3c6f610d9f6a476a3a5eb Mon Sep 17 00:00:00 2001 From: Eric Schwarzenbach Date: Wed, 20 Sep 2017 16:34:23 -0700 Subject: [PATCH] Fix "Add Network" button on SavedAccessPoints page. Fix merge conflict. The old onSubmit was a no-op. It now correctly pipes onSubmit to WifiManager#save() with the new WifiConfiguration. On successful save, it displays the new network in the list, and on failure, it displays a toast indicating that the save action failed. Adds a test for the WifiDialog behaviors on this page. Bug: 66177765 Test: make RunSettingsRoboTests, manual - tested with Wifi enabled and disabled, and with networks that were visible and not. Change-Id: I27446aa49bc9efaf1ea1d6c6158928b62ce01ba2 --- .../wifi/SavedAccessPointsWifiSettings.java | 20 +++++++++- .../settings/wrapper/WifiManagerWrapper.java | 10 ++++- .../SavedAccessPointsWifiSettingsTest.java | 40 ++++++++++++++----- 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java index d163616da59..9f52159796f 100644 --- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java +++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java @@ -17,6 +17,7 @@ package com.android.settings.wifi; import android.annotation.Nullable; +import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.icu.text.Collator; @@ -28,6 +29,7 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.util.Log; +import android.widget.Toast; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; @@ -88,6 +90,22 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment } }; + private final WifiManager.ActionListener mSaveListener = new WifiManager.ActionListener() { + @Override + public void onSuccess() { + postUpdatePreference(); + } + @Override + public void onFailure(int reason) { + Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, + R.string.wifi_failed_save_message, + Toast.LENGTH_SHORT).show(); + } + } + }; + private WifiDialog mDialog; private WifiManagerWrapper mWifiManager; private AccessPoint mDlgAccessPoint; @@ -267,7 +285,7 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment @Override public void onSubmit(WifiDialog dialog) { - // Ignored + mWifiManager.save(dialog.getController().getConfig(), mSaveListener); } @Override diff --git a/src/com/android/settings/wrapper/WifiManagerWrapper.java b/src/com/android/settings/wrapper/WifiManagerWrapper.java index 42026916150..c78899514ac 100644 --- a/src/com/android/settings/wrapper/WifiManagerWrapper.java +++ b/src/com/android/settings/wrapper/WifiManagerWrapper.java @@ -1,5 +1,6 @@ package com.android.settings.wrapper; +import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; /** @@ -37,9 +38,16 @@ public class WifiManagerWrapper { } /** - * {@link WifiManager#removePasspointConfiguration} + * {@link WifiManager#forget} */ public void forget(int netId, WifiManager.ActionListener listener) { mWifiManager.forget(netId, listener); } + + /** + * {@link WifiManager#save} + */ + public void save(WifiConfiguration config, WifiManager.ActionListener listener) { + mWifiManager.save(config, listener); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/SavedAccessPointsWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/SavedAccessPointsWifiSettingsTest.java index f9eb3281f78..ec406cd464c 100644 --- a/tests/robotests/src/com/android/settings/wifi/SavedAccessPointsWifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/SavedAccessPointsWifiSettingsTest.java @@ -16,31 +16,36 @@ package com.android.settings.wifi; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager.ActionListener; import android.os.Handler; - import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.wrapper.WifiManagerWrapper; import com.android.settingslib.wifi.AccessPoint; - 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.annotation.Config; import org.robolectric.util.ReflectionHelpers; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SavedAccessPointsWifiSettingsTest { - @Mock - private Handler mHandler; + @Mock private WifiManagerWrapper mockWifiManager; + @Mock private WifiDialog mockWifiDialog; + @Mock private WifiConfigController mockConfigController; + @Mock private WifiConfiguration mockWifiConfiguration; + @Mock private AccessPoint mockAccessPoint; + @Mock private Handler mHandler; private SavedAccessPointsWifiSettings mSettings; @@ -49,6 +54,10 @@ public class SavedAccessPointsWifiSettingsTest { MockitoAnnotations.initMocks(this); mSettings = new SavedAccessPointsWifiSettings(); ReflectionHelpers.setField(mSettings, "mHandler", mHandler); + ReflectionHelpers.setField(mSettings, "mWifiManager", mockWifiManager); + + when(mockWifiDialog.getController()).thenReturn(mockConfigController); + when(mockConfigController.getConfig()).thenReturn(mockWifiConfiguration); } @Test @@ -56,7 +65,6 @@ public class SavedAccessPointsWifiSettingsTest { final AccessPoint accessPoint = mock(AccessPoint.class); when(accessPoint.isPasspointConfig()).thenReturn(true); ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", accessPoint); - ReflectionHelpers.setField(mSettings, "mWifiManager", mock(WifiManagerWrapper.class)); mSettings.onForget(null); @@ -76,4 +84,18 @@ public class SavedAccessPointsWifiSettingsTest { verify(mHandler).sendEmptyMessage(mSettings.MSG_UPDATE_PREFERENCES); } + + @Test + public void onSubmit_shouldInvokeSaveApi() { + mSettings.onSubmit(mockWifiDialog); + verify(mockWifiManager).save(eq(mockWifiConfiguration), any(ActionListener.class)); + } + @Test + public void onForget_shouldInvokeForgetApi() { + ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", mockAccessPoint); + when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfiguration); + mSettings.onForget(mockWifiDialog); + verify(mockWifiManager).forget(eq(mockWifiConfiguration.networkId), any(ActionListener.class)); + } } +