summaryrefslogtreecommitdiff
path: root/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/dialer/calllog/CallLogAdapterTest.java')
-rw-r--r--tests/src/com/android/dialer/calllog/CallLogAdapterTest.java918
1 files changed, 0 insertions, 918 deletions
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
deleted file mode 100644
index 3b1dd2c7d..000000000
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Copyright (C) 2011 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.calllog;
-
-import com.google.common.collect.Lists;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.provider.CallLog.Calls;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.VoicemailContract;
-import android.telephony.PhoneNumberUtils;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.text.TextUtils;
-import android.view.View;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.dialer.contactinfo.ContactInfoCache;
-import com.android.dialer.database.VoicemailArchiveContract;
-import com.android.dialer.util.AppCompatConstants;
-import com.android.dialer.util.TestConstants;
-import com.android.dialer.R;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Unit tests for {@link CallLogAdapter}.
- *
- * adb shell am instrument \
- * -e com.android.dialer.calllog.CallLogAdapterTest \
- * -w com.android.dialer.tests/android.test.InstrumentationTestRunner
- */
-public class CallLogAdapterTest extends AndroidTestCase {
- private static final String EMPTY_STRING = "";
- private static final int NO_VALUE_SET = -1;
- private static final int ARCHIVE_TYPE = -2;
-
- private static final String TEST_CACHED_NAME_PRIMARY = "Cached Name";
- private static final String TEST_CACHED_NAME_ALTERNATIVE = "Name Cached";
- private static final String CONTACT_NAME_PRIMARY = "Contact Name";
- private static final String CONTACT_NAME_ALTERNATIVE = "Name, Contact";
- private static final String TEST_CACHED_NUMBER_LABEL = "label";
- private static final int TEST_CACHED_NUMBER_TYPE = 1;
- private static final String TEST_COUNTRY_ISO = "US";
- private static final String TEST_DEFAULT_CUSTOM_LABEL = "myLabel";
- private static final Uri TEST_LOOKUP_URI = Uri.parse("content://contacts/2");
- private static final String TEST_ACCOUNT_ID_LABEL = "label";
-
- private static final String TEST_NUMBER = "12125551000";
- private static final String TEST_NUMBER_1 = "12345678";
- private static final String TEST_NUMBER_2 = "87654321";
- private static final String TEST_NUMBER_3 = "18273645";
- private static final String TEST_POST_DIAL_DIGITS = ";12345";
- private static final String TEST_VIA_NUMBER = "+16505551234";
- private static final String TEST_FORMATTED_NUMBER = "1 212-555-1000";
-
- // The object under test.
- private TestCallLogAdapter mAdapter;
-
- private MatrixCursor mCursor;
- private Resources mResources;
-
- private CallLogListItemViewHolder mViewHolder;
- private final Random mRandom = new Random();
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- mContext = getContext();
- mResources = mContext.getResources();
-
- // Use a call fetcher that does not do anything.
- CallLogAdapter.CallFetcher fakeCallFetcher = new CallLogAdapter.CallFetcher() {
- @Override
- public void fetchCalls() {}
- };
-
- ContactInfoHelper fakeContactInfoHelper =
- new ContactInfoHelper(getContext(), TEST_COUNTRY_ISO) {
- @Override
- public ContactInfo lookupNumber(String number, String countryIso) {
- ContactInfo info = new ContactInfo();
- info.number = number;
- info.formattedNumber = number;
- return info;
- }
- };
-
- mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper,
- CallLogAdapter.ACTIVITY_TYPE_DIALTACTS);
-
- // The cursor used in the tests to store the entries to display.
- mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
- mCursor.moveToFirst();
-
- // The views into which to store the data.
- mViewHolder = CallLogListItemViewHolder.createForTest(getContext());
- }
-
- @MediumTest
- public void testBindView_NumberOnlyNoCache() {
- createCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, TEST_NUMBER);
- }
-
- @MediumTest
- public void testBindView_PrivateCall() {
- createPrivateCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertEquals(Calls.PRESENTATION_RESTRICTED, mViewHolder.numberPresentation);
- assertNull(mViewHolder.primaryActionButtonView.getTag());
- // QC should be disabled since there are no actions to be performed on this
- // call.
- assertFalse(mViewHolder.quickContactView.isEnabled());
- }
-
- @MediumTest
- public void testBindView_UnknownCall() {
- createUnknownCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertEquals(Calls.PRESENTATION_UNKNOWN, mViewHolder.numberPresentation);
- assertNull(mViewHolder.primaryActionButtonView.getTag());
- // QC should be disabled since there are no actions to be performed on this
- // call.
- assertFalse(mViewHolder.quickContactView.isEnabled());
- }
-
- @MediumTest
- public void testBindView_WithoutQuickContactBadge() {
- createCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- //assertFalse(mViewHolder.quickContactView.isEnabled());
- }
-
- @MediumTest
- public void testBindView_CallButton() {
- createCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // The primaryActionView tag is set when the ViewHolder is binded. If it is possible
- // to place a call to the phone number, a call intent will have been created which
- // starts a phone call to the entry's number.
- assertHasCallAction(mViewHolder);
- }
-
- @MediumTest
- public void testBindView_FirstNameFirstOrder() {
- createCallLogEntry();
-
- mAdapter.getContactInfoCache()
- .mockGetValue(createContactInfo(CONTACT_NAME_PRIMARY, CONTACT_NAME_ALTERNATIVE));
-
- setNameDisplayOrder(getContext(), ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
- assertEquals(CONTACT_NAME_PRIMARY, mViewHolder.phoneCallDetailsViews.nameView.getText());
- }
-
- @MediumTest
- public void testBindView_LastNameFirstOrder() {
- createCallLogEntry();
-
- mAdapter.getContactInfoCache()
- .mockGetValue(createContactInfo(CONTACT_NAME_PRIMARY, CONTACT_NAME_ALTERNATIVE));
-
- setNameDisplayOrder(getContext(), ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
- assertEquals(CONTACT_NAME_ALTERNATIVE,
- mViewHolder.phoneCallDetailsViews.nameView.getText());
- }
-
- @MediumTest
- public void testBindView_NameOrderCorrectOnChange() {
- createCallLogEntry();
-
- mAdapter.getContactInfoCache()
- .mockGetValue(createContactInfo(CONTACT_NAME_PRIMARY, CONTACT_NAME_ALTERNATIVE));
-
- Context context = getContext();
- setNameDisplayOrder(context, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
- assertEquals(CONTACT_NAME_PRIMARY,
- mViewHolder.phoneCallDetailsViews.nameView.getText());
-
- setNameDisplayOrder(context, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
- mAdapter.onResume();
-
- mAdapter.onBindViewHolder(mViewHolder, 0);
- assertEquals(CONTACT_NAME_ALTERNATIVE,
- mViewHolder.phoneCallDetailsViews.nameView.getText());
- }
-
- private void setNameDisplayOrder(Context context, int displayOrder) {
- context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE).edit().putInt(
- ContactsPreferences.DISPLAY_ORDER_KEY, displayOrder).commit();
- }
-
- @MediumTest
- public void testBindView_CallButtonWithPostDialDigits() {
- createCallLogEntry(TEST_NUMBER, TEST_POST_DIAL_DIGITS, NO_VALUE_SET, NO_VALUE_SET);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- if (CompatUtils.isNCompatible()) {
- assertHasCallActionToGivenNumber(mViewHolder, TEST_NUMBER + TEST_POST_DIAL_DIGITS);
- }
- }
-
- @MediumTest
- public void testBindView_VoicemailUri() {
- createVoicemailCallLogEntry();
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertEquals(Uri.parse(mViewHolder.voicemailUri),
- ContentUris.withAppendedId(VoicemailContract.Voicemails.CONTENT_URI, 0));
- assertNull(mViewHolder.primaryActionButtonView.getTag());
- }
-
- @MediumTest
- public void testBindView_NumberWithPostDialDigits() {
- createCallLogEntry(TEST_NUMBER, TEST_POST_DIAL_DIGITS, NO_VALUE_SET, NO_VALUE_SET);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- if (CompatUtils.isNCompatible()) {
- assertNameIs(mViewHolder, TEST_NUMBER + TEST_POST_DIAL_DIGITS);
- }
- }
-
- @MediumTest
- public void testBindView_ContactWithPostDialDigits() {
- createCallLogEntry(TEST_NUMBER, TEST_POST_DIAL_DIGITS, NO_VALUE_SET, NO_VALUE_SET);
- mAdapter.injectContactInfoForTest(TEST_NUMBER + TEST_POST_DIAL_DIGITS, TEST_COUNTRY_ISO,
- createContactInfo());
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- if (CompatUtils.isNCompatible()) {
- assertNameIs(mViewHolder, TEST_CACHED_NAME_PRIMARY);
- }
- }
-
- @MediumTest
- public void testBindView_CallLogWithViaNumber() {
- createCallLogEntry(TEST_NUMBER, EMPTY_STRING, TEST_VIA_NUMBER, NO_VALUE_SET, NO_VALUE_SET);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // Copy format of Resource String
- String formattedNumber = mResources.getString(R.string.description_via_number,
- TEST_VIA_NUMBER);
-
- if (CompatUtils.isNCompatible()) {
- assertEquals(formattedNumber,
- mViewHolder.phoneCallDetailsViews.callAccountLabel.getText());
- }
- }
-
- @MediumTest
- public void testBindView_CallLogWithoutViaNumber() {
- createCallLogEntry(TEST_NUMBER, EMPTY_STRING, EMPTY_STRING, NO_VALUE_SET, NO_VALUE_SET);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- if (CompatUtils.isNCompatible()) {
- assertEquals(View.GONE,
- mViewHolder.phoneCallDetailsViews.callAccountLabel.getVisibility());
- }
- }
-
- @MediumTest
- public void testPresentationAfterRebindingViewHolders() {
- final int increment = 10;
- final int size = increment * 4;
-
- // Instantiate list of ViewHolders.
- CallLogListItemViewHolder[] holders = new CallLogListItemViewHolder[size];
- for (int i = 0; i < size; i++) {
- holders[i] = CallLogListItemViewHolder.createForTest(getContext());
- }
-
- // Add first set of entries to the cursor.
- for (int i = 0; i < increment; i++) {
- createCallLogEntry();
- createPrivateCallLogEntry();
- createCallLogEntry();
- createUnknownCallLogEntry();
- }
-
- mAdapter.changeCursor(mCursor);
-
- // Verify correct appearance for presentation.
- for (int i = 0; i < size; i++) {
- mAdapter.onBindViewHolder(holders[i], i);
- if (holders[i].numberPresentation == Calls.PRESENTATION_ALLOWED) {
- assertHasCallAction(holders[i]);
- } else {
- assertNull(holders[i].primaryActionButtonView.getTag());
- assertEquals(holders[i].number, EMPTY_STRING);
- }
- }
-
- // Append the rest of the entries to the cursor. Keep the first set of ViewHolders
- // so they are updated and not buitl from scratch. This checks for bugs which may
- // be evident only after the call log is updated.
- for (int i = 0; i < increment; i++) {
- createPrivateCallLogEntry();
- createCallLogEntry();
- createUnknownCallLogEntry();
- createCallLogEntry();
- }
-
- mCursor.move(size);
-
- // Verify correct appearnce for presentation.
- for (int i = 0; i < size; i++) {
- mAdapter.onBindViewHolder(holders[i], i + size);
- if (holders[i].numberPresentation == Calls.PRESENTATION_ALLOWED) {
- assertHasCallAction(holders[i]);
- } else {
- assertNull(holders[i].primaryActionButtonView.getTag());
- assertEquals(holders[i].number, EMPTY_STRING);
- }
- }
- }
-
- @MediumTest
- public void testBindView_NoCallLogCacheNorMemoryCache_EnqueueRequest() {
- createCallLogEntry();
-
- // Bind the views of a single row.
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // There is one request for contact details.
- assertEquals(1, mAdapter.getContactInfoCache().requests.size());
-
- TestContactInfoCache.Request request = mAdapter.getContactInfoCache().requests.get(0);
- // It is for the number we need to show.
- assertEquals(TEST_NUMBER, request.number);
- // It has the right country.
- assertEquals(TEST_COUNTRY_ISO, request.countryIso);
- // Since there is nothing in the cache, it is an immediate request.
- assertTrue("should be immediate", request.immediate);
- }
-
- @MediumTest
- public void testBindView_CallLogCacheButNoMemoryCache_EnqueueRequest() {
- createCallLogEntryWithCachedValues(false);
-
- // Bind the views of a single row.
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // There is one request for contact details.
- assertEquals(1, mAdapter.getContactInfoCache().requests.size());
-
- TestContactInfoCache.Request request = mAdapter.getContactInfoCache().requests.get(0);
-
- // The values passed to the request, match the ones in the call log cache.
- assertEquals(TEST_CACHED_NAME_PRIMARY, request.callLogInfo.name);
- assertEquals(TEST_CACHED_NUMBER_TYPE, request.callLogInfo.type);
- assertEquals(TEST_CACHED_NUMBER_LABEL, request.callLogInfo.label);
- }
-
- @MediumTest
- public void testBindView_NoCallLogButMemoryCache_EnqueueRequest() {
- createCallLogEntry();
- mAdapter.injectContactInfoForTest(TEST_NUMBER, TEST_COUNTRY_ISO, createContactInfo());
-
- // Bind the views of a single row.
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // There is one request for contact details.
- assertEquals(1, mAdapter.getContactInfoCache().requests.size());
-
- TestContactInfoCache.Request request = mAdapter.getContactInfoCache().requests.get(0);
- // Since there is something in the cache, it is not an immediate request.
- assertFalse("should not be immediate", request.immediate);
- }
-
- @MediumTest
- public void testBindView_BothCallLogAndMemoryCache_NoEnqueueRequest() {
- createCallLogEntryWithCachedValues(true);
-
- // Bind the views of a single row.
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // Cache and call log are up-to-date: no need to request update.
- assertEquals(0, mAdapter.getContactInfoCache().requests.size());
- }
-
- @MediumTest
- public void testBindView_MismatchBetweenCallLogAndMemoryCache_EnqueueRequest() {
- createCallLogEntryWithCachedValues(false);
-
- // Contact info contains a different name.
- ContactInfo info = createContactInfo();
- info.name = "new name";
- mAdapter.injectContactInfoForTest(TEST_NUMBER, TEST_COUNTRY_ISO, info);
-
- // Bind the views of a single row.
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- // There is one request for contact details.
- assertEquals(1, mAdapter.getContactInfoCache().requests.size());
-
- TestContactInfoCache.Request request = mAdapter.getContactInfoCache().requests.get(0);
- // Since there is something in the cache, it is not an immediate request.
- assertFalse("should not be immediate", request.immediate);
- }
-
- @MediumTest
- public void testBindView_WithCachedName() {
- createCallLogEntryWithCachedValues(
- "John Doe",
- Phone.TYPE_HOME,
- TEST_CACHED_NUMBER_LABEL);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, "John Doe");
- assertLabel(mViewHolder, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_HOME));
- }
-
- @MediumTest
- public void testBindView_UriNumber() {
- createCallLogEntryWithCachedValues(
- "sip:johndoe@gmail.com",
- AppCompatConstants.CALLS_INCOMING_TYPE,
- "John Doe",
- Phone.TYPE_HOME,
- TEST_DEFAULT_CUSTOM_LABEL,
- EMPTY_STRING,
- false /* inject */);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, "John Doe");
- assertLabel(mViewHolder, "sip:johndoe@gmail.com", "sip:johndoe@gmail.com");
- }
-
- @MediumTest
- public void testBindView_HomeLabel() {
- createCallLogEntryWithCachedValues(
- "John Doe",
- Phone.TYPE_HOME,
- TEST_CACHED_NUMBER_LABEL);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, "John Doe");
- assertLabel(mViewHolder, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_HOME));
- }
-
- @MediumTest
- public void testBindView_WorkLabel() {
- createCallLogEntryWithCachedValues(
- "John Doe",
- Phone.TYPE_WORK,
- TEST_CACHED_NUMBER_LABEL);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, "John Doe");
- assertLabel(mViewHolder, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_WORK));
- }
-
- @MediumTest
- public void testBindView_CustomLabel() {
- createCallLogEntryWithCachedValues(
- "John Doe",
- Phone.TYPE_CUSTOM,
- TEST_DEFAULT_CUSTOM_LABEL);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, "John Doe");
- assertLabel(mViewHolder, TEST_FORMATTED_NUMBER, TEST_DEFAULT_CUSTOM_LABEL);
- }
-
- @MediumTest
- public void testBindView_NumberOnlyDbCachedFormattedNumber() {
- createCallLogEntryWithCachedValues(
- TEST_NUMBER,
- AppCompatConstants.CALLS_INCOMING_TYPE,
- EMPTY_STRING,
- TEST_CACHED_NUMBER_TYPE,
- TEST_CACHED_NUMBER_LABEL,
- TEST_FORMATTED_NUMBER,
- false /* inject */);
-
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertNameIs(mViewHolder, TEST_FORMATTED_NUMBER);
- }
-
- @MediumTest
- public void testBindVoicemailPromoCard() {
- createCallLogEntry(TEST_NUMBER_1);
- createCallLogEntry(TEST_NUMBER_1);
- createCallLogEntry(TEST_NUMBER_2);
- createCallLogEntry(TEST_NUMBER_2);
- createCallLogEntry(TEST_NUMBER_2);
- createCallLogEntry(TEST_NUMBER_3);
-
- // Bind the voicemail promo card.
- mAdapter.showVoicemailPromoCard(true);
- mAdapter.changeCursor(mCursor);
- mAdapter.onBindViewHolder(PromoCardViewHolder.createForTest(getContext()), 0);
-
- // Check that displaying the promo card does not affect the grouping or list display.
- mAdapter.onBindViewHolder(mViewHolder, 1);
- assertEquals(2, mAdapter.getGroupSize(1));
- assertEquals(TEST_NUMBER_1, mViewHolder.number);
-
- mAdapter.onBindViewHolder(mViewHolder, 2);
- assertEquals(3, mAdapter.getGroupSize(2));
- assertEquals(TEST_NUMBER_2, mViewHolder.number);
-
- mAdapter.onBindViewHolder(mViewHolder, 3);
- assertEquals(1, mAdapter.getGroupSize(3));
- assertEquals(TEST_NUMBER_3, mViewHolder.number);
- }
-
- public void testVoicemailArchive() {
- setUpArchiveAdapter();
- createVoicemailArchiveCallLogEntry();
-
- mAdapter.changeCursorVoicemail(mCursor);
- mAdapter.onBindViewHolder(mViewHolder, 0);
-
- assertEquals(Uri.parse(mViewHolder.voicemailUri),
- ContentUris.withAppendedId(
- VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, 0));
- assertNull(mViewHolder.primaryActionButtonView.getTag());
- }
-
- private void createCallLogEntry() {
- createCallLogEntry(TEST_NUMBER);
- }
-
- private void createCallLogEntry(String testNumber) {
- createCallLogEntry(testNumber, EMPTY_STRING, NO_VALUE_SET, NO_VALUE_SET);
- }
-
- private void createPrivateCallLogEntry() {
- createCallLogEntry(
- EMPTY_STRING,
- EMPTY_STRING,
- Calls.PRESENTATION_RESTRICTED,
- AppCompatConstants.CALLS_INCOMING_TYPE);
- }
-
- private void createUnknownCallLogEntry() {
- createCallLogEntry(
- EMPTY_STRING,
- EMPTY_STRING,
- Calls.PRESENTATION_UNKNOWN,
- AppCompatConstants.CALLS_INCOMING_TYPE);
- }
-
- private void createVoicemailCallLogEntry() {
- createCallLogEntry(TEST_NUMBER, EMPTY_STRING, NO_VALUE_SET, Calls.VOICEMAIL_TYPE);
- }
-
- private void createVoicemailArchiveCallLogEntry() {
- createCallLogEntry(TEST_NUMBER, EMPTY_STRING, NO_VALUE_SET, ARCHIVE_TYPE);
- }
-
- private void createCallLogEntry(String number, String postDialDigits, int presentation,
- int type) {
- Object[] values = getValues(number, postDialDigits, presentation, type);
- mCursor.addRow(values);
- }
-
- private void createCallLogEntry(String number, String postDialDigits, String viaNumber,
- int presentation, int type) {
- Object[] values = getValues(number, postDialDigits, viaNumber, presentation, type);
- mCursor.addRow(values);
- }
-
- private void createCallLogEntryWithCachedValues(boolean inject) {
- createCallLogEntryWithCachedValues(
- TEST_NUMBER,
- NO_VALUE_SET,
- TEST_CACHED_NAME_PRIMARY,
- TEST_CACHED_NUMBER_TYPE,
- TEST_CACHED_NUMBER_LABEL,
- EMPTY_STRING,
- inject);
- }
-
- private void createCallLogEntryWithCachedValues(
- String cachedName, int cachedNumberType, String cachedNumberLabel) {
- createCallLogEntryWithCachedValues(
- TEST_NUMBER,
- NO_VALUE_SET,
- cachedName,
- cachedNumberType,
- cachedNumberLabel,
- EMPTY_STRING,
- false /* inject */);
- }
-
- /**
- * Inserts a new call log entry
- *
- * It includes the values for the cached contact associated with the number.
- *
- * @param number The phone number.
- * @param type Valid value of {@code Calls.TYPE}.
- * @param cachedName The name of the contact with this number
- * @param cachedNumberType The type of the number, from the contact with this number.
- * @param cachedNumberLabel The label of the number, from the contact with this number.
- * @param cachedFormattedNumber The formatted number, from the contact with this number.
- * @param inject Whether to inject the contact info into the adapter's ContactInfoCache.
- */
- private void createCallLogEntryWithCachedValues(
- String number,
- int type,
- String cachedName,
- int cachedNumberType,
- String cachedNumberLabel,
- String cachedFormattedNumber,
- boolean inject) {
- Object[] values = getValues(number, EMPTY_STRING, NO_VALUE_SET, type);
- values[CallLogQuery.CACHED_NAME] = cachedName;
- values[CallLogQuery.CACHED_NUMBER_TYPE] = cachedNumberType;
- values[CallLogQuery.CACHED_NUMBER_LABEL] = cachedNumberLabel;
- values[CallLogQuery.CACHED_FORMATTED_NUMBER] = cachedFormattedNumber;
-
- mCursor.addRow(values);
-
- if (inject) {
- ContactInfo contactInfo =
- createContactInfo(cachedName, cachedName, cachedNumberType, cachedNumberLabel);
- mAdapter.injectContactInfoForTest(number, TEST_COUNTRY_ISO, contactInfo);
- }
- }
-
- /**
- * @param number The phone number.
- * @param postDialDigits The post dial digits dialed (if any)
- * @param presentation Number representing display rules for "allowed",
- * "payphone", "restricted", or "unknown".
- * @param type The type of the call (outgoing/ingoing)
- */
- private Object[] getValues(
- String number,
- String postDialDigits,
- int presentation,
- int type) {
- return getValues(number, postDialDigits, "", presentation, type);
- }
-
- /**
- * @param number The phone number.
- * @param postDialDigits The post dial digits dialed (if any)
- * @param viaNumber The secondary number that the call was placed via
- * @param presentation Number representing display rules for "allowed",
- * "payphone", "restricted", or "unknown".
- * @param type The type of the call (outgoing/ingoing)
- */
- private Object[] getValues(
- String number,
- String postDialDigits,
- String viaNumber,
- int presentation,
- int type) {
- Object[] values = CallLogQueryTestUtils.createTestValues();
-
- values[CallLogQuery.ID] = mCursor.getCount();
- values[CallLogQuery.COUNTRY_ISO] = TEST_COUNTRY_ISO;
- values[CallLogQuery.DATE] = new Date().getTime();
- values[CallLogQuery.DURATION] = mRandom.nextInt(10 * 60);
-
- if (!TextUtils.isEmpty(number)) {
- values[CallLogQuery.NUMBER] = number;
- }
- if (!TextUtils.isEmpty(postDialDigits) && CompatUtils.isNCompatible()) {
- values[CallLogQuery.POST_DIAL_DIGITS] = postDialDigits;
- }
- if (!TextUtils.isEmpty(viaNumber) && CompatUtils.isNCompatible()) {
- values[CallLogQuery.VIA_NUMBER] = viaNumber;
- }
- if (presentation != NO_VALUE_SET) {
- values[CallLogQuery.NUMBER_PRESENTATION] = presentation;
- }
- if (type != NO_VALUE_SET) {
- values[CallLogQuery.CALL_TYPE] = type;
- }
- if (type == AppCompatConstants.CALLS_VOICEMAIL_TYPE) {
- values[CallLogQuery.VOICEMAIL_URI] = ContentUris.withAppendedId(
- VoicemailContract.Voicemails.CONTENT_URI, mCursor.getCount());
- }
- if (type == ARCHIVE_TYPE) {
- values[CallLogQuery.VOICEMAIL_URI] = ContentUris.withAppendedId(
- VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, mCursor.getCount());
- }
-
- return values;
- }
-
- private ContactInfo createContactInfo() {
- return createContactInfo(
- TEST_CACHED_NAME_PRIMARY,
- TEST_CACHED_NAME_ALTERNATIVE);
- }
-
- private ContactInfo createContactInfo(String namePrimary, String nameAlternative) {
- return createContactInfo(
- namePrimary,
- nameAlternative,
- TEST_CACHED_NUMBER_TYPE,
- TEST_CACHED_NUMBER_LABEL);
- }
-
- /** Returns a contact info with default values. */
- private ContactInfo createContactInfo(String namePrimary, String nameAlternative, int type, String label) {
- ContactInfo info = new ContactInfo();
- info.number = TEST_NUMBER;
- info.name = namePrimary;
- info.nameAlternative = nameAlternative;
- info.type = type;
- info.label = label;
- info.formattedNumber = TEST_FORMATTED_NUMBER;
- info.normalizedNumber = TEST_NUMBER;
- info.lookupUri = TEST_LOOKUP_URI;
- return info;
- }
-
- // Asserts that the name text view is shown and contains the given text.
- private void assertNameIs(CallLogListItemViewHolder viewHolder, String name) {
- assertEquals(View.VISIBLE, viewHolder.phoneCallDetailsViews.nameView.getVisibility());
- assertEquals(name, viewHolder.phoneCallDetailsViews.nameView.getText());
- }
-
- // Asserts that the label text view contains the given text.
- private void assertLabel(
- CallLogListItemViewHolder viewHolder, CharSequence number, CharSequence label) {
- if (label != null) {
- assertTrue(viewHolder.phoneCallDetailsViews.callLocationAndDate.getText()
- .toString().contains(label));
- }
- }
-
- private void assertHasCallAction(CallLogListItemViewHolder viewHolder) {
- assertHasCallActionToGivenNumber(viewHolder, TEST_NUMBER);
- }
-
- private void assertHasCallActionToGivenNumber(CallLogListItemViewHolder viewHolder,
- String number) {
- IntentProvider intentProvider =
- (IntentProvider) viewHolder.primaryActionButtonView.getTag();
- Intent intent = intentProvider.getIntent(getContext());
- assertEquals(TestConstants.CALL_INTENT_ACTION, intent.getAction());
- assertEquals(Uri.parse("tel:" + Uri.encode(number)), intent.getData());
- }
-
- /** Returns the label associated with a given phone type. */
- private CharSequence getTypeLabel(int phoneType) {
- return Phone.getTypeLabel(getContext().getResources(), phoneType, "");
- }
-
- private void setUpArchiveAdapter() {
- // Use a call fetcher that does not do anything.
- CallLogAdapter.CallFetcher fakeCallFetcher = new CallLogAdapter.CallFetcher() {
- @Override
- public void fetchCalls() {}
- };
-
- ContactInfoHelper fakeContactInfoHelper =
- new ContactInfoHelper(getContext(), TEST_COUNTRY_ISO) {
- @Override
- public ContactInfo lookupNumber(String number, String countryIso) {
- ContactInfo info = new ContactInfo();
- info.number = number;
- info.formattedNumber = number;
- return info;
- }
- };
-
- mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper,
- CallLogAdapter.ACTIVITY_TYPE_ARCHIVE);
- }
-
- /// Subclass of {@link CallLogAdapter} used in tests to intercept certain calls.
- private static final class TestCallLogAdapter extends CallLogAdapter {
- public TestCallLogAdapter(Context context, CallFetcher callFetcher,
- ContactInfoHelper contactInfoHelper, int mActivity) {
- super(context, callFetcher, contactInfoHelper, null,
- mActivity);
- mContactInfoCache = new TestContactInfoCache(
- contactInfoHelper, mOnContactInfoChangedListener);
- }
-
- public TestContactInfoCache getContactInfoCache() {
- return (TestContactInfoCache) mContactInfoCache;
- }
-
- public void showVoicemailPromoCard(boolean show) {
- mShowVoicemailPromoCard = show;
- }
- }
-
- private static final class TestContactInfoCache extends ContactInfoCache {
- public static class Request {
- public final String number;
- public final String countryIso;
- public final ContactInfo callLogInfo;
- public final boolean immediate;
-
- public Request(String number, String countryIso, ContactInfo callLogInfo,
- boolean immediate) {
- this.number = number;
- this.countryIso = countryIso;
- this.callLogInfo = callLogInfo;
- this.immediate = immediate;
- }
- }
-
- public final List<Request> requests = Lists.newArrayList();
-
- /**
- * Dummy contactInfo to return in the even that the getValue method has been mocked
- */
- private ContactInfo mContactInfo;
-
- public TestContactInfoCache(
- ContactInfoHelper contactInfoHelper, OnContactInfoChangedListener listener) {
- super(contactInfoHelper, listener);
- }
-
- /**
- * Sets the given value to be returned by all calls to
- * {@link #getValue(String, String, ContactInfo)}
- *
- * @param contactInfo the contactInfo
- */
- public void mockGetValue(ContactInfo contactInfo) {
- this.mContactInfo = contactInfo;
- }
-
- @Override
- public ContactInfo getValue(String number, String countryIso,
- ContactInfo cachedContactInfo) {
- if (mContactInfo != null) {
- return mContactInfo;
- }
- return super.getValue(number, countryIso, cachedContactInfo);
- }
-
- @Override
- protected void enqueueRequest(String number, String countryIso, ContactInfo callLogInfo,
- boolean immediate) {
- requests.add(new Request(number, countryIso, callLogInfo, immediate));
- }
- }
-}