diff --git a/slices/builders/api/current.txt b/slices/builders/api/current.txt
index 5aa4f42..89275b9 100644
--- a/slices/builders/api/current.txt
+++ b/slices/builders/api/current.txt
@@ -7,6 +7,7 @@
     method public androidx.slice.builders.GridBuilder addSeeMoreAction(android.app.PendingIntent);
     method public androidx.slice.builders.GridBuilder addSeeMoreCell(androidx.slice.builders.GridBuilder.CellBuilder);
     method public androidx.slice.builders.GridBuilder addSeeMoreCell(java.util.function.Consumer<androidx.slice.builders.GridBuilder.CellBuilder>);
+    method public androidx.slice.builders.GridBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.GridBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
     field public static final deprecated int ICON_IMAGE = 0; // 0x0
     field public static final deprecated int LARGE_IMAGE = 2; // 0x2
@@ -26,6 +27,7 @@
     method public androidx.slice.builders.GridBuilder.CellBuilder addText(java.lang.CharSequence, boolean);
     method public androidx.slice.builders.GridBuilder.CellBuilder addTitleText(java.lang.CharSequence);
     method public androidx.slice.builders.GridBuilder.CellBuilder addTitleText(java.lang.CharSequence, boolean);
+    method public androidx.slice.builders.GridBuilder.CellBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.GridBuilder.CellBuilder setContentIntent(android.app.PendingIntent);
   }
 
@@ -52,6 +54,7 @@
 
   public static class ListBuilder.HeaderBuilder extends androidx.slice.builders.TemplateSliceBuilder {
     ctor public ListBuilder.HeaderBuilder(androidx.slice.builders.ListBuilder);
+    method public androidx.slice.builders.ListBuilder.HeaderBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.HeaderBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummarySubtitle(java.lang.CharSequence);
@@ -61,6 +64,7 @@
   public static class ListBuilder.InputRangeBuilder extends androidx.slice.builders.TemplateSliceBuilder {
     ctor public ListBuilder.InputRangeBuilder(androidx.slice.builders.ListBuilder);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setAction(android.app.PendingIntent);
+    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setMax(int);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setThumb(android.graphics.drawable.Icon);
     method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitle(java.lang.CharSequence);
@@ -69,6 +73,7 @@
 
   public static class ListBuilder.RangeBuilder extends androidx.slice.builders.TemplateSliceBuilder {
     ctor public ListBuilder.RangeBuilder(androidx.slice.builders.ListBuilder);
+    method public androidx.slice.builders.ListBuilder.RangeBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setMax(int);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setTitle(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.RangeBuilder setValue(int);
@@ -85,6 +90,7 @@
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(android.graphics.drawable.Icon, int, boolean);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
+    method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.RowBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
     method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence);
     method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence, boolean);
diff --git a/slices/builders/src/main/java/androidx/slice/builders/GridBuilder.java b/slices/builders/src/main/java/androidx/slice/builders/GridBuilder.java
index 57a66b6..488d925 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/GridBuilder.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/GridBuilder.java
@@ -22,13 +22,13 @@
 import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.os.Build;
+
+import java.util.function.Consumer;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-
-import java.util.function.Consumer;
-
 import androidx.slice.builders.impl.TemplateBuilderImpl;
 
 
@@ -178,6 +178,15 @@
     }
 
     /**
+     * Sets the content description for the entire grid row.
+     */
+    @NonNull
+    public GridBuilder setContentDescription(@NonNull CharSequence description) {
+        mImpl.setContentDescription(description);
+        return this;
+    }
+
+    /**
      * @hide
      */
     @RestrictTo(LIBRARY)
@@ -381,5 +390,14 @@
             mImpl.setContentIntent(intent);
             return this;
         }
+
+        /**
+         * Sets the content description for this cell.
+         */
+        @NonNull
+        public CellBuilder setContentDescription(@NonNull CharSequence description) {
+            mImpl.setContentDescription(description);
+            return this;
+        }
     }
 }
diff --git a/slices/builders/src/main/java/androidx/slice/builders/ListBuilder.java b/slices/builders/src/main/java/androidx/slice/builders/ListBuilder.java
index 77c6b44..5e8179c 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/ListBuilder.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/ListBuilder.java
@@ -24,15 +24,15 @@
 import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.os.Build;
+
+import java.util.function.Consumer;
+
 import androidx.annotation.ColorInt;
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-
-import java.util.function.Consumer;
-
 import androidx.slice.SliceSpecs;
 import androidx.slice.builders.impl.ListBuilderBasicImpl;
 import androidx.slice.builders.impl.ListBuilderV1Impl;
@@ -356,6 +356,15 @@
             return this;
         }
 
+        /**
+         * Sets the content description.
+         */
+        @NonNull
+        public RangeBuilder setContentDescription(@NonNull CharSequence description) {
+            mImpl.setContentDescription(description);
+            return this;
+        }
+
         @Override
         void setImpl(TemplateBuilderImpl impl) {
             mImpl = (androidx.slice.builders.impl.ListBuilder.RangeBuilder) impl;
@@ -418,6 +427,15 @@
             return this;
         }
 
+        /**
+         * Sets the content description.
+         */
+        @NonNull
+        public InputRangeBuilder setContentDescription(@NonNull CharSequence description) {
+            mImpl.setContentDescription(description);
+            return this;
+        }
+
         @Override
         void setImpl(TemplateBuilderImpl impl) {
             mImpl = (androidx.slice.builders.impl.ListBuilder.InputRangeBuilder) impl;
@@ -774,6 +792,15 @@
             return this;
         }
 
+        /**
+         * Sets the content description for the row.
+         */
+        @NonNull
+        public RowBuilder setContentDescription(@NonNull CharSequence description) {
+            mImpl.setContentDescription(description);
+            return this;
+        }
+
         @Override
         void setImpl(TemplateBuilderImpl impl) {
             mImpl = (androidx.slice.builders.impl.ListBuilder.RowBuilder) impl;
@@ -852,6 +879,15 @@
             return this;
         }
 
+        /**
+         * Sets the content description for the header.
+         */
+        @NonNull
+        public HeaderBuilder setContentDescription(@NonNull CharSequence description) {
+            mImpl.setContentDescription(description);
+            return this;
+        }
+
         @Override
         void setImpl(TemplateBuilderImpl impl) {
             mImpl = (androidx.slice.builders.impl.ListBuilder.HeaderBuilder) impl;
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilder.java b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilder.java
index 8396f3f..99d5ce4 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilder.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilder.java
@@ -21,10 +21,10 @@
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-
 import androidx.slice.builders.SliceAction;
 
 /**
@@ -75,6 +75,11 @@
     void setPrimaryAction(SliceAction action);
 
     /**
+     * Sets the content description for the entire grid row.
+     */
+    void setContentDescription(CharSequence description);
+
+    /**
      */
     interface CellBuilder {
         /**
@@ -141,5 +146,10 @@
          */
         @NonNull
         void setContentIntent(@NonNull PendingIntent intent);
+
+        /**
+         * Sets the content description for this cell.
+         */
+        void setContentDescription(CharSequence description);
     }
 }
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderBasicImpl.java b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderBasicImpl.java
index 8f16753..96df99e 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderBasicImpl.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderBasicImpl.java
@@ -21,10 +21,10 @@
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-
 import androidx.slice.Slice;
 import androidx.slice.builders.SliceAction;
 
@@ -83,6 +83,12 @@
     /**
      */
     @Override
+    public void setContentDescription(CharSequence description) {
+    }
+
+    /**
+     */
+    @Override
     public void apply(Slice.Builder builder) {
 
     }
@@ -155,6 +161,12 @@
         /**
          */
         @Override
+        public void setContentDescription(CharSequence description) {
+        }
+
+        /**
+         */
+        @Override
         public void apply(Slice.Builder builder) {
 
         }
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderListV1Impl.java b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderListV1Impl.java
index 7920eb1..8dc89fe 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderListV1Impl.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/GridBuilderListV1Impl.java
@@ -24,20 +24,21 @@
 import static android.app.slice.Slice.HINT_SEE_MORE;
 import static android.app.slice.Slice.HINT_SHORTCUT;
 import static android.app.slice.Slice.HINT_TITLE;
-import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+import static android.app.slice.Slice.SUBTYPE_CONTENT_DESCRIPTION;
 
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.slice.builders.ListBuilder.ICON_IMAGE;
 import static androidx.slice.builders.ListBuilder.LARGE_IMAGE;
 
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
 
 import java.util.ArrayList;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 import androidx.slice.Slice;
 import androidx.slice.builders.SliceAction;
 
@@ -127,6 +128,13 @@
 
     /**
      */
+    @Override
+    public void setContentDescription(CharSequence description) {
+        getBuilder().addText(description, SUBTYPE_CONTENT_DESCRIPTION);
+    }
+
+    /**
+     */
     public static final class CellBuilder extends TemplateBuilderImpl implements
             GridBuilder.CellBuilder {
 
@@ -216,6 +224,13 @@
         }
 
         /**
+         */
+        @Override
+        public void setContentDescription(CharSequence description) {
+            getBuilder().addText(description, SUBTYPE_CONTENT_DESCRIPTION);
+        }
+
+        /**
          * @hide
          */
         @RestrictTo(LIBRARY)
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
index 5a2e776..2ea33e3 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilder.java
@@ -21,10 +21,10 @@
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
-
 import androidx.slice.builders.SliceAction;
 
 /**
@@ -139,6 +139,11 @@
          * Set the title.
          */
         void setTitle(@NonNull CharSequence title);
+
+        /**
+         * Sets the content description.
+         */
+        void setContentDescription(CharSequence description);
     }
 
     /**
@@ -280,6 +285,11 @@
          * until updated.
          */
         void addEndItem(SliceAction action, boolean isLoading);
+
+        /**
+         * Sets the content description for this row.
+         */
+        void setContentDescription(CharSequence description);
     }
 
 
@@ -310,6 +320,11 @@
          * Sets the action to invoke when the header is activated.
          */
         void setPrimaryAction(SliceAction action);
+
+        /**
+         * Sets the content description for the header.
+         */
+        void setContentDescription(CharSequence description);
     }
 }
 
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
index ef10c9a..7c283dd 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderBasicImpl.java
@@ -21,10 +21,10 @@
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
-
 import androidx.slice.Slice;
 import androidx.slice.SliceSpec;
 import androidx.slice.builders.SliceAction;
@@ -179,6 +179,13 @@
         /**
          */
         @Override
+        public void setContentDescription(CharSequence description) {
+
+        }
+
+        /**
+         */
+        @Override
         public void setTitleItem(long timeStamp) {
 
         }
@@ -323,5 +330,10 @@
         public void setPrimaryAction(SliceAction action) {
 
         }
+
+        @Override
+        public void setContentDescription(CharSequence description) {
+
+        }
     }
 }
diff --git a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderV1Impl.java b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderV1Impl.java
index 15cc4c7..9c0ca5d 100644
--- a/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderV1Impl.java
+++ b/slices/builders/src/main/java/androidx/slice/builders/impl/ListBuilderV1Impl.java
@@ -26,9 +26,10 @@
 import static android.app.slice.Slice.HINT_SUMMARY;
 import static android.app.slice.Slice.HINT_TITLE;
 import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.Slice.SUBTYPE_CONTENT_DESCRIPTION;
 import static android.app.slice.SliceItem.FORMAT_TEXT;
-import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.slice.builders.ListBuilder.ICON_IMAGE;
 import static androidx.slice.builders.ListBuilder.LARGE_IMAGE;
 import static androidx.slice.core.SliceHints.SUBTYPE_MAX;
@@ -38,13 +39,13 @@
 import android.app.PendingIntent;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
-import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.slice.Slice;
 import androidx.slice.SliceItem;
 import androidx.slice.SliceSpec;
@@ -154,6 +155,7 @@
         private int mMax = 100;
         private int mValue = 0;
         private CharSequence mTitle;
+        private CharSequence mContentDescr;
 
         public RangeBuilderImpl(Slice.Builder sb) {
             super(sb, null);
@@ -175,10 +177,18 @@
         }
 
         @Override
+        public void setContentDescription(@NonNull CharSequence description) {
+            mContentDescr = description;
+        }
+
+        @Override
         public void apply(Slice.Builder builder) {
             if (mTitle != null) {
                 builder.addText(mTitle, null, HINT_TITLE);
             }
+            if (mContentDescr != null) {
+                builder.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION);
+            }
             builder.addHints(HINT_LIST_ITEM)
                     .addInt(mMax, SUBTYPE_MAX)
                     .addInt(mValue, SUBTYPE_VALUE);
@@ -283,6 +293,7 @@
         private SliceItem mSubtitleItem;
         private Slice mStartItem;
         private ArrayList<Slice> mEndItems = new ArrayList<>();
+        private CharSequence mContentDescr;
 
         /**
          */
@@ -464,6 +475,11 @@
             mEndItems.add(action.buildSlice(sb));
         }
 
+        @Override
+        public void setContentDescription(CharSequence description) {
+            mContentDescr = description;
+        }
+
         /**
          */
         @Override
@@ -481,6 +497,9 @@
                 Slice item = mEndItems.get(i);
                 b.addSubSlice(item);
             }
+            if (mContentDescr != null) {
+                b.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION);
+            }
             if (mPrimaryAction != null) {
                 Slice.Builder sb = new Slice.Builder(
                         getBuilder()).addHints(HINT_TITLE, HINT_SHORTCUT);
@@ -499,6 +518,7 @@
         private CharSequence mSubtitle;
         private CharSequence mSummarySubtitle;
         private SliceAction mPrimaryAction;
+        private CharSequence mContentDescr;
 
         /**
          */
@@ -525,6 +545,9 @@
             if (mSummarySubtitle != null) {
                 b.addText(mSummarySubtitle, null /* subtype */, HINT_SUMMARY);
             }
+            if (mContentDescr != null) {
+                b.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION);
+            }
             if (mPrimaryAction != null) {
                 Slice.Builder sb = new Slice.Builder(
                         getBuilder()).addHints(HINT_TITLE, HINT_SHORTCUT);
@@ -559,5 +582,12 @@
         public void setPrimaryAction(SliceAction action) {
             mPrimaryAction = action;
         }
+
+        /**
+         */
+        @Override
+        public void setContentDescription(CharSequence description) {
+            mContentDescr = description;
+        }
     }
 }
