diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 439fff3bbe114..e38dc9e76384b 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -97,6 +97,9 @@
Connected, no Internet
+
+ Access point temporarily full
+
Very Slow
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index e0a88e4cf206c..3d5433eda6238 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -721,7 +721,17 @@ public class AccessPoint implements Comparable {
summary.append(mContext.getString(R.string.wifi_not_in_range));
} else { // In range, not disabled.
if (config != null) { // Is saved network
- summary.append(mContext.getString(R.string.wifi_remembered));
+ // Last attempt to connect to this failed. Show reason why
+ switch (config.recentFailure.getAssociationStatus()) {
+ case WifiConfiguration.RecentFailure.STATUS_AP_UNABLE_TO_HANDLE_NEW_STA:
+ summary.append(mContext.getString(
+ R.string.wifi_ap_unable_to_handle_new_sta));
+ break;
+ default:
+ // "Saved"
+ summary.append(mContext.getString(R.string.wifi_remembered));
+ break;
+ }
}
}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 13d54abdd0050..a145327807a7d 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -418,12 +418,6 @@ public class WifiConfiguration implements Parcelable {
*/
public String defaultGwMacAddress;
- /**
- * @hide
- * last failure
- */
- public String lastFailure;
-
/**
* @hide
* last time we connected, this configuration had validated internet access
@@ -1415,6 +1409,53 @@ public class WifiConfiguration implements Parcelable {
*/
private NetworkSelectionStatus mNetworkSelectionStatus = new NetworkSelectionStatus();
+ /**
+ * @hide
+ * This class is intended to store extra failure reason information for the most recent
+ * connection attempt, so that it may be surfaced to the settings UI
+ */
+ public static class RecentFailure {
+
+ /**
+ * No recent failure, or no specific reason given for the recent connection failure
+ */
+ public static final int NONE = 0;
+ /**
+ * Connection to this network recently failed due to Association Rejection Status 17
+ * (AP is full)
+ */
+ public static final int STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17;
+ /**
+ * Association Rejection Status code (NONE for success/non-association-rejection-fail)
+ */
+ private int mAssociationStatus = NONE;
+
+ /**
+ * @param status the association status code for the recent failure
+ */
+ public void setAssociationStatus(int status) {
+ mAssociationStatus = status;
+ }
+ /**
+ * Sets the RecentFailure to NONE
+ */
+ public void clear() {
+ mAssociationStatus = NONE;
+ }
+ /**
+ * Get the recent failure code
+ */
+ public int getAssociationStatus() {
+ return mAssociationStatus;
+ }
+ }
+
+ /**
+ * @hide
+ * RecentFailure member
+ */
+ final public RecentFailure recentFailure = new RecentFailure();
+
/**
* @hide
* @return network selection status
@@ -1705,7 +1746,8 @@ public class WifiConfiguration implements Parcelable {
sbuf.append('\n');
}
}
-
+ sbuf.append("recentFailure: ").append("Association Rejection code: ")
+ .append(recentFailure.getAssociationStatus()).append("\n");
return sbuf.toString();
}
@@ -2029,7 +2071,6 @@ public class WifiConfiguration implements Parcelable {
visibility = new Visibility(source.visibility);
}
- lastFailure = source.lastFailure;
didSelfAdd = source.didSelfAdd;
lastConnectUid = source.lastConnectUid;
lastUpdateUid = source.lastUpdateUid;
@@ -2053,6 +2094,7 @@ public class WifiConfiguration implements Parcelable {
creationTime = source.creationTime;
updateTime = source.updateTime;
shared = source.shared;
+ recentFailure.setAssociationStatus(source.recentFailure.getAssociationStatus());
}
}
@@ -2119,6 +2161,7 @@ public class WifiConfiguration implements Parcelable {
dest.writeInt(noInternetAccessExpected ? 1 : 0);
dest.writeInt(shared ? 1 : 0);
dest.writeString(mPasspointManagementObjectTree);
+ dest.writeInt(recentFailure.getAssociationStatus());
}
/** Implement the Parcelable interface {@hide} */
@@ -2186,6 +2229,7 @@ public class WifiConfiguration implements Parcelable {
config.noInternetAccessExpected = in.readInt() != 0;
config.shared = in.readInt() != 0;
config.mPasspointManagementObjectTree = in.readString();
+ config.recentFailure.setAssociationStatus(in.readInt());
return config;
}