Updating settings to use system blocked numbers ui

+ After the user has migrated to the framework number blocking
solution, the 'Call blocking' setting needs to take them to the
system ui. The branching logic to determine which UI to open is added
in this CL.

Bug: 26664600
Change-Id: I2574f0665d3f0d3d92230e0210c69d1d10b60228
diff --git a/src/com/android/dialer/compat/FilteredNumberCompat.java b/src/com/android/dialer/compat/FilteredNumberCompat.java
index c74ff9d..2325047 100644
--- a/src/com/android/dialer/compat/FilteredNumberCompat.java
+++ b/src/com/android/dialer/compat/FilteredNumberCompat.java
@@ -22,12 +22,16 @@
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
 import android.net.Uri;
 import android.preference.PreferenceManager;
 import android.support.annotation.Nullable;
+import android.telecom.TelecomManager;
 import android.telephony.PhoneNumberUtils;
 
 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.FilteredNumberContract.FilteredNumber;
@@ -37,6 +41,7 @@
 import com.android.dialer.filterednumber.BlockNumberDialogFragment;
 import com.android.dialer.filterednumber.BlockNumberDialogFragment.Callback;
 import com.android.dialer.filterednumber.BlockedNumbersMigrator;
+import com.android.dialer.filterednumber.BlockedNumbersSettingsActivity;
 import com.android.dialer.filterednumber.MigrateBlockedNumbersDialogFragment;
 
 import java.util.ArrayList;
@@ -268,4 +273,18 @@
     private static boolean shouldShowMigrationDialog(boolean isBlocking) {
         return isBlocking && canUseNewFiltering() && !hasMigratedToNewBlocking();
     }
+
+    /**
+     * Creates the {@link Intent} which opens the blocked numbers management interface.
+     *
+     * @param context The {@link Context}.
+     * @return The intent.
+     */
+    public static Intent createManageBlockedNumbersIntent(Context context) {
+        if (canUseNewFiltering() && hasMigratedToNewBlocking()) {
+            return TelecomManagerUtil.createManageBlockedNumbersIntent(
+                    (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE));
+        }
+        return new Intent(context, BlockedNumbersSettingsActivity.class);
+    }
 }
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index a187157..bbcbd49 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -18,7 +18,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.UserManager;
 import android.preference.PreferenceManager;
@@ -29,12 +28,11 @@
 import android.widget.Toast;
 
 import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.SdkVersionOverride;
 import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.dialer.R;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.compat.SettingsCompat;
 import com.android.dialer.compat.UserManagerCompat;
-import com.android.dialer.filterednumber.BlockedNumbersSettingsActivity;
 
 import java.util.List;
 
@@ -99,7 +97,7 @@
         if (isPrimaryUser) {
             Header blockedCallsHeader = new Header();
             blockedCallsHeader.titleRes = R.string.manage_blocked_numbers_label;
-            blockedCallsHeader.intent = new Intent(this, BlockedNumbersSettingsActivity.class);
+            blockedCallsHeader.intent = FilteredNumberCompat.createManageBlockedNumbersIntent(this);
             target.add(blockedCallsHeader);
 
             if (TelephonyManagerCompat.isTtyModeSupported(telephonyManager)
diff --git a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
index a57e1c2..5ee2f28 100644
--- a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
+++ b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
@@ -20,14 +20,17 @@
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.when;
 
+import android.content.ComponentName;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.Intent;
 import android.content.SharedPreferences;
 import android.net.Uri;
 import android.provider.BlockedNumberContract.BlockedNumbers;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
 
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.dialer.DialerApplication;
@@ -35,6 +38,7 @@
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes;
+import com.android.dialer.filterednumber.BlockedNumbersSettingsActivity;
 
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -179,6 +183,50 @@
                 FilteredNumberCompat.newBlockNumberContentValues(NON_E164_NUMBER, null, null));
     }
 
+    public void testCreateManageBlockedNumbersIntent_NullContext() {
+        try {
+            FilteredNumberCompat.createManageBlockedNumbersIntent(null);
+            fail();
+        } catch (NullPointerException e) {}
+    }
+
+    public void testCreateManageBlockedNumbersIntent_M() {
+        if (CompatUtils.isNCompatible()) {
+            return;
+        }
+        assertEquals(new ComponentName(getContext(), BlockedNumbersSettingsActivity.class),
+                FilteredNumberCompat.createManageBlockedNumbersIntent(getContext()).getComponent());
+    }
+
+    public void testCreateManageBlockedNumbersIntent_N_Disabled_NotMigrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        FilteredNumberCompat.setIsEnabledForTest(false);
+        assertEquals(new ComponentName(getContext(), BlockedNumbersSettingsActivity.class),
+                FilteredNumberCompat.createManageBlockedNumbersIntent(getContext()).getComponent());
+    }
+
+    public void testCreateManageBlockedNumbersIntent_N_Enabled_NotMigrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        assertEquals(new ComponentName(getContext(), BlockedNumbersSettingsActivity.class),
+                FilteredNumberCompat.createManageBlockedNumbersIntent(getContext()).getComponent());
+    }
+
+    public void testCreateManageBlockedNumbersIntent_N_Enabled_Migrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        when(mSharedPreferences
+                .getBoolean(FilteredNumberCompat.HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false))
+                .thenReturn(true);
+        assertFalse(new ComponentName(getContext(), BlockedNumbersSettingsActivity.class)
+                .equals(FilteredNumberCompat.createManageBlockedNumbersIntent(getContext())
+                        .getComponent()));
+    }
+
     private ContentValues newExpectedContentValuesM(String number, String e164Number,
             String countryIso) {
         ContentValues contentValues = new ContentValues();