Merge "Add Wifi's security type to contentDescription"

This commit is contained in:
TreeHugger Robot
2017-07-19 23:31:56 +00:00
committed by Android (Google) Code Review
4 changed files with 88 additions and 21 deletions

View File

@@ -243,6 +243,12 @@
<!-- Content description of the WIFI signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_signal_full">Wifi signal full.</string>
<!-- Content description of the Wi-Fi security type. This message indicates this is an open Wi-Fi (no password needed) [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_security_type_none">Open network</string>
<!-- Content description of the Wi-Fi security type. This message indicates this is a secured Wi-Fi (password needed) [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_security_type_secured">Secure network</string>
<!-- Label for kernel threads in battery usage -->
<string name="process_kernel_label">Android OS</string>
<!-- Title of data usage item that represents all uninstalled applications. [CHAR LIMIT=48] -->

View File

@@ -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();
}

View File

@@ -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<ResourcePath> getIncludedResourcePaths() {
List<ResourcePath> paths = super.getIncludedResourcePaths();
SettingLibRobolectricTestRunner.getIncludedResourcePaths(getPackageName(), paths);
return paths;
}
};
manifest.setPackageName("com.android.settingslib");
return manifest;
}
static void getIncludedResourcePaths(String packageName, List<ResourcePath> 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));
}
}

View File

@@ -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");
}
}