Use WpsConfiguration for new API

Change-Id: I4c1544178bcb29e751db56edb781faf9145cdf86
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index d1c89dd..1a882d4 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -30,6 +30,9 @@
 import android.net.wifi.WifiConfiguration.IpAssignment;
 import android.net.wifi.WifiConfiguration.AuthAlgorithm;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WpsConfiguration;
+import android.net.wifi.WpsConfiguration.Setup;
+
 import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID;
 import android.net.wifi.WifiConfiguration.ProxySettings;
 import android.net.wifi.WifiInfo;
@@ -114,6 +117,10 @@
     private TextView mProxyPortView;
     private TextView mProxyExclusionListView;
 
+    private IpAssignment mIpAssignment;
+    private ProxySettings mProxySettings;
+    private LinkProperties mLinkProperties = new LinkProperties();
+
     static boolean requireKeyStore(WifiConfiguration config) {
         if (config == null) {
             return false;
@@ -331,28 +338,37 @@
                     return null;
         }
 
-        config.ipAssignment = (mIpSettingsSpinner != null &&
+        validateAndFetchIpAndProxyFields();
+
+        config.proxySettings = mProxySettings;
+        config.ipAssignment = mIpAssignment;
+        config.linkProperties = new LinkProperties(mLinkProperties);
+
+        return config;
+    }
+
+    private void validateAndFetchIpAndProxyFields() {
+        mLinkProperties.clear();
+        mIpAssignment = (mIpSettingsSpinner != null &&
                 mIpSettingsSpinner.getSelectedItemPosition() == STATIC_IP) ?
                 IpAssignment.STATIC : IpAssignment.DHCP;
 
-        if (config.ipAssignment == IpAssignment.STATIC) {
+        if (mIpAssignment == IpAssignment.STATIC) {
             //TODO: A better way to do this is to not dismiss the
             //dialog as long as one of the fields is invalid
-            LinkProperties linkProperties = new LinkProperties();
-            int result = validateIpConfigFields(linkProperties);
-            if (result == 0) {
-                config.linkProperties = linkProperties;
-            } else {
+            int result = validateIpConfigFields(mLinkProperties);
+            if (result != 0) {
+                mLinkProperties.clear();
                 Toast.makeText(mConfigUi.getContext(), result, Toast.LENGTH_LONG).show();
-                config.ipAssignment = IpAssignment.UNASSIGNED;
+                mIpAssignment = IpAssignment.UNASSIGNED;
             }
         }
 
-        config.proxySettings = (mProxySettingsSpinner != null &&
+        mProxySettings = (mProxySettingsSpinner != null &&
                 mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) ?
                 ProxySettings.STATIC : ProxySettings.NONE;
 
-        if (config.proxySettings == ProxySettings.STATIC) {
+        if (mProxySettings == ProxySettings.STATIC) {
             String host = mProxyHostView.getText().toString();
             String portStr = mProxyPortView.getText().toString();
             String exclusionList = mProxyExclusionListView.getText().toString();
@@ -366,14 +382,12 @@
             }
             if (result == 0) {
                 ProxyProperties proxyProperties= new ProxyProperties(host, port, exclusionList);
-                config.linkProperties.setHttpProxy(proxyProperties);
+                mLinkProperties.setHttpProxy(proxyProperties);
             } else {
                 Toast.makeText(mConfigUi.getContext(), result, Toast.LENGTH_LONG).show();
-                config.proxySettings = ProxySettings.UNASSIGNED;
+                mProxySettings = ProxySettings.UNASSIGNED;
             }
         }
-
-        return config;
     }
 
     private int validateIpConfigFields(LinkProperties linkProperties) {
@@ -428,13 +442,32 @@
         return MANUAL;
     }
 
-    int getWpsPin() {
-        try {
-            String wpsPin = ((TextView) mView.findViewById(R.id.wps_pin)).getText().toString();
-            return Integer.parseInt(wpsPin);
-        } catch (NumberFormatException e) {
-            return -1;
+    WpsConfiguration getWpsConfig() {
+        WpsConfiguration config = new WpsConfiguration();
+        switch (mNetworkSetupSpinner.getSelectedItemPosition()) {
+            case WPS_PBC:
+                config.setup = Setup.PBC;
+                break;
+            case WPS_PIN_FROM_ACCESS_POINT:
+                config.setup = Setup.PIN_FROM_ACCESS_POINT;
+                break;
+            case WPS_PIN_FROM_DEVICE:
+                config.setup = Setup.PIN_FROM_DEVICE;
+                break;
+            default:
+                config.setup = Setup.INVALID;
+                Log.e(TAG, "WPS not selected type");
+                return config;
         }
+        config.pin = ((TextView) mView.findViewById(R.id.wps_pin)).getText().toString();
+        config.BSSID = (mAccessPoint != null) ? mAccessPoint.bssid : null;
+
+        validateAndFetchIpAndProxyFields();
+
+        config.proxySettings = mProxySettings;
+        config.ipAssignment = mIpAssignment;
+        config.linkProperties = new LinkProperties(mLinkProperties);
+        return config;
     }
 
     private void showSecurityFields() {
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 52d053f..3a1f767 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -559,14 +559,11 @@
     /* package */ void submit(WifiConfigController configController) {
         switch(configController.chosenNetworkSetupMethod()) {
             case WifiConfigController.WPS_PBC:
-                mWifiManager.startWpsPbc(mSelectedAccessPoint.bssid);
-                break;
             case WifiConfigController.WPS_PIN_FROM_ACCESS_POINT:
-                int apPin = configController.getWpsPin();
-                mWifiManager.startWpsWithPinFromAccessPoint(mSelectedAccessPoint.bssid, apPin);
+                mWifiManager.startWps(configController.getWpsConfig());
                 break;
             case WifiConfigController.WPS_PIN_FROM_DEVICE:
-                int pin = mWifiManager.startWpsWithPinFromDevice(mSelectedAccessPoint.bssid);
+                String pin = mWifiManager.startWps(configController.getWpsConfig());
                 new AlertDialog.Builder(getActivity())
                         .setTitle(R.string.wifi_wps_pin_method_configuration)
                         .setMessage(getResources().getString(R.string.wifi_wps_pin_output, pin))