diff --git a/res/values/strings.xml b/res/values/strings.xml
index f7c0410..bedc0f6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5504,13 +5504,13 @@
     <!-- Summary for the accessibility preference to high contrast text. [CHAR LIMIT=NONE] -->
     <string name="accessibility_toggle_high_text_contrast_preference_summary">Change text color to black or white. Maximizes contrast with the background.</string>
     <!-- Title for the notification that high contrast text has been replaced. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_notification_high_contrast_text_title">High contrast text has been replaced</string>
+    <string name="accessibility_notification_high_contrast_text_title">Improve text contrast</string>
     <!-- Text content for the notification that high contrast text has been replaced. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_notification_high_contrast_text_content">Try Text outlines instead. Find it in Settings.</string>
+    <string name="accessibility_notification_high_contrast_text_body"><xliff:g example="Outline text" id="outline_text">%1$s</xliff:g> has replaced <xliff:g example="high contrast text" id="high_contrast_text">%2$s</xliff:g>. You can turn it on in <xliff:g example="Settings" id="settings">%3$s</xliff:g>.</string>
     <!-- Action for the notification to high contrast text. [CHAR LIMIT=35] -->
-    <string name="accessibility_notification_high_contrast_text_action">Open Settings</string>
+    <string name="accessibility_notification_high_contrast_text_action">Go to <xliff:g example="Settings" id="settings">%1$s</xliff:g></string>
     <!-- Title for the accessibility preference that adds an outline behind text to increase contrast and legibility. [CHAR LIMIT=35] -->
-    <string name="accessibility_toggle_maximize_text_contrast_preference_title">Text outlines</string>
+    <string name="accessibility_toggle_maximize_text_contrast_preference_title">Outline text</string>
     <!-- Summary for the accessibility preference to high contrast text. [CHAR LIMIT=NONE] -->
     <string name="accessibility_toggle_maximize_text_contrast_preference_summary">Add a black or white background around text to increase contrast</string>
     <!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java
index 863689d..0b412ae 100644
--- a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java
+++ b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java
@@ -43,6 +43,7 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.Locale;
 
 /**
  * Handling smooth migration to the new high contrast text appearance
@@ -128,14 +129,25 @@
         }
     }
 
+    private String getNotificationContentText(Context context) {
+        final String newName = context.getString(
+                R.string.accessibility_toggle_maximize_text_contrast_preference_title);
+        final String oldName = context.getString(
+                R.string.accessibility_toggle_high_text_contrast_preference_title)
+                .toLowerCase(Locale.getDefault());
+        final String settingsAppName = context.getString(R.string.settings_label);
+        return context.getString(
+                R.string.accessibility_notification_high_contrast_text_body,
+                newName, oldName, settingsAppName);
+    }
+
     private void showNotification(Context context) {
         Notification.Builder notificationBuilder = new Notification.Builder(context,
                 NOTIFICATION_CHANNEL)
                 .setSmallIcon(R.drawable.ic_settings_24dp)
                 .setContentTitle(context.getString(
                         R.string.accessibility_notification_high_contrast_text_title))
-                .setContentText(context.getString(
-                        R.string.accessibility_notification_high_contrast_text_content))
+                .setContentText(getNotificationContentText(context))
                 .setFlag(Notification.FLAG_NO_CLEAR, true);
 
         Intent settingsIntent = createHighContrastTextSettingsIntent(context);
@@ -149,8 +161,8 @@
                     actionIntent, PendingIntent.FLAG_IMMUTABLE);
             Notification.Action settingsAction = new Notification.Action.Builder(
                     /* icon= */ null,
-                    context.getString(
-                            R.string.accessibility_notification_high_contrast_text_action),
+                    context.getString(R.string.accessibility_notification_high_contrast_text_action,
+                            context.getString(R.string.settings_label)),
                     actionPendingIntent
             ).build();
 
diff --git a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java
index b0864aa..98c2c23 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java
@@ -46,9 +46,10 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.graphics.hwui.flags.Flags;
-import com.android.settings.R;
 import com.android.settings.Utils;
 
+import com.google.common.truth.Expect;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -65,7 +66,8 @@
 /** Tests for {@link HighContrastTextMigrationReceiver}. */
 @RunWith(RobolectricTestRunner.class)
 public class HighContrastTextMigrationReceiverTest {
-
+    @Rule
+    public final Expect expect = Expect.create();
     @Rule
     public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
     private final Context mContext = ApplicationProvider.getApplicationContext();
@@ -230,14 +232,12 @@
         assertThat(notification).isNotNull();
 
         ShadowNotification shadowNotification = Shadows.shadowOf(notification);
-        assertThat(shadowNotification.getContentTitle()).isEqualTo(mContext.getString(
-                R.string.accessibility_notification_high_contrast_text_title));
-        assertThat(shadowNotification.getContentText()).isEqualTo(
-                mContext.getString(R.string.accessibility_notification_high_contrast_text_content));
+        expect.that(shadowNotification.getContentTitle()).isEqualTo("Improve text contrast");
+        expect.that(shadowNotification.getContentText()).isEqualTo(
+                "Outline text has replaced high contrast text. You can turn it on in Settings.");
 
-        assertThat(notification.actions.length).isEqualTo(1);
-        assertThat(notification.actions[0].title.toString()).isEqualTo(
-                mContext.getString(R.string.accessibility_notification_high_contrast_text_action));
+        expect.that(notification.actions.length).isEqualTo(1);
+        expect.that(notification.actions[0].title.toString()).isEqualTo("Go to Settings");
     }
 
     private void assertPromptStateAndHctState(
