diff --git a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
index 5517918..987615f 100644
--- a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
+++ b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
@@ -206,11 +206,28 @@
   }
 
   private void showSpamBlockingPromoDialog() {
-    if (spamBlockingPromoHelper.shouldShowSpamBlockingPromo()) {
-      spamBlockingPromoHelper.showSpamBlockingPromoDialog(
-          fragmentManager,
-          success -> spamBlockingPromoHelper.showModifySettingOnCompleteSnackbar(rootView, success),
-          null /* onDissmissListener */);
+    if (!spamBlockingPromoHelper.shouldShowSpamBlockingPromo()) {
+      return;
     }
+
+    Logger.get(context).logImpression(DialerImpression.Type.SPAM_BLOCKING_CALL_LOG_PROMO_SHOWN);
+    spamBlockingPromoHelper.showSpamBlockingPromoDialog(
+        fragmentManager,
+        () -> {
+          Logger.get(context)
+              .logImpression(DialerImpression.Type.SPAM_BLOCKING_ENABLED_THROUGH_CALL_LOG_PROMO);
+          spamSettings.modifySpamBlockingSetting(
+              true,
+              success -> {
+                if (!success) {
+                  Logger.get(context)
+                      .logImpression(
+                          DialerImpression.Type
+                              .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_CALL_LOG_PROMO);
+                }
+                spamBlockingPromoHelper.showModifySettingOnCompleteSnackbar(rootView, success);
+              });
+        },
+        null /* onDismissListener */);
   }
 }
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
index 891ac44..6a8cde8 100644
--- a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
+++ b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
@@ -34,14 +34,14 @@
 import com.android.dialer.notification.DialerNotificationManager;
 import com.android.dialer.notification.NotificationChannelId;
 import com.android.dialer.spam.SpamSettings;
-import com.android.dialer.spam.SpamSettings.ModifySettingListener;
+import com.android.dialer.spam.promo.SpamBlockingPromoDialogFragment.OnEnableListener;
 
 /** Helper class for showing spam blocking on-boarding promotions. */
 public class SpamBlockingPromoHelper {
 
   static final String SPAM_BLOCKING_PROMO_PERIOD_MILLIS = "spam_blocking_promo_period_millis";
   static final String SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS = "spam_blocking_promo_last_show_millis";
-  static final String ENABLE_SPAM_BLOCKING_PROMO = "enable_spam_blocking_promo";
+  public static final String ENABLE_SPAM_BLOCKING_PROMO = "enable_spam_blocking_promo";
 
   private final Context context;
   private final SpamSettings spamSettings;
@@ -81,33 +81,15 @@
    * Shows a spam blocking promo dialog.
    *
    * @param fragmentManager the fragment manager to show the dialog.
-   * @param modifySettingListener the listener called after spam blocking setting is modified.
+   * @param onEnableListener the listener called when enable button is clicked.
    * @param onDismissListener the listener called when the dialog is dismissed.
    */
   public void showSpamBlockingPromoDialog(
       FragmentManager fragmentManager,
-      ModifySettingListener modifySettingListener,
+      OnEnableListener onEnableListener,
       OnDismissListener onDismissListener) {
     updateLastShowSpamTimestamp();
-    Logger.get(context).logImpression(DialerImpression.Type.SPAM_BLOCKING_CALL_LOG_PROMO_SHOWN);
-    SpamBlockingPromoDialogFragment.newInstance(
-            () -> {
-              Logger.get(context)
-                  .logImpression(
-                      DialerImpression.Type.SPAM_BLOCKING_ENABLED_THROUGH_CALL_LOG_PROMO);
-              spamSettings.modifySpamBlockingSetting(
-                  true,
-                  success -> {
-                    if (!success) {
-                      Logger.get(context)
-                          .logImpression(
-                              DialerImpression.Type
-                                  .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_CALL_LOG_PROMO);
-                    }
-                    modifySettingListener.onComplete(success);
-                  });
-            },
-            onDismissListener)
+    SpamBlockingPromoDialogFragment.newInstance(onEnableListener, onDismissListener)
         .show(fragmentManager, SpamBlockingPromoDialogFragment.SPAM_BLOCKING_PROMO_DIALOG_TAG);
   }
 
diff --git a/java/com/android/incallui/spam/SpamNotificationActivity.java b/java/com/android/incallui/spam/SpamNotificationActivity.java
index c04a071..e10dea3 100644
--- a/java/com/android/incallui/spam/SpamNotificationActivity.java
+++ b/java/com/android/incallui/spam/SpamNotificationActivity.java
@@ -43,6 +43,7 @@
 import com.android.dialer.notification.DialerNotificationManager;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.spam.SpamComponent;
+import com.android.dialer.spam.SpamSettings;
 import com.android.dialer.spam.promo.SpamBlockingPromoHelper;
 import com.android.incallui.call.DialerCall;
 
@@ -86,6 +87,8 @@
         }
       };
   private FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler;
