Keeping migration dialog up while migration in progress
+ This CL ensures that while the migration work is in progress, the
MigrateDialogFragment remains visible, with its buttons greyed out.
Bug: 26664600
Change-Id: Ied32d05fac46b700f14aee06d383fd2db2fa7913
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;
+ }
}
}