Merge "Update number blocking strings"
diff --git a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
index 7af1a13..52ef49a 100644
--- a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
+++ b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
@@ -158,7 +158,13 @@
                 new Listener() {
                     @Override
                     protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
-                        if (cursor == null || cursor.getCount() != 1) {
+                        /*
+                         * In the frameworking blocking, numbers can be blocked in both e164 format
+                         * and not, resulting in multiple rows being returned for this query. For
+                         * example, both '16502530000' and '6502530000' can exist at the same time
+                         * and will be returned by this query.
+                         */
+                        if (cursor == null || cursor.getCount() == 0) {
                             listener.onCheckComplete(null);
                             return;
                         }
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
index 38615cc..87ba8be 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
@@ -127,16 +127,21 @@
             getListView().findViewById(R.id.add_number_linear_layout).setVisibility(View.GONE);
             getListView().findViewById(R.id.add_number_linear_layout).setOnClickListener(null);
             mBlockedNumberListDivider.setVisibility(View.INVISIBLE);
-        }
 
-        FilteredNumbersUtil.checkForSendToVoicemailContact(
-            getActivity(), new CheckForSendToVoicemailContactListener() {
-                @Override
-                public void onComplete(boolean hasSendToVoicemailContact) {
-                    final int visibility = hasSendToVoicemailContact ? View.VISIBLE : View.GONE;
-                    mImportSettings.setVisibility(visibility);
-                }
-            });
+            mImportSettings.setSystemUiVisibility(View.GONE);
+            getListView().findViewById(R.id.import_button).setOnClickListener(null);
+            getListView().findViewById(R.id.view_numbers_button).setOnClickListener(null);
+        } else {
+            FilteredNumbersUtil.checkForSendToVoicemailContact(
+                    getActivity(), new CheckForSendToVoicemailContactListener() {
+                        @Override
+                        public void onComplete(boolean hasSendToVoicemailContact) {
+                            final int visibility =
+                                    hasSendToVoicemailContact ? View.VISIBLE : View.GONE;
+                            mImportSettings.setVisibility(visibility);
+                        }
+                    });
+        }
 
         if (FilteredNumbersUtil.hasRecentEmergencyCall(getContext())) {
             mBlockedNumbersDisabledForEmergency.setVisibility(View.VISIBLE);
diff --git a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
index e3870de..498b10a 100644
--- a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
+++ b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
@@ -33,6 +33,7 @@
 
 import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.R;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
@@ -298,6 +299,10 @@
     }
 
     public static void maybeNotifyCallBlockingDisabled(final Context context) {
+        // The Dialer is not responsible for this notification after migrating
+        if (FilteredNumberCompat.useNewFiltering()) {
+            return;
+        }
         // Skip if the user has already received a notification for the most recent emergency call.
         if (PreferenceManager.getDefaultSharedPreferences(context)
                 .getBoolean(NOTIFIED_CALL_BLOCKING_DISABLED_BY_EMERGENCY_CALL_PREF_KEY, false)) {
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index d4d294e..7d6fe78 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -428,6 +428,11 @@
     }
 
     @Override
+    public void setSuccess() {
+        mStateText.setText(null);
+    }
+
+    @Override
     public void setIsFetchingContent() {
         disableUiElements();
         mStateText.setText(getString(R.string.voicemail_fetching_content));
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 5924fb4..e224ddc 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -84,6 +84,7 @@
         void onPlaybackStopped();
         void onSpeakerphoneOn(boolean on);
         void setClipPosition(int clipPositionInMillis, int clipLengthInMillis);
+        void setSuccess();
         void setFetchContentTimeout();
         void setIsFetchingContent();
         void onVoicemailArchiveSucceded(Uri voicemailUri);
@@ -606,6 +607,7 @@
         Log.d(TAG, "onPrepared: mPosition=" + mPosition);
         mView.setClipPosition(mPosition, mDuration.get());
         mView.enableUiElements();
+        mView.setSuccess();
         mMediaPlayer.seekTo(mPosition);
 
         if (mIsPlaying) {
diff --git a/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java b/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
index 28fdda0..625f3fd 100644
--- a/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
+++ b/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
@@ -47,6 +47,7 @@
     private static final String NUMBER = "6502530000";
     private static final String COUNTRY_ISO = "US";
     private static final Integer ID = 1;
+    private static final Integer ID2 = 2;
     private static final Uri BLOCKED_NUMBER_URI_N = CompatUtils.isNCompatible() ?
             Uri.withAppendedPath(BlockedNumberContract.AUTHORITY_URI, "blocked") : null;
     private static final Uri BLOCKED_NUMBER_URI_M =
@@ -177,6 +178,26 @@
         mContentProvider.verify();
     }
 
+    public void testIsBlockedNumber_MultipleResults() throws Throwable {
+        if (CompatUtils.isNCompatible()) {
+            newIsBlockedNumberExpectedQuery().returnRow(ID).returnRow(ID2);
+        } else {
+            newIsBlockedNumberExpectedQuery().returnRow(ID, FilteredNumberTypes.BLOCKED_NUMBER)
+                    .returnRow(ID2, FilteredNumberTypes.BLOCKED_NUMBER);
+        }
+        final CheckBlockedListener listener = new CheckBlockedListener();
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                new FilteredNumberAsyncQueryHandler(mContentResolver)
+                        .isBlockedNumber(listener, NUMBER, COUNTRY_ISO);
+            }
+        });
+        // When there are multiple matches, the first is returned
+        assertEquals(ID, listener.waitForCallback());
+        mContentProvider.verify();
+    }
+
     public void testBlockNumber_Disabled() throws Throwable {
         if (!CompatUtils.isNCompatible()) {
             return;
diff --git a/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
index d2e7f0a..d496b18 100644
--- a/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
+++ b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
@@ -15,12 +15,20 @@
  */
 package com.android.dialer.filterednumber;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import android.content.Context;
 import android.preference.PreferenceManager;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.test.mocks.ContactsMockContext;
 import com.android.contacts.common.test.mocks.MockContentProvider.Query;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.database.FilteredNumberContract;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
@@ -31,10 +39,10 @@
     private static final String COUNTRY_ISO = "US";
 
     // Wed Nov 11 2015 15:00:00
-    private static final long EARLIER_TIME = 1447282800000l;
+    private static final long EARLIER_TIME = 1447282800000L;
 
     // Wed Nov 11 2015 15:01:40
-    private static final long LATER_TIME = 1447282900000l;
+    private static final long LATER_TIME = 1447282900000L;
 
     private static final String[] FILTERED_NUMBER_PROJECTION = new String[] {
             FilteredNumberColumns.CREATION_TIME };
@@ -98,6 +106,18 @@
                 COUNTRY_ISO, 0));
     }
 
+    public void testMaybeNotifyCallBlockingDisabled_Migrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        FilteredNumberCompat.setIsEnabledForTest(true);
+        FilteredNumberCompat.setHasMigratedToNewBlocking(true);
+        Context mockContext = mock(Context.class);
+
+        FilteredNumbersUtil.maybeNotifyCallBlockingDisabled(mockContext);
+        verifyZeroInteractions(mockContext);
+    }
+
     private void setupShouldBlockVoicemailQuery(long creationTimeMs) {
         Query query = mContext.getContactsProvider().expectQuery(FilteredNumber.CONTENT_URI)
                 .withProjection(FILTERED_NUMBER_PROJECTION)