summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/dialer/compat/FilteredNumberCompat.java57
-rw-r--r--tests/src/com/android/dialer/compat/FilteredNumberCompatInstrumentationTest.java92
2 files changed, 136 insertions, 13 deletions
diff --git a/src/com/android/dialer/compat/FilteredNumberCompat.java b/src/com/android/dialer/compat/FilteredNumberCompat.java
index 532cec5ac..91563dc0d 100644
--- a/src/com/android/dialer/compat/FilteredNumberCompat.java
+++ b/src/com/android/dialer/compat/FilteredNumberCompat.java
@@ -30,11 +30,14 @@ import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.telecom.TelecomManager;
import android.telephony.PhoneNumberUtils;
+import android.util.Log;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.compat.TelecomManagerUtil;
import com.android.contacts.common.testing.NeededForTesting;
import com.android.dialer.DialerApplication;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
@@ -45,7 +48,6 @@ import com.android.dialer.filterednumber.BlockedNumbersMigrator;
import com.android.dialer.filterednumber.BlockedNumbersSettingsActivity;
import com.android.dialer.filterednumber.MigrateBlockedNumbersDialogFragment;
import com.android.dialerbind.ObjectFactory;
-import com.android.incallui.Log;
import java.util.ArrayList;
import java.util.List;
@@ -257,18 +259,10 @@ public class FilteredNumberCompat {
if (shouldShowMigrationDialog(blockId == null)) {
Log.i(TAG, "showBlockNumberDialogFlow - showing migration dialog");
MigrateBlockedNumbersDialogFragment
- .newInstance(new BlockedNumbersMigrator(contentResolver),
- new BlockedNumbersMigrator.Listener() {
- @Override
- public void onComplete() {
- Log.i(TAG, "showBlockNumberDialogFlow - listener showing block "
- + "number dialog");
- BlockNumberDialogFragment
- .show(null, number, countryIso, displayNumber,
- parentViewId,
- fragmentManager, callback);
- }
- }).show(fragmentManager, "MigrateBlockedNumbers");
+ .newInstance(new BlockedNumbersMigrator(contentResolver), newMigrationListener(
+ DialerApplication.getContext().getContentResolver(), number, countryIso,
+ displayNumber, parentViewId, fragmentManager, callback))
+ .show(fragmentManager, "MigrateBlockedNumbers");
return;
}
Log.i(TAG, "showBlockNumberDialogFlow - showing block number dialog");
@@ -281,6 +275,43 @@ public class FilteredNumberCompat {
return isBlocking && canUseNewFiltering() && !hasMigratedToNewBlocking();
}
+ private static BlockedNumbersMigrator.Listener newMigrationListener(
+ final ContentResolver contentResolver, final String number, final String countryIso,
+ final String displayNumber, final Integer parentViewId,
+ final FragmentManager fragmentManager, @Nullable final Callback callback) {
+ return new BlockedNumbersMigrator.Listener() {
+ @Override
+ public void onComplete() {
+ Log.i(TAG, "showBlockNumberDialogFlow - listener showing block number dialog");
+ if (!hasMigratedToNewBlocking()) {
+ Log.i(TAG, "showBlockNumberDialogFlow - migration failed");
+ return;
+ }
+ /*
+ * Edge case to cover here: if the user initiated the migration workflow with a
+ * number that's already blocked in the framework, don't show the block number
+ * dialog. Doing so would allow them to block the same number twice, causing a
+ * crash.
+ */
+ new FilteredNumberAsyncQueryHandler(contentResolver).isBlockedNumber(
+ new OnCheckBlockedListener() {
+ @Override
+ public void onCheckComplete(Integer id) {
+ if (id != null) {
+ Log.i(TAG,
+ "showBlockNumberDialogFlow - number already blocked");
+ return;
+ }
+ Log.i(TAG, "showBlockNumberDialogFlow - need to block number");
+ BlockNumberDialogFragment
+ .show(null, number, countryIso, displayNumber, parentViewId,
+ fragmentManager, callback);
+ }
+ }, number, countryIso);
+ }
+ };
+ }
+
/**
* Creates the {@link Intent} which opens the blocked numbers management interface.
*
diff --git a/tests/src/com/android/dialer/compat/FilteredNumberCompatInstrumentationTest.java b/tests/src/com/android/dialer/compat/FilteredNumberCompatInstrumentationTest.java
new file mode 100644
index 000000000..8ceb25046
--- /dev/null
+++ b/tests/src/com/android/dialer/compat/FilteredNumberCompatInstrumentationTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.compat;
+
+import android.app.AlertDialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.DialogInterface;
+import android.provider.BlockedNumberContract.BlockedNumbers;
+import android.test.ActivityInstrumentationTestCase2;
+
+import com.android.contacts.common.compat.CompatUtils;
+import com.android.dialer.DialtactsActivity;
+import com.android.dialer.R;
+
+/**
+ * UI tests for FilteredNumberCompat
+ */
+public class FilteredNumberCompatInstrumentationTest extends
+ ActivityInstrumentationTestCase2<DialtactsActivity> {
+
+ private static final String E164_NUMBER = "+16502530000";
+ private static final String NUMBER = "6502530000";
+ private static final String COUNTRY_ISO = "US";
+
+ private ContentResolver mContentResolver;
+ private FragmentManager mFragmentManager;
+
+ public FilteredNumberCompatInstrumentationTest() {
+ super(DialtactsActivity.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ mContentResolver = getActivity().getContentResolver();
+ mFragmentManager = getActivity().getFragmentManager();
+ mContentResolver.delete(BlockedNumbersSdkCompat.CONTENT_URI,
+ BlockedNumbers.COLUMN_ORIGINAL_NUMBER + " = ?", new String[]{NUMBER});
+ }
+
+ public void testShowBlockNumberDialogFlow_AlreadyBlocked() throws InterruptedException {
+ if (!CompatUtils.isNCompatible()) {
+ return;
+ }
+
+ ContentValues values = new ContentValues();
+ values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, NUMBER);
+ mContentResolver.insert(BlockedNumbers.CONTENT_URI, values);
+
+ FilteredNumberCompat.setHasMigratedToNewBlocking(false);
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ FilteredNumberCompat
+ .showBlockNumberDialogFlow(mContentResolver, null, NUMBER, COUNTRY_ISO,
+ E164_NUMBER, R.id.floating_action_button_container,
+ mFragmentManager, null);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ final DialogFragment migrateDialogFragment = (DialogFragment) mFragmentManager
+ .findFragmentByTag("MigrateBlockedNumbers");
+ assertTrue(migrateDialogFragment.getDialog().isShowing());
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ ((AlertDialog) migrateDialogFragment.getDialog())
+ .getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+ assertNull(mFragmentManager.findFragmentByTag("BlockNumberDialog"));
+ }
+}