diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index 1f27e5b..937f041 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -28,12 +28,9 @@
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.text.SpannableString;
-import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.text.method.LinkMovementMethod;
-import android.text.style.TextAppearanceSpan;
-import android.text.style.URLSpan;
 import android.text.util.Linkify;
 import android.util.TypedValue;
 import android.view.Gravity;
@@ -50,6 +47,7 @@
 import com.android.dialer.logging.ContactSource;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
 import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.util.DialerUtils;
 import com.android.voicemail.VoicemailClient;
@@ -327,7 +325,6 @@
     builder.setCancelable(true);
     AlertDialog dialog = builder.create();
 
-    // Use a custom title to prevent truncation, sigh
     TextView title = new TextView(context);
     title.setText(R.string.voicemail_donation_promo_title);
 
@@ -378,19 +375,10 @@
   }
 
   private SpannableString getVoicemailDonationPromoContent() {
-    CharSequence content = context.getString(R.string.voicemail_donation_promo_content);
-    CharSequence learnMore = context.getString(R.string.voicemail_donation_promo_learn_more);
-    String learnMoreUrl = context.getString(R.string.voicemail_donation_promo_learn_more_url);
-    SpannableString span = new SpannableString(content + " " + learnMore);
-    int end = span.length();
-    int start = end - learnMore.length();
-    span.setSpan(new URLSpan(learnMoreUrl), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-    span.setSpan(
-        new TextAppearanceSpan(context, R.style.PromoLinkStyle),
-        start,
-        end,
-        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-    return span;
+    return new ContentWithLearnMoreSpanner(context)
+        .create(
+            context.getString(R.string.voicemail_donation_promo_content),
+            context.getString(R.string.voicemail_donation_promo_learn_more_url));
   }
 
   @Override
diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml
index 047f9e3..7c88329 100644
--- a/java/com/android/dialer/app/res/values/strings.xml
+++ b/java/com/android/dialer/app/res/values/strings.xml
@@ -680,12 +680,9 @@
        [CHAR LIMIT=NONE] -->
   <string name="voicemail_donation_promo_content">
     Let Google review this and future voicemail messages with transcripts.
-    They\'ll be stored anonymously. Change Settings anytime.
+    They\'ll be stored anonymously. Change Settings any time. <xliff:g example="Learn more">%1$s</xliff:g>
   </string>
 
-  <!-- Text for a 'learn more' link at the end of the voicemail donation promo dialog content -->
-  <string name="voicemail_donation_promo_learn_more">Learn&#160;more</string>
-
   <string translatable="false" name="voicemail_donation_promo_learn_more_url">https://support.google.com/phoneapp/answer/2811844?hl=en%26ref_topic=7539039</string>
 
   <!-- Label for the voicemail donation promo dialog opt-in button
diff --git a/java/com/android/dialer/spannable/AndroidManifest.xml b/java/com/android/dialer/spannable/AndroidManifest.xml
new file mode 100644
index 0000000..e256dc1
--- /dev/null
+++ b/java/com/android/dialer/spannable/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~      http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.dialer.spannable">
+
+  <uses-sdk
+      android:minSdkVersion="23"
+      android:targetSdkVersion="27"/>
+</manifest>
diff --git a/java/com/android/dialer/spannable/ContentWithLearnMoreSpanner.java b/java/com/android/dialer/spannable/ContentWithLearnMoreSpanner.java
new file mode 100644
index 0000000..50302af
--- /dev/null
+++ b/java/com/android/dialer/spannable/ContentWithLearnMoreSpanner.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.spannable;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.TypefaceSpan;
+import com.android.dialer.common.Assert;
+
+/**
+ * Creates {@link SpannableString SpannableStrings} which are styled appropriately for Dialer
+ * content with "Learn more" links.
+ *
+ * <p>Example usage:
+ *
+ * <pre>
+ *   TextView content = ...;
+ *   ContentWithLearnMoreSpanner creator = new ContentWithLearnMoreSpanner(getApplicationContext());
+ *   // myFeatureContent: "Try my feature. <xliff:g example="Learn more">%1$s</xliff:g>"
+ *   String content = getString(R.string.myFeatureContent);
+ *
+ *   SpannableString spannable = creator.create(content, "https://www.myFeatureHelp.com");
+ *   content.setText(spannable);
+ * </pre>
+ *
+ * Users will see: "Try my feature. Learn more" where "Learn more" links to the given url.
+ */
+public final class ContentWithLearnMoreSpanner {
+
+  private final Context context;
+
+  public ContentWithLearnMoreSpanner(@NonNull Context context) {
+    this.context = context.getApplicationContext();
+  }
+
+  /**
+   * Creates a spannable string using the given content and learn more url.
+   *
+   * @param contentFormatString a format string {@see java.util.Formatter} with a single string
+   *     format parameter, e.g. "Try my feature. %1$s".
+   * @param learnMoreUrl a url which the "Learn more" text will link to.
+   * @return a {@link SpannableString}. This string is put together by inserting the text "Learn
+   *     more" into the given {@code contentFormatString}, setting "Learn more" to link to the given
+   *     {@code learnMoreUrl}, then styling the "Learn more" text with common Dialer learn more
+   *     styling. The "Learn more" text uses a non-breaking-space character to ensure it says on a
+   *     single line.
+   * @throws java.util.IllegalFormatException if {@code contentFormatString} has an improper format
+   * @throws IllegalArgumentException if it wasn't possible to add "Learn more" to the given
+   *     contentFormatString
+   */
+  @NonNull
+  public SpannableString create(@NonNull String contentFormatString, @NonNull String learnMoreUrl) {
+    String learnMore = context.getString(R.string.general_learn_more);
+
+    SpannableString contents = new SpannableString(String.format(contentFormatString, learnMore));
+
+    Assert.checkArgument(
+        contents.toString().contains(learnMore),
+        "Couldn't add learn more link to %s",
+        contentFormatString);
+
+    int learnMoreSpanStartIndex = contents.toString().lastIndexOf(learnMore);
+    int learnMoreSpanEndIndex = learnMoreSpanStartIndex + learnMore.length();
+
+    contents.setSpan(
+        new TypefaceSpan("sans-serif-medium"),
+        learnMoreSpanStartIndex,
+        learnMoreSpanEndIndex,
+        Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+
+    contents.setSpan(
+        new UrlSpanWithoutUnderline(learnMoreUrl),
+        learnMoreSpanStartIndex,
+        learnMoreSpanEndIndex,
+        Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+
+    return contents;
+  }
+}
diff --git a/java/com/android/dialer/spannable/UrlSpanWithoutUnderline.java b/java/com/android/dialer/spannable/UrlSpanWithoutUnderline.java
new file mode 100644
index 0000000..81ffa6b
--- /dev/null
+++ b/java/com/android/dialer/spannable/UrlSpanWithoutUnderline.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.spannable;
+
+import android.text.TextPaint;
+import android.text.style.URLSpan;
+
+/** Version of {@link URLSpan} which doesn't underline links. */
+final class UrlSpanWithoutUnderline extends URLSpan {
+
+  UrlSpanWithoutUnderline(String url) {
+    super(url);
+  }
+
+  @Override
+  public void updateDrawState(TextPaint ds) {
+    super.updateDrawState(ds);
+    ds.setUnderlineText(false);
+  }
+}
diff --git a/java/com/android/dialer/spannable/res/values/strings.xml b/java/com/android/dialer/spannable/res/values/strings.xml
new file mode 100644
index 0000000..9e214b2
--- /dev/null
+++ b/java/com/android/dialer/spannable/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<resources>
+
+  <!-- The Learn more text used for all features to link to additional details.
+      [CHAR_LIMIT=30] -->
+  <string name="general_learn_more">Learn\u00A0more</string>
+</resources>
\ No newline at end of file
diff --git a/packages.mk b/packages.mk
index bc9f729..1157621 100644
--- a/packages.mk
+++ b/packages.mk
@@ -59,6 +59,7 @@
 	com.android.dialer.shortcuts \
 	com.android.dialer.simulator.impl \
 	com.android.dialer.speeddial \
+	com.android.dialer.spannable \
 	com.android.dialer.theme \
 	com.android.dialer.util \
 	com.android.dialer.voicemail.listui \
