diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index bc3e740..7ca305b 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -12210,6 +12210,7 @@
          *
          * <pre>
          * enabled                         (boolean)
+         * requires_targeting_p            (boolean)
          * max_squeeze_remeasure_attempts  (int)
          * </pre>
          * @see com.android.systemui.statusbar.policy.SmartReplyConstants
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index a444ff9..8961b76 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -479,6 +479,9 @@
     <!-- Smart replies in notifications: Whether smart replies in notifications are enabled. -->
     <bool name="config_smart_replies_in_notifications_enabled">true</bool>
 
+    <!-- Smart replies in notifications: Whether we disable the feature unless the app targets P -->
+    <bool name="config_smart_replies_in_notifications_requires_targeting_p">true</bool>
+
     <!-- Smart replies in notifications: Maximum number of times SmartReplyView will try to find a
          better (narrower) line-break for a double-line smart reply button. -->
     <integer name="config_smart_replies_in_notifications_max_squeeze_remeasure_attempts">3</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index 73c8795..cfd0e71 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -1196,7 +1196,9 @@
             return;
         }
 
-        boolean enableSmartReplies = mSmartReplyConstants.isEnabled();
+        boolean enableSmartReplies = (mSmartReplyConstants.isEnabled()
+                && (!mSmartReplyConstants.requiresTargetingP()
+                    || entry.targetSdk >= Build.VERSION_CODES.P));
 
         boolean hasRemoteInput = false;
         RemoteInput remoteInputWithChoices = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
index c5067a6..7b0b8004 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
@@ -33,13 +33,16 @@
     private static final String TAG = "SmartReplyConstants";
 
     private static final String KEY_ENABLED = "enabled";
+    private static final String KEY_REQUIRES_TARGETING_P = "requires_targeting_p";
     private static final String KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS =
             "max_squeeze_remeasure_attempts";
 
     private final boolean mDefaultEnabled;
+    private final boolean mDefaultRequiresP;
     private final int mDefaultMaxSqueezeRemeasureAttempts;
 
     private boolean mEnabled;
+    private boolean mRequiresTargetingP;
     private int mMaxSqueezeRemeasureAttempts;
 
     private final Context mContext;
@@ -52,6 +55,8 @@
         final Resources resources = mContext.getResources();
         mDefaultEnabled = resources.getBoolean(
                 R.bool.config_smart_replies_in_notifications_enabled);
+        mDefaultRequiresP = resources.getBoolean(
+                R.bool.config_smart_replies_in_notifications_requires_targeting_p);
         mDefaultMaxSqueezeRemeasureAttempts = resources.getInteger(
                 R.integer.config_smart_replies_in_notifications_max_squeeze_remeasure_attempts);
 
@@ -75,6 +80,7 @@
                 Log.e(TAG, "Bad smart reply constants", e);
             }
             mEnabled = mParser.getBoolean(KEY_ENABLED, mDefaultEnabled);
+            mRequiresTargetingP = mParser.getBoolean(KEY_REQUIRES_TARGETING_P, mDefaultRequiresP);
             mMaxSqueezeRemeasureAttempts = mParser.getInt(
                     KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS, mDefaultMaxSqueezeRemeasureAttempts);
         }
@@ -86,6 +92,14 @@
     }
 
     /**
+     * Returns whether smart replies in notifications should be disabled when the app targets a
+     * version of Android older than P.
+     */
+    public boolean requiresTargetingP() {
+        return mRequiresTargetingP;
+    }
+
+    /**
      * Returns the maximum number of times {@link SmartReplyView#onMeasure(int, int)} will try to
      * find a better (narrower) line-break for a double-line smart reply button.
      */
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
index 32a7cb9..aca7c9c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
@@ -74,6 +74,17 @@
     }
 
     @Test
+    public void testRequiresTargetingPConfig() {
+        overrideSetting("enabled=true,requires_targeting_p=false");
+        triggerConstantsOnChange();
+        assertEquals(false, mConstants.requiresTargetingP());
+
+        overrideSetting("enabled=true");
+        triggerConstantsOnChange();
+        assertEquals(true, mConstants.requiresTargetingP());
+    }
+
+    @Test
     public void testGetMaxSqueezeRemeasureAttemptsWithNoConfig() {
         assertTrue(mConstants.isEnabled());
         assertEquals(7, mConstants.getMaxSqueezeRemeasureAttempts());
