diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7fb0b2c..9cdbad7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -838,6 +838,12 @@
     <!-- Introduction detail message shown in face enrollment dialog [CHAR LIMIT=NONE]-->
     <string name="security_settings_face_enroll_introduction_message">Use your face to unlock your phone, authorize purchases, or sign in to apps.</string>
     <!-- Introduction detail message shown in face enrollment dialog when asking for parental consent [CHAR LIMIT=NONE]-->
+    <string name="security_settings_face_enroll_introduction_consent_message_0" product="default">Allow your child to use their face to unlock their phone</string>
+    <!-- Introduction detail message shown in face enrollment dialog when asking for parental consent [CHAR LIMIT=NONE]-->
+    <string name="security_settings_face_enroll_introduction_consent_message_0" product="tablet">Allow your child to use their face to unlock their tablet</string>
+    <!-- Introduction detail message shown in face enrollment dialog when asking for parental consent [CHAR LIMIT=NONE]-->
+    <string name="security_settings_face_enroll_introduction_consent_message_0" product="device">Allow your child to use their face to unlock their device</string>
+    <!-- Introduction detail message shown in face enrollment dialog when asking for parental consent [CHAR LIMIT=NONE]-->
     <string name="security_settings_face_enroll_introduction_consent_message" product="default">Using your child\u2019s face to unlock their phone may be less secure than a strong pattern or PIN.</string>
     <!-- Introduction detail message shown in face enrollment dialog when asking for parental consent [CHAR LIMIT=NONE]-->
     <string name="security_settings_face_enroll_introduction_consent_message" product="tablet">Using your child\u2019s face to unlock their tablet may be less secure than a strong pattern or PIN.</string>
@@ -858,6 +864,8 @@
     <!-- Message on the face enrollment introduction page that provides information about what could cause the phone to unlock when asking for parental consent. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_introduction_info_consent_looking"></string>
     <!-- Message on the face enrollment introduction page that provides information about the relative security of face for unlocking the phone. [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_enroll_introduction_info_consent_less_secure"></string>
+    <!-- Message on the face enrollment introduction page that provides information about the relative security of face for unlocking the phone for parental consent. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_introduction_info_less_secure"></string>
     <!-- Message on the face enrollment introduction page that provides information about how to require eyes to be open for Face Unlock. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_introduction_info_gaze"></string>
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index aa081bd..a8be8f7 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -115,11 +115,13 @@
         final TextView howMessage = findViewById(R.id.how_message);
         final TextView inControlTitle = findViewById(R.id.title_in_control);
         final TextView inControlMessage = findViewById(R.id.message_in_control);
+        final TextView lessSecure = findViewById(R.id.info_message_less_secure);
         infoMessageGlasses.setText(getInfoMessageGlasses());
         infoMessageLooking.setText(getInfoMessageLooking());
         inControlTitle.setText(getInControlTitle());
         howMessage.setText(getHowMessage());
         inControlMessage.setText(getInControlMessage());
+        lessSecure.setText(getLessSecureMessage());
 
         // Set up and show the "less secure" info section if necessary.
         if (getResources().getBoolean(R.bool.config_face_intro_show_less_secure)) {
@@ -227,6 +229,11 @@
         return R.string.security_settings_face_enroll_introduction_control_message;
     }
 
+    @StringRes
+    protected int getLessSecureMessage() {
+        return R.string.security_settings_face_enroll_introduction_info_less_secure;
+    }
+
     @Override
     protected boolean isDisabledByAdmin() {
         return RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
index 54466f9..0f384c2 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
@@ -45,14 +45,19 @@
             R.string.security_settings_face_enroll_introduction_info_consent_gaze,
             R.string.security_settings_face_enroll_introduction_how_consent_message,
             R.string.security_settings_face_enroll_introduction_control_consent_title,
-            R.string.security_settings_face_enroll_introduction_control_consent_message
+            R.string.security_settings_face_enroll_introduction_control_consent_message,
+            R.string.security_settings_face_enroll_introduction_consent_message_0,
+            R.string.security_settings_face_enroll_introduction_info_consent_less_secure
     };
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-        setDescriptionText(R.string.security_settings_face_enroll_introduction_consent_message);
+        final String text =
+                getText(R.string.security_settings_face_enroll_introduction_consent_message_0)
+                + "\n\n"
+                + getText(R.string.security_settings_face_enroll_introduction_consent_message);
+        setDescriptionText(text);
     }
 
     @Override
@@ -135,6 +140,11 @@
     }
 
     @Override
+    protected int getLessSecureMessage() {
+        return R.string.security_settings_face_enroll_introduction_info_consent_less_secure;
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.FACE_PARENTAL_CONSENT;
     }
