diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index ee44401bd0e..8967ff24ddd 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -349,7 +349,9 @@
- WPS push button
- - WPS pin method
+ - WPS pin from access point
+
+ - WPS pin from this device
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 839d13c0d4c..5e46158c3c0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -916,6 +916,10 @@
Network Setup
Enter pin from access point
+
+ WPS pin method configuration
+
+ Enter the pin %1$s on the access point
Network SSID
@@ -956,6 +960,8 @@
Disabled
Not in range
+
+ WPS available
Secured with %1$s
diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java
index 054c6ff93ac..c932978abf7 100644
--- a/src/com/android/settings/wifi/AccessPoint.java
+++ b/src/com/android/settings/wifi/AccessPoint.java
@@ -119,7 +119,7 @@ class AccessPoint extends Preference {
ssid = result.SSID;
bssid = result.BSSID;
security = getSecurity(result);
- wpsAvailable = security != SECURITY_NONE && security != SECURITY_EAP &&
+ wpsAvailable = security != SECURITY_EAP &&
result.capabilities.contains("WPS");
networkId = -1;
mRssi = result.level;
@@ -222,7 +222,11 @@ class AccessPoint extends Preference {
}
if (security == SECURITY_NONE) {
- setSummary(status);
+ if (wpsAvailable && mConfig == null) {
+ setSummary(context.getString(R.string.wifi_open_with_wps));
+ } else {
+ setSummary(status);
+ }
} else {
String format;
if (wpsAvailable && mConfig == null) {
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 597c5a3a6dd..d1700a69a34 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -92,7 +92,8 @@ public class WifiConfigController implements TextWatcher,
/* These values come from "wifi_network_setup" resource array */
public static final int MANUAL = 0;
public static final int WPS_PBC = 1;
- public static final int WPS_PIN = 2;
+ public static final int WPS_PIN_FROM_ACCESS_POINT = 2;
+ public static final int WPS_PIN_FROM_DEVICE = 3;
/* These values come from "wifi_proxy_settings" resource array */
public static final int PROXY_NONE = 0;
@@ -491,14 +492,15 @@ public class WifiConfigController implements TextWatcher,
int pos = mNetworkSetupSpinner.getSelectedItemPosition();
/* Show pin text input if needed */
- if (pos == WPS_PIN) {
+ if (pos == WPS_PIN_FROM_ACCESS_POINT) {
mView.findViewById(R.id.wps_fields).setVisibility(View.VISIBLE);
} else {
mView.findViewById(R.id.wps_fields).setVisibility(View.GONE);
}
/* show/hide manual security fields appropriately */
- if ((pos == WPS_PIN) || (pos == WPS_PBC)) {
+ if ((pos == WPS_PIN_FROM_ACCESS_POINT) || (pos == WPS_PIN_FROM_DEVICE)
+ || (pos == WPS_PBC)) {
mView.findViewById(R.id.security_fields).setVisibility(View.GONE);
} else {
mView.findViewById(R.id.security_fields).setVisibility(View.VISIBLE);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 30c2a3d6431..d8d0a60a278 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -23,6 +23,7 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -642,9 +643,17 @@ public class WifiSettings extends SettingsPreferenceFragment
case WifiConfigController.WPS_PBC:
mWifiManager.startWpsPbc(mSelectedAccessPoint.bssid);
break;
- case WifiConfigController.WPS_PIN:
+ case WifiConfigController.WPS_PIN_FROM_ACCESS_POINT:
int apPin = configController.getWpsPin();
- mWifiManager.startWpsPin(mSelectedAccessPoint.bssid, apPin);
+ mWifiManager.startWpsWithPinFromAccessPoint(mSelectedAccessPoint.bssid, apPin);
+ break;
+ case WifiConfigController.WPS_PIN_FROM_DEVICE:
+ int pin = mWifiManager.startWpsWithPinFromDevice(mSelectedAccessPoint.bssid);
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.wifi_wps_pin_method_configuration)
+ .setMessage(getResources().getString(R.string.wifi_wps_pin_output, pin))
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
break;
case WifiConfigController.MANUAL:
final WifiConfiguration config = configController.getConfig();