diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 5fc58dc67f334..259446a39602e 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -243,6 +243,12 @@ Wifi signal full. + + Open network + + + Secure network + Android OS diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java index 92995a8e850dc..2c4f9c4321946 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java @@ -25,6 +25,7 @@ import android.net.NetworkBadging; import android.net.wifi.WifiConfiguration; import android.os.Looper; import android.os.UserHandle; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.text.TextUtils; @@ -47,7 +48,17 @@ public class AccessPointPreference extends Preference { R.attr.state_metered }; - private static final int[] wifi_friction_attributes = { R.attr.wifi_friction }; + private static final int[] FRICTION_ATTRS = { + R.attr.wifi_friction + }; + + private static final int[] WIFI_CONNECTION_STRENGTH = { + R.string.accessibility_no_wifi, + R.string.accessibility_wifi_one_bar, + R.string.accessibility_wifi_two_bars, + R.string.accessibility_wifi_three_bars, + R.string.accessibility_wifi_signal_full + }; private final StateListDrawable mFrictionSld; private final int mBadgePadding; @@ -62,14 +73,6 @@ public class AccessPointPreference extends Preference { private int mDefaultIconResId; private int mWifiSpeed = NetworkBadging.BADGING_NONE; - static final int[] WIFI_CONNECTION_STRENGTH = { - R.string.accessibility_no_wifi, - R.string.accessibility_wifi_one_bar, - R.string.accessibility_wifi_two_bars, - R.string.accessibility_wifi_three_bars, - R.string.accessibility_wifi_signal_full - }; - public static String generatePreferenceKey(AccessPoint accessPoint) { StringBuilder builder = new StringBuilder(); @@ -103,7 +106,7 @@ public class AccessPointPreference extends Preference { TypedArray frictionSld; try { - frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes); + frictionSld = context.getTheme().obtainStyledAttributes(FRICTION_ATTRS); } catch (Resources.NotFoundException e) { // Fallback for platforms that do not need friction icon resources. frictionSld = null; @@ -129,7 +132,7 @@ public class AccessPointPreference extends Preference { TypedArray frictionSld; try { - frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes); + frictionSld = context.getTheme().obtainStyledAttributes(FRICTION_ATTRS); } catch (Resources.NotFoundException e) { // Fallback for platforms that do not need friction icon resources. frictionSld = null; @@ -249,14 +252,7 @@ public class AccessPointPreference extends Preference { setSummary(mForSavedNetworks ? mAccessPoint.getSavedNetworkSummary() : mAccessPoint.getSettingsSummary()); - mContentDescription = getTitle(); - if (getSummary() != null) { - mContentDescription = TextUtils.concat(mContentDescription, ",", getSummary()); - } - if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) { - mContentDescription = TextUtils.concat(mContentDescription, ",", - getContext().getString(WIFI_CONNECTION_STRENGTH[level])); - } + mContentDescription = buildContentDescription(getContext(), this /* pref */, mAccessPoint); } @Override @@ -269,6 +265,27 @@ public class AccessPointPreference extends Preference { } } + /** + * Helper method to generate content description string. + */ + @VisibleForTesting + static CharSequence buildContentDescription(Context context, Preference pref, AccessPoint ap) { + CharSequence contentDescription = pref.getTitle(); + final CharSequence summary = pref.getSummary(); + if (!TextUtils.isEmpty(summary)) { + contentDescription = TextUtils.concat(contentDescription, ",", summary); + } + int level = ap.getLevel(); + if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) { + contentDescription = TextUtils.concat(contentDescription, ",", + context.getString(WIFI_CONNECTION_STRENGTH[level])); + } + return TextUtils.concat(contentDescription, ",", + ap.getSecurity() == AccessPoint.SECURITY_NONE + ? context.getString(R.string.accessibility_wifi_security_type_none) + : context.getString(R.string.accessibility_wifi_security_type_secured)); + } + public void onLevelChanged() { postNotifyChanged(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java index fd3b1dc635dd2..482b788113b94 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java @@ -20,6 +20,9 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.manifest.AndroidManifest; import org.robolectric.res.Fs; +import org.robolectric.res.ResourcePath; + +import java.util.List; public class SettingLibRobolectricTestRunner extends RobolectricTestRunner { @@ -36,10 +39,31 @@ public class SettingLibRobolectricTestRunner extends RobolectricTestRunner { final String assetsDir = appRoot + config.assetDir(); final AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestPath), - Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir)); - + Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir)) { + @Override + public List getIncludedResourcePaths() { + List paths = super.getIncludedResourcePaths(); + SettingLibRobolectricTestRunner.getIncludedResourcePaths(getPackageName(), paths); + return paths; + } + }; manifest.setPackageName("com.android.settingslib"); return manifest; } + static void getIncludedResourcePaths(String packageName, List paths) { + paths.add(new ResourcePath( + packageName, + Fs.fileFromPath("./frameworks/base/packages/SettingsLib/res"), + null)); + paths.add(new ResourcePath( + packageName, + Fs.fileFromPath("./frameworks/base/core/res/res"), + null)); + paths.add(new ResourcePath( + packageName, + Fs.fileFromPath("./frameworks/support/v7/appcompat/res"), + null)); + } + } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java index 335653bc2f186..7fe69a73cb996 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java @@ -16,6 +16,8 @@ package com.android.settingslib.wifi; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import android.content.Context; @@ -58,4 +60,22 @@ public class AccessPointPreferenceTest { assertThat(AccessPointPreference.generatePreferenceKey(builder.build())) .isEqualTo(expectedKey); } + + @Test + public void refresh_openNetwork_updateContentDescription() { + final String ssid = "ssid"; + final String summary = "connected"; + final int security = AccessPoint.SECURITY_WEP; + final AccessPoint ap = new TestAccessPointBuilder(mContext) + .setSsid(ssid) + .setSecurity(security) + .build(); + final AccessPointPreference pref = mock(AccessPointPreference.class); + when(pref.getTitle()).thenReturn(ssid); + when(pref.getSummary()).thenReturn(summary); + + assertThat(AccessPointPreference.buildContentDescription( + RuntimeEnvironment.application, pref, ap)) + .isEqualTo("ssid,connected,Wifi signal full.,Secure network"); + } }