diff --git a/res/values/strings.xml b/res/values/strings.xml
index 060ff54c786..0a6c309f69a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3151,6 +3151,8 @@
Wireless display certification
+
+ Enable WiFi Verbose Logging
Show options for wireless display certification
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index ef929b26738..1d7d9677f41 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -105,6 +105,11 @@
android:key="wifi_display_certification"
android:title="@string/wifi_display_certification"
android:summary="@string/wifi_display_certification_summary"/>
+
+
+
0;
+ updateCheckBox(mWifiVerboseLogging, enabled);
+ }
+
+ private void writeWifiVerboseLoggingOptions() {
+ mWifiManager.enableVerboseLogging(mWifiVerboseLogging.isChecked() ? 1 : 0);
+ }
+
private void updateLowPowerModeOptions() {
updateCheckBox(mLowPowerMode, Settings.Global.getInt(getActivity().getContentResolver(),
Settings.Global.LOW_POWER_MODE, 0) != 0);
@@ -1339,6 +1356,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
writeForceRtlOptions();
} else if (preference == mWifiDisplayCertification) {
writeWifiDisplayCertificationOptions();
+ } else if (preference == mWifiVerboseLogging) {
+ writeWifiVerboseLoggingOptions();
} else if (preference == mUseNuplayer) {
writeUseNuplayerOptions();
} else {
diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java
index 81706c909f8..688fc6396c1 100644
--- a/src/com/android/settings/wifi/AccessPoint.java
+++ b/src/com/android/settings/wifi/AccessPoint.java
@@ -69,6 +69,8 @@ class AccessPoint extends Preference {
/* package */ScanResult mScanResult;
private int mRssi = Integer.MAX_VALUE;
+ private long mSeen = 0;
+
private WifiInfo mInfo;
private DetailedState mState;
@@ -262,6 +264,9 @@ class AccessPoint extends Preference {
}
boolean update(ScanResult result) {
+ if (result.seen > mSeen) {
+ mSeen = result.seen;
+ }
if (ssid.equals(result.SSID) && security == getSecurity(result)) {
if (WifiManager.compareSignalLevel(result.level, mRssi) > 0) {
int oldLevel = getLevel();
@@ -333,29 +338,57 @@ class AccessPoint extends Preference {
return "\"" + string + "\"";
}
+ /** visibility status of the WifiConfiguration
+ * @return RSSI and update indicator
+ * TODO: indicate both 2.4 and 5GHz RSSI as well as number of results
+ * ["rssi 5Ghz", "num results on 5GHz" / "rssi 5Ghz", "num results on 5GHz"]
+ * For instance [-40,5/-30,2]
+ */
+ private String getVisibilityStatus() {
+ String visibility ;
+ long now = System.currentTimeMillis();
+ long age = (now - mSeen);
+ if (age < 1000000) {
+ //show age in seconds, in the form xx
+ visibility = Long.toString((age / 1000) % 1000);
+ } else {
+ //not seen for more than 1000 seconds
+ visibility = "!";
+ }
+ if (mRssi != Integer.MAX_VALUE) {
+ visibility = visibility + ", " + Integer.toString(mRssi);
+ }
+ return visibility;
+ }
+
/** Updates the title and summary; may indirectly call notifyChanged() */
private void refresh() {
setTitle(ssid);
+ StringBuilder summary = new StringBuilder();
Context context = getContext();
- if (mConfig != null && mConfig.status == WifiConfiguration.Status.DISABLED) {
- switch (mConfig.disableReason) {
- case WifiConfiguration.DISABLED_AUTH_FAILURE:
- setSummary(context.getString(R.string.wifi_disabled_password_failure));
- break;
- case WifiConfiguration.DISABLED_DHCP_FAILURE:
- case WifiConfiguration.DISABLED_DNS_FAILURE:
- setSummary(context.getString(R.string.wifi_disabled_network_failure));
- break;
- case WifiConfiguration.DISABLED_UNKNOWN_REASON:
- setSummary(context.getString(R.string.wifi_disabled_generic));
+ if (mConfig != null && (mConfig.status == WifiConfiguration.Status.DISABLED
+ || mConfig.autoJoinStatus != WifiConfiguration.AUTO_JOIN_ENABLED)) {
+ if (mConfig.autoJoinStatus != WifiConfiguration.AUTO_JOIN_ENABLED) {
+ summary.append(context.getString(R.string.wifi_disabled_password_failure));
+ } else {
+ switch (mConfig.disableReason) {
+ case WifiConfiguration.DISABLED_AUTH_FAILURE:
+ summary.append(context.getString(R.string.wifi_disabled_password_failure));
+ break;
+ case WifiConfiguration.DISABLED_DHCP_FAILURE:
+ case WifiConfiguration.DISABLED_DNS_FAILURE:
+ summary.append(context.getString(R.string.wifi_disabled_network_failure));
+ break;
+ case WifiConfiguration.DISABLED_UNKNOWN_REASON:
+ summary.append(context.getString(R.string.wifi_disabled_generic));
+ }
}
} else if (mRssi == Integer.MAX_VALUE) { // Wifi out of range
- setSummary(context.getString(R.string.wifi_not_in_range));
+ summary.append(context.getString(R.string.wifi_not_in_range));
} else if (mState != null) { // This is the active connection
- setSummary(Summary.get(context, mState));
+ summary.append(Summary.get(context, mState));
} else { // In range, not disabled.
- StringBuilder summary = new StringBuilder();
if (mConfig != null) { // Is saved network
summary.append(context.getString(R.string.wifi_remembered));
}
@@ -377,8 +410,13 @@ class AccessPoint extends Preference {
summary.append(context.getString(R.string.wifi_wps_available_second_item));
}
}
- setSummary(summary.toString());
}
+ if (WifiSettings.mVerboseLogging > 0) {
+ //add RSSI/band information for this config, what was seen up to 6 seconds ago
+ //verbose WiFi Logging is only turned on thru developers settings
+ summary.append(" " + getVisibilityStatus());
+ }
+ setSummary(summary.toString());
}
/**
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 00a5b900be0..604275ad442 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -712,6 +712,8 @@ public class WifiSettings extends RestrictedSettingsFragment
return super.onCreateDialog(dialogId);
}
+ /** verbose logging flag is set only thru developer debugging options */
+ public static int mVerboseLogging = 0;
/**
* Shows the latest access points available with supplimental information like
* the strength of network and the security for it.
@@ -726,6 +728,9 @@ public class WifiSettings extends RestrictedSettingsFragment
}
final int wifiState = mWifiManager.getWifiState();
+ //check if verbose logging has been turned on or off
+ mVerboseLogging = mWifiManager.getVerboseLoggingLevel();
+
switch (wifiState) {
case WifiManager.WIFI_STATE_ENABLED:
// AccessPoints are automatically sorted with TreeSet.