Add content description to bar chart icons.

Allow setting a content description on the bar chart icons so screen
readers can speak information about them.

Bug: 127237805
Test: Use new API.
Test: atest the two modified tests
Change-Id: I97c3693459bd1d916a66d834434be6ef3ab405d7
This commit is contained in:
Joel Galenson
2019-03-05 14:14:14 -08:00
parent 6693dc9375
commit 9842425fd8
4 changed files with 48 additions and 30 deletions

View File

@@ -74,6 +74,7 @@ public class BarView extends LinearLayout {
// For now, we use the bar number as title.
mBarTitle.setText(Integer.toString(barViewInfo.getHeight()));
mBarSummary.setText(barViewInfo.getSummary());
mIcon.setContentDescription(barViewInfo.getContentDescription());
}
@VisibleForTesting

View File

@@ -34,6 +34,7 @@ public class BarViewInfo implements Comparable<BarViewInfo> {
private View.OnClickListener mClickListener;
@StringRes
private int mSummary;
private @Nullable CharSequence mContentDescription;
// A number indicates this bar's height. The larger number shows a higher bar view.
private int mHeight;
// A real height of bar view.
@@ -45,11 +46,14 @@ public class BarViewInfo implements Comparable<BarViewInfo> {
* @param icon The icon of bar view.
* @param barHeight The height of bar view. Larger number shows a higher bar view.
* @param summary The string resource id for summary.
* @param contentDescription Optional text that briefly describes the contents of the icon.
*/
public BarViewInfo(Drawable icon, @IntRange(from = 0) int barHeight, @StringRes int summary) {
public BarViewInfo(Drawable icon, @IntRange(from = 0) int barHeight, @StringRes int summary,
@Nullable CharSequence contentDescription) {
mIcon = icon;
mHeight = barHeight;
mSummary = summary;
mContentDescription = contentDescription;
}
/**
@@ -91,6 +95,10 @@ public class BarViewInfo implements Comparable<BarViewInfo> {
return mSummary;
}
public @Nullable CharSequence getContentDescription() {
return mContentDescription;
}
void setNormalizedHeight(@IntRange(from = 0) int barHeight) {
mNormalizedHeight = barHeight;
}

View File

@@ -72,7 +72,8 @@ public class BarChartInfoTest {
final BarViewInfo barViewInfo = new BarViewInfo(
null /* icon */,
50,
mTitle);
mTitle,
null);
final BarChartInfo mBarChartInfo = new BarChartInfo.Builder()
.setTitle(mTitle)
@@ -91,7 +92,8 @@ public class BarChartInfoTest {
final BarViewInfo barViewInfo = new BarViewInfo(
null /* icon */,
50,
mTitle);
mTitle,
null);
final BarChartInfo mBarChartInfo = new BarChartInfo.Builder()
.setTitle(mTitle)
.setDetails(mDetails)
@@ -113,7 +115,8 @@ public class BarChartInfoTest {
final BarViewInfo barViewInfo = new BarViewInfo(
null /* icon */,
50,
mTitle);
mTitle,
null);
new BarChartInfo.Builder()
.setTitle(mTitle)
.setDetails(mDetails)

View File

@@ -113,7 +113,8 @@ public class BarChartPreferenceTest {
final BarChartInfo barChartInfo = new BarChartInfo.Builder()
.setTitle(R.string.debug_app)
.setDetails(R.string.debug_app)
.addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app))
.addBarViewInfo(
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null))
.build();
mPreference.initializeBarChart(barChartInfo);
@@ -128,7 +129,8 @@ public class BarChartPreferenceTest {
// We don't call BarChartInfo.Builder#setDetails yet.
final BarChartInfo barChartInfo = new BarChartInfo.Builder()
.setTitle(R.string.debug_app)
.addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app))
.addBarViewInfo(
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null))
.build();
mPreference.initializeBarChart(barChartInfo);
@@ -144,7 +146,8 @@ public class BarChartPreferenceTest {
.setDetails(R.string.debug_app)
.setDetailsOnClickListener(v -> {
})
.addBarViewInfo(new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app))
.addBarViewInfo(
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null))
.build();
mPreference.initializeBarChart(barChartInfo);
@@ -157,7 +160,7 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_oneBarViewInfoSet_shouldShowOneBarView() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app)
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null)
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -175,8 +178,8 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_twoBarViewInfosSet_shouldShowTwoBarViews() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app)
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null)
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -195,9 +198,9 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_threeBarViewInfosSet_shouldShowThreeBarViews() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app)
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app, null)
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -217,10 +220,10 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_fourBarViewInfosSet_shouldShowFourBarViews() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 2 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 20 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 2 /* barNumber */, R.string.debug_app, null),
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -242,11 +245,11 @@ public class BarChartPreferenceTest {
thrown.expect(IllegalStateException.class);
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 50 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 70 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 50 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 70 /* barNumber */, R.string.debug_app, null),
};
mPreference.setBarViewInfos(barViewsInfo);
@@ -255,10 +258,10 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_barViewInfosSet_shouldBeSortedInDescending() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 50 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 50 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 5 /* barNumber */, R.string.debug_app, null),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null),
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -278,7 +281,7 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_validBarViewSummarySet_barViewShouldShowSummary() {
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app),
new BarViewInfo(mIcon, 10 /* barNumber */, R.string.debug_app, null),
};
mPreference.initializeBarChart(mBarChartInfo);
@@ -291,7 +294,8 @@ public class BarChartPreferenceTest {
@Test
public void setBarViewInfos_clickListenerForBarViewSet_barViewShouldHaveClickListener() {
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app);
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app,
null);
viewInfo.setClickListener(v -> {
});
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo};
@@ -306,7 +310,8 @@ public class BarChartPreferenceTest {
@Test
public void onBindViewHolder_loadingStateIsTrue_shouldHideAllViews() {
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app);
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app,
null);
viewInfo.setClickListener(v -> {
});
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo};
@@ -322,7 +327,8 @@ public class BarChartPreferenceTest {
@Test
public void onBindViewHolder_loadingStateIsFalse_shouldInitAnyView() {
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app);
final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app,
null);
viewInfo.setClickListener(v -> {
});
final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo};