diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8c3532d..37c8923 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7540,6 +7540,11 @@
     <!-- Title text for connecting to 24/7 available customer support [CHAR LIMIT=80]-->
     <string name="support_escalation_24_7_title">We\'re here for you 24/7</string>
 
+    <!-- Content description for connecting customer support. The "24 7" part indicates
+    support is available 24 hours a day, 7 days a week. It's used by screenreaders so it
+    cannot contain any symbol other that space. [CHAR LIMIT=80]-->
+    <string name="support_escalation_24_7_content_description">We\'re here for you 24 7</string>
+
     <!-- Summary text for connecting to customer support [CHAR LIMIT=NONE]-->
     <string name="support_escalation_summary">Our support team is here to help address any issues</string>
 
diff --git a/src/com/android/settings/dashboard/SupportItemAdapter.java b/src/com/android/settings/dashboard/SupportItemAdapter.java
index d0c5398..c5ff2a6 100644
--- a/src/com/android/settings/dashboard/SupportItemAdapter.java
+++ b/src/com/android/settings/dashboard/SupportItemAdapter.java
@@ -219,6 +219,7 @@
                 || mSupportFeatureProvider.isAlwaysOperating(CHAT, null /* countryCode */)) {
             // Support is available.
             builder.setTileTitle(R.string.support_escalation_24_7_title)
+                    .setTileTitleDescription(R.string.support_escalation_24_7_content_description)
                     .setTileSummary(mActivity.getString(R.string.support_escalation_24_7_summary));
         } else if (mSupportFeatureProvider.isOperatingNow(PHONE)
                 || mSupportFeatureProvider.isOperatingNow(CHAT)) {
@@ -264,6 +265,9 @@
                 .setTileTitle(isPhoneSupportAlwaysOperating
                         ? R.string.support_escalation_24_7_title
                         : R.string.support_escalation_title)
+                .setTileTitleDescription(isPhoneSupportAlwaysOperating
+                        ? R.string.support_escalation_24_7_content_description
+                        : R.string.support_escalation_title)
                 .setTileSummary(operatingHours)
                 .build());
     }
@@ -295,6 +299,7 @@
 
     private void bindEscalationOptions(ViewHolder holder, EscalationData data) {
         holder.tileTitleView.setText(data.tileTitle);
+        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
         holder.tileSummaryView.setText(data.tileSummary);
         if (data.text1 == 0) {
             holder.text1View.setVisibility(View.GONE);
@@ -327,6 +332,7 @@
     private void bindOfflineEscalationOptions(ViewHolder holder, OfflineEscalationData data) {
         // Bind Title
         holder.tileTitleView.setText(data.tileTitle);
+        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
         holder.tileSummaryView.setText(data.tileSummary);
         // Bind spinner
         final Spinner spinner = (Spinner) holder.itemView.findViewById(R.id.spinner);
@@ -361,6 +367,7 @@
 
     private void bindSignInPromoTile(ViewHolder holder, EscalationData data) {
         holder.tileTitleView.setText(data.tileTitle);
+        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
         holder.tileSummaryView.setText(data.tileSummary);
         holder.text1View.setText(data.text1);
         holder.text2View.setText(data.text2);
@@ -374,6 +381,7 @@
         }
         if (holder.tileTitleView != null) {
             holder.tileTitleView.setText(data.tileTitle);
+            holder.tileTitleView.setContentDescription(data.tileTitleDescription);
         }
         if (holder.tileSummaryView != null) {
             holder.tileSummaryView.setText(data.tileSummary);
@@ -511,6 +519,7 @@
         final int icon;
         @StringRes
         final int tileTitle;
+        final CharSequence tileTitleDescription;
         final CharSequence tileSummary;
 
 
@@ -518,6 +527,7 @@
             this.type = builder.mType;
             this.icon = builder.mIcon;
             this.tileTitle = builder.mTileTitle;
+            this.tileTitleDescription = builder.mTileTitleDescription;
             this.tileSummary = builder.mTileSummary;
             this.intent = builder.mIntent;
             this.metricsEvent = builder.mMetricsEvent;
@@ -532,6 +542,7 @@
             private int mIcon;
             @StringRes
             private int mTileTitle;
+            private CharSequence mTileTitleDescription;
             private CharSequence mTileSummary;
             private Intent mIntent;
             private int mMetricsEvent = -1;
@@ -551,6 +562,11 @@
                 return this;
             }
 
+            Builder setTileTitleDescription(@StringRes int titleDescription) {
+                mTileTitleDescription = mContext.getString(titleDescription);
+                return this;
+            }
+
             Builder setTileSummary(@StringRes int summary) {
                 mTileSummary = mContext.getString(summary);
                 return this;
