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 */);
