From b1e450864849436c7c7708ceca5c8f4142492c68 Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Tue, 15 Mar 2016 15:17:20 -0700 Subject: 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 --- .../filterednumber/BlockedNumbersMigrator.java | 1 - .../MigrateBlockedNumbersDialogFragment.java | 41 +++++++++++++++++----- ...edNumbersDialogFragmentInstrumentationTest.java | 27 ++++++++------ 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java b/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java index de201d98a..555e647bc 100644 --- a/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java +++ b/src/com/android/dialer/filterednumber/BlockedNumbersMigrator.java @@ -22,7 +22,6 @@ import android.content.ContentResolver; 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 efcb50591..f29796125 100644 --- a/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java +++ b/src/com/android/dialer/filterednumber/MigrateBlockedNumbersDialogFragment.java @@ -22,10 +22,12 @@ import android.app.AlertDialog; 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 @@ public class MigrateBlockedNumbersDialogFragment extends DialogFragment { @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 16b6f3fac..0bfa6bcb2 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 @@ public class MigrateBlockedNumbersDialogFragmentInstrumentationTest extends 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 class MigrateBlockedNumbersDialogFragmentInstrumentationTest extends 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 class MigrateBlockedNumbersDialogFragmentInstrumentationTest extends } public void testDialogPositiveButtonPress() { - when(mBlockedNumbersMigrator.migrate(mListener)).thenReturn(true); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { @@ -81,6 +77,17 @@ public class MigrateBlockedNumbersDialogFragmentInstrumentationTest extends 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; + } } } -- cgit v1.2.3