diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java b/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java
index de201d9..555e647 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java
@@ -22,7 +22,6 @@
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.os.AsyncTask;
-import android.support.annotation.Nullable;
 
 import com.android.dialer.compat.BlockedNumbersSdkCompat;
 import com.android.dialer.compat.FilteredNumberCompat;
diff --git a/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java b/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java
index efcb505..f297961 100644
--- a/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java
@@ -22,10 +22,12 @@
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnShowListener;
 import android.os.Bundle;
+import android.view.View;
 
 import com.android.dialer.R;
+import com.android.dialer.filterednumber.BlockedNumbersMigrator.Listener;
 
 /**
  * Dialog fragment shown to users when they need to migrate to use
@@ -57,20 +59,43 @@
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         super.onCreateDialog(savedInstanceState);
-        return new AlertDialog.Builder(getActivity())
+        AlertDialog dialog = new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.migrate_blocked_numbers_dialog_title)
                 .setMessage(R.string.migrate_blocked_numbers_dialog_message)
-                .setPositiveButton(R.string.migrate_blocked_numbers_dialog_allow_button,
-                        newPositiveButtonOnClickListener())
+                .setPositiveButton(R.string.migrate_blocked_numbers_dialog_allow_button, null)
                 .setNegativeButton(R.string.migrate_blocked_numbers_dialog_cancel_button, null)
                 .create();
+        // The Dialog's buttons aren't available until show is called, so an OnShowListener
+        // is used to set the positive button callback.
+        dialog.setOnShowListener(new OnShowListener() {
+            @Override
+            public void onShow(DialogInterface dialog) {
+                final AlertDialog alertDialog = (AlertDialog) dialog;
+                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
+                        .setOnClickListener(newPositiveButtonOnClickListener(alertDialog));
+            }
+        });
+        return dialog;
     }
 
-    private DialogInterface.OnClickListener newPositiveButtonOnClickListener() {
-        return new OnClickListener() {
+    /*
+     * Creates a new View.OnClickListener to be used as the positive button in this dialog. The
+     * OnClickListener will grey out the dialog's positive and negative buttons while the migration
+     * is underway, and close the dialog once the migrate is complete.
+     */
+    private View.OnClickListener newPositiveButtonOnClickListener(final AlertDialog alertDialog) {
+        return new View.OnClickListener() {
             @Override
-            public void onClick(DialogInterface dialog, int which) {
-                mBlockedNumbersMigrator.migrate(mMigrationListener);
+            public void onClick(View v) {
+                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
+                alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
+                mBlockedNumbersMigrator.migrate(new Listener() {
+                    @Override
+                    public void onComplete() {
+                        alertDialog.dismiss();
+                        mMigrationListener.onComplete();
+                    }
+                });
             }
         };
     }
diff --git a/tests/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragmentInstrumentationTest.java b/tests/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragmentInstrumentationTest.java
index 16b6f3f..0bfa6bc 100644
--- a/tests/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragmentInstrumentationTest.java
+++ b/tests/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragmentInstrumentationTest.java
@@ -16,12 +16,9 @@
 
 package com.android.dialer.filterednumber;
 
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 import android.app.AlertDialog;
 import android.app.DialogFragment;
+import android.content.ContentResolver;
 import android.content.DialogInterface;
 import android.test.ActivityInstrumentationTestCase2;
 
@@ -40,9 +37,8 @@
 
     private static final String SHOW_TAG = "ShowTag";
 
-    @Mock private BlockedNumbersMigrator mBlockedNumbersMigrator;
+    private BlockedNumbersMigrator mBlockedNumbersMigrator;
     @Mock private Listener mListener;
-    private DialtactsActivity mActivity;
     private DialogFragment mMigrateDialogFragment;
 
     public MigrateBlockedNumbersDialogFragmentInstrumentationTest() {
@@ -53,13 +49,14 @@
     public void setUp() throws Exception {
         super.setUp();
         MockitoAnnotations.initMocks(this);
-        mActivity = getActivity();
+        mBlockedNumbersMigrator = new SynchronousBlockedNumbersMigrator(
+                getActivity().getContentResolver());
         mMigrateDialogFragment = MigrateBlockedNumbersDialogFragment
                 .newInstance(mBlockedNumbersMigrator, mListener);
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mMigrateDialogFragment.show(mActivity.getFragmentManager(), SHOW_TAG);
+                mMigrateDialogFragment.show(getActivity().getFragmentManager(), SHOW_TAG);
             }
         });
         getInstrumentation().waitForIdleSync();
@@ -70,7 +67,6 @@
     }
 
     public void testDialogPositiveButtonPress() {
-        when(mBlockedNumbersMigrator.migrate(mListener)).thenReturn(true);
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
@@ -81,6 +77,17 @@
         getInstrumentation().waitForIdleSync();
         // Dialog was dismissed
         assertNull(mMigrateDialogFragment.getDialog());
-        verify(mBlockedNumbersMigrator).migrate(mListener);
+    }
+
+    private static class SynchronousBlockedNumbersMigrator extends BlockedNumbersMigrator {
+        public SynchronousBlockedNumbersMigrator(ContentResolver contentResolver) {
+            super(contentResolver);
+        }
+
+        @Override
+        public boolean migrate(BlockedNumbersMigrator.Listener listener) {
+            listener.onComplete();
+            return true;
+        }
     }
 }
