17fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell/* 27fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * Copyright (C) 2016 The Android Open Source Project 37fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * 47fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * Licensed under the Apache License, Version 2.0 (the "License"); 57fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * you may not use this file except in compliance with the License. 67fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * You may obtain a copy of the License at 77fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * 87fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * http://www.apache.org/licenses/LICENSE-2.0 97fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * 107fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * Unless required by applicable law or agreed to in writing, software 117fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * distributed under the License is distributed on an "AS IS" BASIS, 127fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * See the License for the specific language governing permissions and 147fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell * limitations under the License. 157fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell */ 167fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 177fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellpackage com.android.dialer.database; 187fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 19f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwellimport android.content.ContentUris; 200c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwellimport android.content.ContentValues; 217fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport android.net.Uri; 2260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwellimport android.provider.BlockedNumberContract; 2360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwellimport android.provider.BlockedNumberContract.BlockedNumbers; 247fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport android.test.InstrumentationTestCase; 257fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport android.test.mock.MockContentResolver; 2660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwellimport android.test.suitebuilder.annotation.SmallTest; 277fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 2860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwellimport com.android.contacts.common.compat.CompatUtils; 297fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.contacts.common.test.mocks.MockContentProvider; 307fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.contacts.common.test.mocks.MockContentProvider.Query; 3160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwellimport com.android.dialer.compat.FilteredNumberCompat; 320c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnBlockNumberListener; 337fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener; 347fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener; 35f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnUnblockNumberListener; 367fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns; 370c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwellimport com.android.dialer.database.FilteredNumberContract.FilteredNumberSources; 387fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes; 397fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 407fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport java.util.concurrent.CountDownLatch; 417fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellimport java.util.concurrent.TimeUnit; 427fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 4360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell@SmallTest 447fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwellpublic class FilteredNumberAsyncQueryHandlerTest extends InstrumentationTestCase { 457fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 467fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private static final String E164_NUMBER = "+16502530000"; 477fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private static final String NUMBER = "6502530000"; 487fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private static final String COUNTRY_ISO = "US"; 497fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private static final Integer ID = 1; 50fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell private static final Integer ID2 = 2; 5160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private static final Uri BLOCKED_NUMBER_URI_N = CompatUtils.isNCompatible() ? 5260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell Uri.withAppendedPath(BlockedNumberContract.AUTHORITY_URI, "blocked") : null; 5360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private static final Uri BLOCKED_NUMBER_URI_M = 547fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell Uri.withAppendedPath(FilteredNumberContract.AUTHORITY_URI, "filtered_numbers_table"); 5560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private static final Uri BLOCKED_NUMBER_URI = CompatUtils.isNCompatible() ? BLOCKED_NUMBER_URI_N 5660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell : BLOCKED_NUMBER_URI_M; 57f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell private static final Uri BLOCKED_NUMBER_URI_WITH_ID = 58f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell ContentUris.withAppendedId(BLOCKED_NUMBER_URI, ID); 590c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell private static final Uri EXPECTED_URI = Uri.fromParts("android", "google", "dialer"); 607fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 617fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private final MockContentResolver mContentResolver = new MockContentResolver(); 627fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private final MockContentProvider mContentProvider = new MockContentProvider(); 637fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 647fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 657fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void setUp() throws Exception { 667fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell super.setUp(); 6760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell FilteredNumberCompat.setIsEnabledForTest(true); 6860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (CompatUtils.isNCompatible()) { 6960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell mContentResolver.addProvider(BlockedNumberContract.AUTHORITY, mContentProvider); 7060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } else { 7160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell mContentResolver.addProvider(FilteredNumberContract.AUTHORITY, mContentProvider); 7260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 737fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 747fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 7560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void testHasBlockedNumbers_Disabled() throws Throwable { 7660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (!CompatUtils.isNCompatible()) { 7760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return; 7860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 7960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell FilteredNumberCompat.setIsEnabledForTest(false); 8060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final MockContentResolver resolver = new MockContentResolver(); 8160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell MockContentProvider disabledProvider = new MockContentProvider(); 8260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell resolver.addProvider(FilteredNumberContract.AUTHORITY, disabledProvider); 837fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 8460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell disabledProvider.expectQuery(BLOCKED_NUMBER_URI_M).withProjection(FilteredNumberColumns._ID) 8560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(FilteredNumberColumns.TYPE + "=" 8660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell + FilteredNumberTypes.BLOCKED_NUMBER, null).returnRow(ID); 8760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final HasBlockedNumbersListener listener = new HasBlockedNumbersListener(); 887fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell runTestOnUiThread(new Runnable() { 897fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 907fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void run() { 9160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell new FilteredNumberAsyncQueryHandler(resolver).hasBlockedNumbers(listener); 927fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 937fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell }); 9460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertTrue(listener.waitForCallback()); 9560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell disabledProvider.verify(); 967fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 977fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 987fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void testHasBlockedNumbers_NoResults() throws Throwable { 9960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell newHasBlockedNumbersExpectedQuery().returnEmptyCursor(); 1007fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell final HasBlockedNumbersListener listener = new HasBlockedNumbersListener(); 1017fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell runTestOnUiThread(new Runnable() { 1027fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 1037fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void run() { 1047fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).hasBlockedNumbers(listener); 1057fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 1067fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell }); 1077fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell assertFalse(listener.waitForCallback()); 1087fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell mContentProvider.verify(); 1097fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 1107fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 1117fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void testHasBlockedNumbers() throws Throwable { 11260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell newHasBlockedNumbersExpectedQuery().returnRow(ID); 1137fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell final HasBlockedNumbersListener listener = new HasBlockedNumbersListener(); 1147fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell runTestOnUiThread(new Runnable() { 1157fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 1167fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void run() { 1177fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).hasBlockedNumbers(listener); 1187fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 1197fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell }); 1207fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell assertTrue(listener.waitForCallback()); 1217fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell mContentProvider.verify(); 1227fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 1237fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 12460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void testIsBlockedNumber_Disabled() throws Throwable { 12560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (!CompatUtils.isNCompatible()) { 12660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return; 12760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 12860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell FilteredNumberCompat.setIsEnabledForTest(false); 12960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final MockContentResolver resolver = new MockContentResolver(); 13060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell MockContentProvider disabledProvider = new MockContentProvider(); 13160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell resolver.addProvider(FilteredNumberContract.AUTHORITY, disabledProvider); 13260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell disabledProvider.expectQuery(BLOCKED_NUMBER_URI_M) 1337fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell .withProjection(FilteredNumberColumns._ID, FilteredNumberColumns.TYPE) 13460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(FilteredNumberColumns.NORMALIZED_NUMBER + " = ?", E164_NUMBER) 13560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .returnRow(ID, FilteredNumberTypes.BLOCKED_NUMBER); 13660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final CheckBlockedListener listener = new CheckBlockedListener(); 13760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell runTestOnUiThread(new Runnable() { 13860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell @Override 13960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void run() { 14060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell new FilteredNumberAsyncQueryHandler(resolver) 14160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .isBlockedNumber(listener, NUMBER, COUNTRY_ISO); 14260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 14360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell }); 14460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertEquals(ID, listener.waitForCallback()); 14560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell mContentProvider.verify(); 1467fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 1477fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 14860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void testIsBlockedNumber_NoResults() throws Throwable { 14960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell newIsBlockedNumberExpectedQuery().returnEmptyCursor(); 15060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final CheckBlockedListener listener = new CheckBlockedListener(); 15160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 15260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell runTestOnUiThread(new Runnable() { 15360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell @Override 15460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void run() { 15560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver) 15660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .isBlockedNumber(listener, NUMBER, COUNTRY_ISO); 15760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 15860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell }); 15960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertNull(listener.waitForCallback()); 16060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell mContentProvider.verify(); 16160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 16260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 16360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void testIsBlockedNumber() throws Throwable { 16460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (CompatUtils.isNCompatible()) { 16560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell newIsBlockedNumberExpectedQuery().returnRow(ID); 16660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } else { 16760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell newIsBlockedNumberExpectedQuery().returnRow(ID, FilteredNumberTypes.BLOCKED_NUMBER); 16860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 16960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final CheckBlockedListener listener = new CheckBlockedListener(); 17060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell runTestOnUiThread(new Runnable() { 17160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell @Override 17260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void run() { 17360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver) 17460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .isBlockedNumber(listener, NUMBER, COUNTRY_ISO); 17560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 17660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell }); 17760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertEquals(ID, listener.waitForCallback()); 17860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell mContentProvider.verify(); 17960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 18060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 181fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell public void testIsBlockedNumber_MultipleResults() throws Throwable { 182fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell if (CompatUtils.isNCompatible()) { 183fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell newIsBlockedNumberExpectedQuery().returnRow(ID).returnRow(ID2); 184fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell } else { 185fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell newIsBlockedNumberExpectedQuery().returnRow(ID, FilteredNumberTypes.BLOCKED_NUMBER) 186fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell .returnRow(ID2, FilteredNumberTypes.BLOCKED_NUMBER); 187fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell } 188fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell final CheckBlockedListener listener = new CheckBlockedListener(); 189fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell runTestOnUiThread(new Runnable() { 190fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell @Override 191fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell public void run() { 192fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver) 193fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell .isBlockedNumber(listener, NUMBER, COUNTRY_ISO); 194fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell } 195fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell }); 196fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell // When there are multiple matches, the first is returned 197fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell assertEquals(ID, listener.waitForCallback()); 198fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell mContentProvider.verify(); 199fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell } 200fd75e4c3b3c1a8f5a6ee5d3ce6a8503cf83ea424Brandon Maxwell 20160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void testBlockNumber_Disabled() throws Throwable { 20260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (!CompatUtils.isNCompatible()) { 20360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return; 20460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 20560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell FilteredNumberCompat.setIsEnabledForTest(false); 20660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final MockContentResolver resolver = new MockContentResolver(); 20760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell MockContentProvider disabledProvider = new MockContentProvider(); 20860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell resolver.addProvider(FilteredNumberContract.AUTHORITY, disabledProvider); 20960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 21060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell disabledProvider.expectInsert(BLOCKED_NUMBER_URI_M, newBlockNumberContentValuesM(), 21160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell EXPECTED_URI); 21260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final BlockNumberListener listener = new BlockNumberListener(); 21360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell runTestOnUiThread(new Runnable() { 21460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell @Override 21560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public void run() { 21660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell new FilteredNumberAsyncQueryHandler(resolver).blockNumber(listener, E164_NUMBER, 21760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell NUMBER, COUNTRY_ISO); 21860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 21960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell }); 22060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertSame(EXPECTED_URI, listener.waitForCallback()); 22160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell disabledProvider.verify(); 2220c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 2230c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 2240c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public void testBlockNumber() throws Throwable { 2250c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell mContentProvider.expectInsert(BLOCKED_NUMBER_URI, newBlockNumberContentValues(), 2260c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell EXPECTED_URI); 22760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final BlockNumberListener listener = new BlockNumberListener(); 2280c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell runTestOnUiThread(new Runnable() { 2290c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell @Override 2300c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public void run() { 2310c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).blockNumber(listener, 2320c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell E164_NUMBER, NUMBER, COUNTRY_ISO); 2330c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 2340c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell }); 23560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertSame(EXPECTED_URI, listener.waitForCallback()); 2360c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell mContentProvider.verify(); 2370c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 2380c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 2390c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public void testBlockNumber_NullNormalizedNumber() throws Throwable { 2400c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell mContentProvider.expectInsert(BLOCKED_NUMBER_URI, newBlockNumberContentValues(), 2410c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell EXPECTED_URI); 24260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell final BlockNumberListener listener = new BlockNumberListener(); 2430c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell runTestOnUiThread(new Runnable() { 2440c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell @Override 2450c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public void run() { 2460c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).blockNumber(listener, 2470c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell NUMBER, COUNTRY_ISO); 2480c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 2490c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell }); 25060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell assertSame(EXPECTED_URI, listener.waitForCallback()); 2510c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell mContentProvider.verify(); 2520c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 2530c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 254f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void testUnblockNumber_Disabled() throws Throwable { 255f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell if (!CompatUtils.isNCompatible()) { 256f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell return; 257f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 258f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell FilteredNumberCompat.setIsEnabledForTest(false); 259f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell final MockContentResolver resolver = new MockContentResolver(); 260f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell MockContentProvider disabledProvider = new MockContentProvider(); 261f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell resolver.addProvider(FilteredNumberContract.AUTHORITY, disabledProvider); 262f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 263f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell Uri uriWithId = ContentUris.withAppendedId(BLOCKED_NUMBER_URI_M, ID); 264f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell disabledProvider.expectQuery(uriWithId) 265f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withProjection(null) 266f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withDefaultProjection(FilteredNumberCompat.getIdColumnName()) 267f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withSelection(null, null) 268f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withSortOrder(null) 269f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .returnRow(ID); 270f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell disabledProvider.expectDelete(uriWithId).returnRowsAffected(1); 271f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell final UnblockNumberListener listener = new UnblockNumberListener(); 272f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell runTestOnUiThread(new Runnable() { 273f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell @Override 274f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void run() { 275f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell new FilteredNumberAsyncQueryHandler(resolver).unblock(listener, ID); 276f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 277f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell }); 278f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell assertNotNull(listener.waitForCallback()); 279f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell disabledProvider.verify(); 280f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 281f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 282f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void testUnblockNumber_NullId() { 283f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell try { 284f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).unblock(null, (Integer) null); 285f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell fail(); 286f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } catch (IllegalArgumentException e) {} 287f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 288f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 289f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void testUnblockNumber() throws Throwable { 290f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell mContentProvider.expectQuery(BLOCKED_NUMBER_URI_WITH_ID) 291f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withProjection(null) 292f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withDefaultProjection(FilteredNumberCompat.getIdColumnName()) 293f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withSelection(null, null) 294f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .withSortOrder(null) 295f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell .returnRow(ID); 296f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell mContentProvider.expectDelete(BLOCKED_NUMBER_URI_WITH_ID).returnRowsAffected(1); 297f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell final UnblockNumberListener listener = new UnblockNumberListener(); 298f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell runTestOnUiThread(new Runnable() { 299f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell @Override 300f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void run() { 301f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell new FilteredNumberAsyncQueryHandler(mContentResolver).unblock(listener, ID); 302f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 303f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell }); 304f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell assertNotNull(listener.waitForCallback()); 305f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell mContentProvider.verify(); 306f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 307f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 30860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newIsBlockedNumberExpectedQuery() { 30960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (CompatUtils.isNCompatible()) { 31060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newIsBlockedNumberExpectedQueryN(); 31160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 31260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newIsBlockedNumberExpectedQueryM(); 31360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 31460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 31560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newIsBlockedNumberExpectedQueryN() { 31660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return mContentProvider.expectQuery(BLOCKED_NUMBER_URI) 31760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withProjection(BlockedNumbers.COLUMN_ID) 31860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(BlockedNumbers.COLUMN_E164_NUMBER + " = ?", E164_NUMBER); 31960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 32060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 32160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newIsBlockedNumberExpectedQueryM() { 32260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return mContentProvider.expectQuery(BLOCKED_NUMBER_URI) 32360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withProjection(FilteredNumberColumns._ID, FilteredNumberColumns.TYPE) 32460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(FilteredNumberColumns.NORMALIZED_NUMBER + " = ?", E164_NUMBER); 32560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 32660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 32760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newHasBlockedNumbersExpectedQuery() { 32860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (CompatUtils.isNCompatible()) { 32960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newHasBlockedNumbersExpectedQueryN(); 33060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 33160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newHasBlockedNumbersExpectedQueryM(); 33260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 33360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 33460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newHasBlockedNumbersExpectedQueryN() { 33560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return mContentProvider.expectQuery(BLOCKED_NUMBER_URI) 33660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withProjection(BlockedNumbers.COLUMN_ID) 33760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(null, null); 33860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 33960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 34060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private Query newHasBlockedNumbersExpectedQueryM() { 34160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return mContentProvider.expectQuery(BLOCKED_NUMBER_URI).withProjection( 34260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell FilteredNumberColumns._ID) 34360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell .withSelection(FilteredNumberColumns.TYPE + "=" 34460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell + FilteredNumberTypes.BLOCKED_NUMBER, null); 34560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 34660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 3470c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell private ContentValues newBlockNumberContentValues() { 34860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (CompatUtils.isNCompatible()) { 34960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newBlockNumberContentValuesN(); 35060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 35160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return newBlockNumberContentValuesM(); 35260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 35360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 35460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private ContentValues newBlockNumberContentValuesN() { 35560fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell ContentValues contentValues = new ContentValues(); 35660fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell contentValues.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, NUMBER); 35760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return contentValues; 35860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 35960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 36060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private ContentValues newBlockNumberContentValuesM() { 3610c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell ContentValues contentValues = new ContentValues(); 3620c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell contentValues.put(FilteredNumberColumns.NORMALIZED_NUMBER, E164_NUMBER); 3630c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell contentValues.put(FilteredNumberColumns.NUMBER, NUMBER); 3640c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell contentValues.put(FilteredNumberColumns.COUNTRY_ISO, COUNTRY_ISO); 3650c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell contentValues.put(FilteredNumberColumns.TYPE, FilteredNumberTypes.BLOCKED_NUMBER); 3660c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell contentValues.put(FilteredNumberColumns.SOURCE, FilteredNumberSources.USER); 3670c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell return contentValues; 3687fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3697fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3707fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private class CheckBlockedListener implements OnCheckBlockedListener { 3717fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public final CountDownLatch onCheckCompleteCalled; 3727fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public Integer id; 3737fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3747fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public CheckBlockedListener() { 3757fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell onCheckCompleteCalled = new CountDownLatch(1); 3767fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3777fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3787fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 3797fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void onCheckComplete(Integer id) { 3807fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell this.id = id; 3817fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell onCheckCompleteCalled.countDown(); 3827fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3837fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3847fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public Integer waitForCallback() throws InterruptedException { 3857fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell if (!onCheckCompleteCalled.await(5000, TimeUnit.MILLISECONDS)) { 3867fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell throw new IllegalStateException("Waiting on callback timed out."); 3877fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3887fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell return id; 3897fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3907fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3917fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3927fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell private class HasBlockedNumbersListener implements OnHasBlockedNumbersListener { 3937fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public final CountDownLatch onHasBlockedNumbersCalled; 3947fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public boolean hasBlockedNumbers; 3957fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 3967fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public HasBlockedNumbersListener() { 3977fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell onHasBlockedNumbersCalled = new CountDownLatch(1); 3987fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 3997fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 4007fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell @Override 4017fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public void onHasBlockedNumbers(boolean hasBlockedNumbers) { 4027fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell this.hasBlockedNumbers = hasBlockedNumbers; 4037fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell onHasBlockedNumbersCalled.countDown(); 4047fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 4057fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell 4067fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell public boolean waitForCallback() throws InterruptedException { 4077fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell if (!onHasBlockedNumbersCalled.await(5000, TimeUnit.MILLISECONDS)) { 4087fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell throw new IllegalStateException("Waiting on callback timed out."); 4097fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 4107fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell return hasBlockedNumbers; 4117fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 4127fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell } 4130c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 41460fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell private class BlockNumberListener implements OnBlockNumberListener { 4150c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public final CountDownLatch onBlockCompleteCalled; 4160c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public Uri uri; 4170c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 41860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public BlockNumberListener() { 4190c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell onBlockCompleteCalled = new CountDownLatch(1); 4200c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 4210c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell 4220c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell @Override 4230c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell public void onBlockComplete(Uri uri) { 4240c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell this.uri = uri; 4250c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell onBlockCompleteCalled.countDown(); 4260c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 42760fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell 42860fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell public Uri waitForCallback() throws InterruptedException { 42960fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell if (!onBlockCompleteCalled.await(5000, TimeUnit.MILLISECONDS)) { 43060fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell throw new IllegalStateException("Waiting on callback timed out."); 43160fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 43260fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell return uri; 43360fb1dc7afe8fe6079785724a21bbffbdb4eac88Brandon Maxwell } 4340c832119d05dcfccbc52bcce841b306ccebc56e9Brandon Maxwell } 435f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 436f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell private class UnblockNumberListener implements OnUnblockNumberListener { 437f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public final CountDownLatch onUnblockCompleteCalled; 438f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public Integer result; 439f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 440f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public UnblockNumberListener() { 441f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell onUnblockCompleteCalled = new CountDownLatch(1); 442f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 443f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 444f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell @Override 445f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public void onUnblockComplete(int rows, ContentValues values) { 446f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell result = rows; 447f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell onUnblockCompleteCalled.countDown(); 448f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 449f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell 450f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell public Integer waitForCallback() throws InterruptedException { 451f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell if (!onUnblockCompleteCalled.await(5000, TimeUnit.MILLISECONDS)) { 452f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell throw new IllegalStateException("Waiting on callback timed out."); 453f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 454f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell return result; 455f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 456f0e0ce60005a5732c65bddf290cd758c517d99dbBrandon Maxwell } 4577fa52722af646f1aa39afc0fcbcb9d956510c067Brandon Maxwell} 458