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.