Add setIconContentDescription to EntityHeaderController
This lets us set a contentDescription on the icon in entity headers
for accessibility.
Bug: 62068874
Test: make RunSettingsRoboTests
Change-Id: I1af7aad34aa65b616cf4edb8b144f315040a9fdd
diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java
index 70d3ce5..c9e0805 100644
--- a/src/com/android/settings/widget/EntityHeaderController.java
+++ b/src/com/android/settings/widget/EntityHeaderController.java
@@ -78,6 +78,7 @@
private Lifecycle mLifecycle;
private RecyclerView mRecyclerView;
private Drawable mIcon;
+ private String mIconContentDescription;
private CharSequence mLabel;
private CharSequence mSummary;
private String mPackageName;
@@ -122,6 +123,10 @@
return this;
}
+ /**
+ * Set the icon in the header. Callers should also consider calling setIconContentDescription
+ * to provide a description of this icon for accessibility purposes.
+ */
public EntityHeaderController setIcon(Drawable icon) {
if (icon != null) {
mIcon = icon.getConstantState().newDrawable(mAppContext.getResources());
@@ -129,6 +134,11 @@
return this;
}
+ /**
+ * Convenience method to set the header icon from an ApplicationsState.AppEntry. Callers should
+ * also consider calling setIconContentDescription to provide a description of this icon for
+ * accessibility purposes.
+ */
public EntityHeaderController setIcon(ApplicationsState.AppEntry appEntry) {
if (appEntry.icon != null) {
mIcon = appEntry.icon.getConstantState().newDrawable(mAppContext.getResources());
@@ -136,6 +146,11 @@
return this;
}
+ public EntityHeaderController setIconContentDescription(String contentDescription) {
+ mIconContentDescription = contentDescription;
+ return this;
+ }
+
public EntityHeaderController setLabel(CharSequence label) {
mLabel = label;
return this;
@@ -204,6 +219,7 @@
ImageView iconView = mHeader.findViewById(R.id.entity_header_icon);
if (iconView != null) {
iconView.setImageDrawable(mIcon);
+ iconView.setContentDescription(mIconContentDescription);
}
setText(R.id.entity_header_title, mLabel);
setText(R.id.entity_header_summary, mSummary);
diff --git a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
index e386282..c29068f 100644
--- a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
@@ -234,6 +234,33 @@
}
@Test
+ public void iconContentDescription_shouldWorkWithSetIcon() {
+ final View view = mLayoutInflater
+ .inflate(R.layout.settings_entity_header, null /* root */);
+ when(mFragment.getActivity()).thenReturn(mock(Activity.class));
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, view);
+ String description = "Fake Description";
+ mController.setIcon(mShadowContext.getDrawable(R.drawable.ic_add));
+ mController.setIconContentDescription(description);
+ mController.done(mActivity);
+ assertThat(view.findViewById(R.id.entity_header_icon).getContentDescription().toString())
+ .isEqualTo(description);
+ }
+
+ @Test
+ public void iconContentDescription_shouldWorkWithoutSetIcon() {
+ final View view = mLayoutInflater
+ .inflate(R.layout.settings_entity_header, null /* root */);
+ when(mFragment.getActivity()).thenReturn(mock(Activity.class));
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, view);
+ String description = "Fake Description";
+ mController.setIconContentDescription(description);
+ mController.done(mActivity);
+ assertThat(view.findViewById(R.id.entity_header_icon).getContentDescription().toString())
+ .isEqualTo(description);
+ }
+
+ @Test
public void bindButton_hasAppNotifIntent_shouldShowButton() {
final View appLinks = mLayoutInflater
.inflate(R.layout.settings_entity_header, null /* root */);