+  private SpamSettings spamSettings;
+  private SpamBlockingPromoHelper spamBlockingPromoHelper;
 
   /**
    * Creates an intent to start this activity.
@@ -160,6 +163,8 @@
     super.onCreate(savedInstanceState);
     setFinishOnTouchOutside(true);
     filteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(this);
+    spamSettings = SpamComponent.get(this).spamSettings();
+    spamBlockingPromoHelper = new SpamBlockingPromoHelper(getApplicationContext(), spamSettings);
     cancelNotification();
   }
 
@@ -417,7 +422,7 @@
                   dismiss();
                   spamNotificationActivity.maybeShowBlockReportSpamDialog(
                       number, contactLookupResultType);
-                  spamNotificationActivity.showSpamBlockingPromoDialog();
+                  spamNotificationActivity.maybeShowSpamBlockingPromoAndFinish();
                 }
               })
           .setNegativeButton(
@@ -515,23 +520,43 @@
                   dismiss();
                   spamNotificationActivity.maybeShowBlockReportSpamDialog(
                       number, contactLookupResultType);
+                  spamNotificationActivity.maybeShowSpamBlockingPromoAndFinish();
                 }
               })
           .create();
     }
   }
 
-  private void showSpamBlockingPromoDialog() {
-    SpamBlockingPromoHelper spamBlockingPromoHelper =
-        new SpamBlockingPromoHelper(
-            getApplicationContext(), SpamComponent.get(this).spamSettings());
+  private void maybeShowSpamBlockingPromoAndFinish() {
     if (!spamBlockingPromoHelper.shouldShowSpamBlockingPromo()) {
       finish();
-    } else {
-      spamBlockingPromoHelper.showSpamBlockingPromoDialog(
-          getFragmentManager(),
-          success -> spamBlockingPromoHelper.showModifySettingOnCompleteToast(success),
-          dialog -> finish());
+      return;
     }
+    Logger.get(this)
+        .logImpression(DialerImpression.Type.SPAM_BLOCKING_AFTER_CALL_NOTIFICATION_PROMO_SHOWN);
+    showSpamBlockingPromoDialog();
+  }
+
+  private void showSpamBlockingPromoDialog() {
+    spamBlockingPromoHelper.showSpamBlockingPromoDialog(
+        getFragmentManager(),
+        () -> {
+          Logger.get(this)
+              .logImpression(
+                  DialerImpression.Type
+                      .SPAM_BLOCKING_ENABLED_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
+          spamSettings.modifySpamBlockingSetting(
+              true,
+              success -> {
+                if (!success) {
+                  Logger.get(this)
+                      .logImpression(
+                          DialerImpression.Type
+                              .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
+                }
+                spamBlockingPromoHelper.showModifySettingOnCompleteToast(success);
+              });
+        },
+        dialog -> finish());
   }
 }
