private Lifecycle mLifecycle;
private RecyclerView mRecyclerView;
private Drawable mIcon;
+ private String mIconContentDescription;
private CharSequence mLabel;
private CharSequence mSummary;
private String mPackageName;
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());
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());
return this;
}
+ public EntityHeaderController setIconContentDescription(String contentDescription) {
+ mIconContentDescription = contentDescription;
+ return this;
+ }
+
public EntityHeaderController setLabel(CharSequence label) {
mLabel = label;
return this;
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);
}
@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 */);