diff --git a/src/com/android/dialer/compat/FilteredNumberCompat.java b/src/com/android/dialer/compat/FilteredNumberCompat.java
index c70df71..63a2a32 100644
--- a/src/com/android/dialer/compat/FilteredNumberCompat.java
+++ b/src/com/android/dialer/compat/FilteredNumberCompat.java
@@ -99,15 +99,25 @@
     }
 
     /**
-     * @return {@code true} if the new filtering is enabled, {@code false} otherwise.
+     * @return {@code true} if the current SDK version supports using new filtering, {@code false}
+     * otherwise.
      */
-    public static boolean useNewFiltering() {
+    public static boolean canUseNewFiltering() {
         if (isEnabledForTest != null) {
             return CompatUtils.isNCompatible() && isEnabledForTest;
         }
         return CompatUtils.isNCompatible() && isNewFilteringEnabled;
     }
 
+    /**
+     * @return {@code true} if the new filtering should be used, i.e. it's enabled and any necessary
+     * migration has been performed, {@code false} otherwise.
+     */
+    public static boolean useNewFiltering() {
+        // TODO(maxwelb): Add shared preference for when the Dialer blocked list has been migrated
+        return canUseNewFiltering();
+    }
+
     @NeededForTesting
     public static void setIsEnabledForTest(Boolean isEnabled) {
         isEnabledForTest = isEnabled;
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
index a878660..38615cc 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
@@ -32,8 +32,10 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.R;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.database.FilteredNumberContract;
 import com.android.dialer.filterednumber.FilteredNumbersUtil.CheckForSendToVoicemailContactListener;
 import com.android.dialer.filterednumber.FilteredNumbersUtil.ImportSendToVoicemailContactsListener;
@@ -83,7 +85,7 @@
         mBlockedNumbersDisabledForEmergency =
                 getListView().findViewById(R.id.blocked_numbers_disabled_for_emergency);
         mBlockedNumberListDivider = getActivity().findViewById(R.id.blocked_number_list_divider);
-        getListView().findViewById(R.id.import_button).setOnClickListener(this);;
+        getListView().findViewById(R.id.import_button).setOnClickListener(this);
         getListView().findViewById(R.id.view_numbers_button).setOnClickListener(this);
         getListView().findViewById(R.id.add_number_linear_layout).setOnClickListener(this);
 
@@ -118,6 +120,15 @@
         actionBar.setDisplayShowTitleEnabled(true);
         actionBar.setTitle(R.string.manage_blocked_numbers_label);
 
+        // If the device can use the framework blocking solution, users should not be able to add
+        // new blocked numbers from the Blocked Management UI. They will be shown a promo card
+        // asking them to migrate to new blocking instead.
+        if (FilteredNumberCompat.canUseNewFiltering()) {
+            getListView().findViewById(R.id.add_number_linear_layout).setVisibility(View.GONE);
+            getListView().findViewById(R.id.add_number_linear_layout).setOnClickListener(null);
+            mBlockedNumberListDivider.setVisibility(View.INVISIBLE);
+        }
+
         FilteredNumbersUtil.checkForSendToVoicemailContact(
             getActivity(), new CheckForSendToVoicemailContactListener() {
                 @Override
@@ -152,16 +163,15 @@
         };
         final String selection = FilteredNumberContract.FilteredNumberColumns.TYPE
                 + "=" + FilteredNumberContract.FilteredNumberTypes.BLOCKED_NUMBER;
-        final CursorLoader cursorLoader = new CursorLoader(
+        return new CursorLoader(
                 getContext(), FilteredNumberContract.FilteredNumber.CONTENT_URI, projection,
                 selection, null, null);
-        return cursorLoader;
     }
 
     @Override
     public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
         mAdapter.swapCursor(data);
-        if (data.getCount() == 0) {
+        if (FilteredNumberCompat.canUseNewFiltering() || data.getCount() == 0) {
             mBlockedNumberListDivider.setVisibility(View.INVISIBLE);
         } else {
             mBlockedNumberListDivider.setVisibility(View.VISIBLE);
