1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.dialer.calllog; 18 19 import android.content.ComponentName; 20 import android.content.Context; 21 import android.content.res.Resources; 22 import android.provider.CallLog.Calls; 23 import android.telecom.PhoneAccountHandle; 24 import android.test.AndroidTestCase; 25 import android.test.suitebuilder.annotation.MediumTest; 26 import android.text.Html; 27 import android.text.Spanned; 28 import android.view.View; 29 import android.widget.TextView; 30 31 import com.android.dialer.PhoneCallDetails; 32 import com.android.dialer.R; 33 import com.android.dialer.calllog.calllogcache.TestTelecomCallLogCache; 34 import com.android.dialer.util.AppCompatConstants; 35 import com.android.dialer.util.LocaleTestUtils; 36 37 import java.util.GregorianCalendar; 38 import java.util.Locale; 39 import java.util.regex.Matcher; 40 import java.util.regex.Pattern; 41 42 /** 43 * Unit tests for {@link PhoneCallDetailsHelper}. 44 */ 45 @MediumTest 46 public class PhoneCallDetailsHelperTest extends AndroidTestCase { 47 /** The number to be used to access the voicemail. */ 48 private static final String TEST_VOICEMAIL_NUMBER = "125"; 49 /** The date of the call log entry. */ 50 private static final long TEST_DATE = 51 new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis(); 52 private static final long INJECTED_CURRENT_DATE = 53 new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis(); 54 /** A test duration value for phone calls. */ 55 private static final long TEST_DURATION = 62300; 56 /** The number of the caller/callee in the log entry. */ 57 private static final String TEST_NUMBER = "14125555555"; 58 /** The formatted version of {@link #TEST_NUMBER}. */ 59 private static final String TEST_FORMATTED_NUMBER = "1-412-255-5555"; 60 /** The country ISO name used in the tests. */ 61 private static final String TEST_COUNTRY_ISO = "US"; 62 /** The geocoded location used in the tests. */ 63 private static final String TEST_GEOCODE = "United States"; 64 /** Empty geocode label */ 65 private static final String EMPTY_GEOCODE = ""; 66 /** Empty post-dial digits label */ 67 private static final String EMPTY_POSTDIAL = ""; 68 /** The number that the call was received via */ 69 private static final String TEST_VIA_NUMBER = "+16505551234"; 70 /** The Phone Account name that the Call was received on */ 71 private static final String TEST_ACCOUNT_LABEL = "T-Stationary"; 72 73 /** The object under test. */ 74 private PhoneCallDetailsHelper mHelper; 75 /** The views to fill. */ 76 private PhoneCallDetailsViews mViews; 77 private TextView mNameView; 78 private LocaleTestUtils mLocaleTestUtils; 79 private TestTelecomCallLogCache mPhoneUtils; 80 81 private Context mContext; 82 83 @Override 84 protected void setUp() throws Exception { 85 super.setUp(); 86 mContext = getContext(); 87 Resources resources = mContext.getResources(); 88 mPhoneUtils = new TestTelecomCallLogCache(mContext, TEST_VOICEMAIL_NUMBER, 89 TEST_ACCOUNT_LABEL); 90 mHelper = new PhoneCallDetailsHelper(mContext, resources, mPhoneUtils); 91 mHelper.setCurrentTimeForTest(INJECTED_CURRENT_DATE); 92 mViews = PhoneCallDetailsViews.createForTest(mContext); 93 mNameView = new TextView(mContext); 94 mLocaleTestUtils = new LocaleTestUtils(mContext); 95 mLocaleTestUtils.setLocale(Locale.US); 96 } 97 98 @Override 99 protected void tearDown() throws Exception { 100 mLocaleTestUtils.restoreLocale(); 101 mNameView = null; 102 mViews = null; 103 mHelper = null; 104 super.tearDown(); 105 } 106 107 public void testSetPhoneCallDetails_Unknown() { 108 setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_UNKNOWN, ""); 109 assertNameEqualsResource(R.string.unknown); 110 } 111 112 public void testSetPhoneCallDetails_Private() { 113 setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_RESTRICTED, ""); 114 assertNameEqualsResource(R.string.private_num); 115 } 116 117 public void testSetPhoneCallDetails_Payphone() { 118 setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_PAYPHONE, ""); 119 assertNameEqualsResource(R.string.payphone); 120 } 121 122 public void testSetPhoneCallDetails_Voicemail() { 123 setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, 124 Calls.PRESENTATION_ALLOWED, TEST_VOICEMAIL_NUMBER); 125 assertNameEqualsResource(R.string.voicemail); 126 } 127 128 public void testSetPhoneCallDetails_ViaNumber() { 129 setPhoneCallDetailsWithViaNumber(TEST_VIA_NUMBER); 130 assertViaNumberEquals(TEST_VIA_NUMBER); 131 } 132 133 public void testSetPhoneCallDetails_NoViaNumber() { 134 setDefaultPhoneCallDetailsNoViaNumber(); 135 assertCallAccountInvisible(); 136 } 137 138 public void testSetPhoneCallDetails_AccountLabel() { 139 setPhoneCallDetailsWithAccountHandle(); 140 assertAccountLabelEquals(TEST_ACCOUNT_LABEL); 141 } 142 143 public void testSetPhoneCallDetails_AccountHandleViaNumber() { 144 setPhoneCallDetailsWithAccountLabelViaNumber(TEST_VIA_NUMBER); 145 assertAccountLabelEquals(TEST_VIA_NUMBER, TEST_ACCOUNT_LABEL); 146 } 147 148 // Voicemail date string has 3 different formats depending on how long ago the call was placed 149 public void testSetVoicemailPhoneCallDetails_Today() { 150 setVoicemailPhoneCallDetailsWithDate(System.currentTimeMillis()); 151 assertLocationAndDateContains("Today at"); 152 } 153 154 public void testSetVoicemailPhoneCallDetails_WithinCurrentYear() { 155 mHelper.setCurrentTimeForTest(INJECTED_CURRENT_DATE); 156 String formattedTestDate = "Jun 3 at 1:00 PM"; 157 setVoicemailPhoneCallDetailsWithDate(TEST_DATE); 158 assertLocationAndDateContains(formattedTestDate); 159 } 160 161 public void testSetVoicemailPhoneCallDetails_OutsideCurrentYear() { 162 mHelper.setCurrentTimeForTest(INJECTED_CURRENT_DATE); 163 long testDate = new GregorianCalendar(2009, 5, 3, 13, 0, 0).getTimeInMillis(); 164 String formattedTestDate = "Jun 3, 2009 at 1:00 PM"; 165 setVoicemailPhoneCallDetailsWithDate(testDate); 166 assertLocationAndDateContains(formattedTestDate); 167 } 168 169 public void testVoicemailLocationNotShownWithDate() { 170 setVoicemailPhoneCallDetailsWithDate(TEST_DATE); 171 assertLocationAndDateExactEquals("Jun 3 at 1:00 PM 99:20"); 172 } 173 174 public void testVoicemailDuration() { 175 setVoicemailPhoneCallDetailsWithDuration(100); 176 assertDurationExactEquals("01:40"); 177 } 178 179 public void testVoicemailDuration_Capped() { 180 setVoicemailPhoneCallDetailsWithDuration(TEST_DURATION); 181 assertDurationExactEquals("99:20"); 182 } 183 184 public void testVoicemailDuration_Zero() { 185 setVoicemailPhoneCallDetailsWithDuration(0); 186 assertLocationAndDateExactEquals("Jun 3 at 1:00 PM"); 187 } 188 189 public void testVoicemailDuration_EvenMinute() { 190 setVoicemailPhoneCallDetailsWithDuration(60); 191 assertDurationExactEquals("01:00"); 192 } 193 194 /** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */ 195 private void assertEqualsHtml(String expectedHtml, CharSequence actualText) { 196 // In order to contain HTML, the text should actually be a Spanned. 197 assertTrue(actualText instanceof Spanned); 198 Spanned actualSpanned = (Spanned) actualText; 199 // Convert from and to HTML to take care of alternative formatting of HTML. 200 assertEquals(Html.toHtml(Html.fromHtml(expectedHtml)), Html.toHtml(actualSpanned)); 201 202 } 203 204 public void testSetPhoneCallDetails_Date() { 205 mHelper.setCurrentTimeForTest( 206 new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis()); 207 208 setPhoneCallDetailsWithDate( 209 new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis()); 210 assertLocationAndDateContains("0 min. ago"); 211 212 setPhoneCallDetailsWithDate( 213 new GregorianCalendar(2011, 5, 3, 12, 0, 0).getTimeInMillis()); 214 assertLocationAndDateContains("1 hr. ago"); 215 216 setPhoneCallDetailsWithDate( 217 new GregorianCalendar(2011, 5, 2, 13, 0, 0).getTimeInMillis()); 218 assertLocationAndDateContains("Yesterday"); 219 220 setPhoneCallDetailsWithDate( 221 new GregorianCalendar(2011, 5, 1, 13, 0, 0).getTimeInMillis()); 222 assertLocationAndDateContains("2 days ago"); 223 } 224 225 public void testSetPhoneCallDetails_CallTypeIcons() { 226 setPhoneCallDetailsWithCallTypeIcons(AppCompatConstants.CALLS_INCOMING_TYPE); 227 assertCallTypeIconsEquals(AppCompatConstants.CALLS_INCOMING_TYPE); 228 229 setPhoneCallDetailsWithCallTypeIcons(AppCompatConstants.CALLS_OUTGOING_TYPE); 230 assertCallTypeIconsEquals(AppCompatConstants.CALLS_OUTGOING_TYPE); 231 232 setPhoneCallDetailsWithCallTypeIcons(AppCompatConstants.CALLS_MISSED_TYPE); 233 assertCallTypeIconsEquals(AppCompatConstants.CALLS_MISSED_TYPE); 234 235 setPhoneCallDetailsWithCallTypeIcons(AppCompatConstants.CALLS_VOICEMAIL_TYPE); 236 assertCallTypeIconsEquals(AppCompatConstants.CALLS_VOICEMAIL_TYPE); 237 } 238 239 /** 240 * Tests a case where the video call feature is present. 241 */ 242 public void testSetPhoneCallDetails_Video() { 243 PhoneCallDetails details = getPhoneCallDetails(); 244 details.features = Calls.FEATURES_VIDEO; 245 mHelper.setPhoneCallDetails(mViews, details); 246 247 assertIsVideoCall(true); 248 } 249 250 /** 251 * Tests a case where the video call feature is not present. 252 */ 253 public void testSetPhoneCallDetails_NoVideo() { 254 PhoneCallDetails details = getPhoneCallDetails(); 255 details.features = 0; 256 mHelper.setPhoneCallDetails(mViews, details); 257 258 assertIsVideoCall(false); 259 } 260 261 public void testSetPhoneCallDetails_MultipleCallTypeIcons() { 262 setPhoneCallDetailsWithCallTypeIcons( 263 AppCompatConstants.CALLS_INCOMING_TYPE, 264 AppCompatConstants.CALLS_OUTGOING_TYPE); 265 assertCallTypeIconsEquals( 266 AppCompatConstants.CALLS_INCOMING_TYPE, 267 AppCompatConstants.CALLS_OUTGOING_TYPE); 268 269 setPhoneCallDetailsWithCallTypeIcons( 270 AppCompatConstants.CALLS_MISSED_TYPE, 271 AppCompatConstants.CALLS_MISSED_TYPE); 272 assertCallTypeIconsEquals( 273 AppCompatConstants.CALLS_MISSED_TYPE, 274 AppCompatConstants.CALLS_MISSED_TYPE); 275 } 276 277 public void testSetPhoneCallDetails_MultipleCallTypeIconsLastOneDropped() { 278 setPhoneCallDetailsWithCallTypeIcons( 279 AppCompatConstants.CALLS_MISSED_TYPE, 280 AppCompatConstants.CALLS_MISSED_TYPE, 281 AppCompatConstants.CALLS_INCOMING_TYPE, 282 AppCompatConstants.CALLS_OUTGOING_TYPE); 283 assertCallTypeIconsEqualsPlusOverflow("(4)", 284 AppCompatConstants.CALLS_MISSED_TYPE, 285 AppCompatConstants.CALLS_MISSED_TYPE, 286 AppCompatConstants.CALLS_INCOMING_TYPE); 287 } 288 289 public void testSetPhoneCallDetails_Geocode() { 290 setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "Pennsylvania"); 291 assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. 292 assertLocationAndDateContains("Pennsylvania"); // The geocode is shown as the label. 293 } 294 295 public void testSetPhoneCallDetails_NoGeocode() { 296 setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", null); 297 assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. 298 assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label. 299 } 300 301 public void testSetPhoneCallDetails_EmptyGeocode() { 302 setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", ""); 303 assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. 304 assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label. 305 } 306 307 public void testSetPhoneCallDetails_NoGeocodeForVoicemail() { 308 setPhoneCallDetailsWithNumberAndGeocode(TEST_VOICEMAIL_NUMBER, "", "United States"); 309 assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label. 310 } 311 312 public void testSetPhoneCallDetails_Highlighted() { 313 setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, 314 Calls.PRESENTATION_ALLOWED, ""); 315 } 316 317 public void testSetCallDetailsHeader_NumberOnly() { 318 setCallDetailsHeaderWithNumber(TEST_NUMBER, Calls.PRESENTATION_ALLOWED); 319 assertEquals(View.VISIBLE, mNameView.getVisibility()); 320 assertEquals("1-412-255-5555", mNameView.getText().toString()); 321 } 322 323 public void testSetCallDetailsHeader_UnknownNumber() { 324 setCallDetailsHeaderWithNumber("", Calls.PRESENTATION_UNKNOWN); 325 assertEquals(View.VISIBLE, mNameView.getVisibility()); 326 assertEquals("Unknown", mNameView.getText().toString()); 327 } 328 329 public void testSetCallDetailsHeader_PrivateNumber() { 330 setCallDetailsHeaderWithNumber("", Calls.PRESENTATION_RESTRICTED); 331 assertEquals(View.VISIBLE, mNameView.getVisibility()); 332 assertEquals("Private number", mNameView.getText().toString()); 333 } 334 335 public void testSetCallDetailsHeader_PayphoneNumber() { 336 setCallDetailsHeaderWithNumber("", Calls.PRESENTATION_PAYPHONE); 337 assertEquals(View.VISIBLE, mNameView.getVisibility()); 338 assertEquals("Payphone", mNameView.getText().toString()); 339 } 340 341 public void testSetCallDetailsHeader_VoicemailNumber() { 342 PhoneCallDetails details = getPhoneCallDetails( 343 TEST_VOICEMAIL_NUMBER, 344 Calls.PRESENTATION_ALLOWED, 345 TEST_FORMATTED_NUMBER); 346 mHelper.setCallDetailsHeader(mNameView, details); 347 assertEquals(View.VISIBLE, mNameView.getVisibility()); 348 assertEquals("Voicemail", mNameView.getText().toString()); 349 } 350 351 public void testSetCallDetailsHeader() { 352 setCallDetailsHeader("John Doe"); 353 assertEquals(View.VISIBLE, mNameView.getVisibility()); 354 assertEquals("John Doe", mNameView.getText().toString()); 355 } 356 357 public void testGetCallTypeOrLocation_Geocode() { 358 assertEquals(TEST_GEOCODE, mHelper.getCallTypeOrLocation(getPhoneCallDetails())); 359 } 360 361 public void testGetCallTypeOrLocation_CallType() { 362 PhoneCallDetails details = getPhoneCallDetails(); 363 details.geocode = null; 364 details.numberType = Calls.INCOMING_TYPE; 365 mHelper.setPhoneTypeLabelForTest("mobile"); 366 assertEquals("mobile", mHelper.getCallTypeOrLocation(details)); 367 } 368 369 public void testGetCallTypeOrLocation_DisplayNumber() { 370 PhoneCallDetails details = getPhoneCallDetails("", Calls.PRESENTATION_ALLOWED, 371 TEST_FORMATTED_NUMBER); 372 details.namePrimary = "name"; 373 assertEquals(TEST_FORMATTED_NUMBER, mHelper.getCallTypeOrLocation(details)); 374 } 375 376 /** Asserts that the name text field contains the value of the given string resource. */ 377 private void assertNameEqualsResource(int resId) { 378 assertNameEquals(getContext().getString(resId)); 379 } 380 381 /** Asserts that the name text field contains the given string value. */ 382 private void assertNameEquals(String text) { 383 assertEquals(text, mViews.nameView.getText().toString()); 384 } 385 386 /** Asserts that the location and date text field contains the given string value. */ 387 private void assertLocationAndDateContains(String text) { 388 assertTrue(mViews.callLocationAndDate.getText().toString().contains(text)); 389 } 390 391 /** Asserts that the location and date text field exactly equals the given string value. */ 392 private void assertLocationAndDateExactEquals(String text) { 393 assertEquals(text, mViews.callLocationAndDate.getText()); 394 } 395 396 /** Asserts that the via number is correct. */ 397 private void assertViaNumberEquals(String text) { 398 final String callAccountText = 399 mContext.getResources().getString(R.string.description_via_number, text); 400 assertEquals(callAccountText, mViews.callAccountLabel.getText()); 401 } 402 403 /** Asserts that the account label is correct. */ 404 private void assertAccountLabelEquals(String text) { 405 assertEquals(text, mViews.callAccountLabel.getText()); 406 } 407 408 /** Asserts that the account label is correct when also showing the via number. */ 409 private void assertAccountLabelEquals(String viaNumber, String accountLabel) { 410 final String viaNumberText = 411 mContext.getResources().getString(R.string.description_via_number, viaNumber); 412 assertEquals(accountLabel + " " + viaNumberText, mViews.callAccountLabel.getText()); 413 } 414 415 /** Asserts that the call account label is invisible. */ 416 private void assertCallAccountInvisible() { 417 assertEquals(mViews.callAccountLabel.getVisibility(), View.GONE); 418 } 419 420 /** Asserts that the duration is exactly as included in the location and date text field. */ 421 private void assertDurationExactEquals(String text) { 422 Matcher matcher = Pattern.compile("(.*) (\\u2022) (\\d{2}:\\d{2})").matcher( 423 mViews.callLocationAndDate.getText()); 424 assertEquals(true, matcher.matches()); 425 assertEquals(text, matcher.group(3)); 426 } 427 428 /** Asserts that the video icon is shown. */ 429 private void assertIsVideoCall(boolean isVideoCall) { 430 assertEquals(isVideoCall, mViews.callTypeIcons.isVideoShown()); 431 } 432 433 /** Asserts that the call type contains the images with the given drawables. */ 434 private void assertCallTypeIconsEquals(int... ids) { 435 assertEquals(ids.length, mViews.callTypeIcons.getCount()); 436 for (int index = 0; index < ids.length; ++index) { 437 int id = ids[index]; 438 assertEquals(id, mViews.callTypeIcons.getCallType(index)); 439 } 440 assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility()); 441 } 442 443 /** 444 * Asserts that the call type contains the images with the given drawables and shows the given 445 * text next to the icons. 446 */ 447 private void assertCallTypeIconsEqualsPlusOverflow(String overflowText, int... ids) { 448 assertEquals(ids.length, mViews.callTypeIcons.getCount()); 449 for (int index = 0; index < ids.length; ++index) { 450 int id = ids[index]; 451 assertEquals(id, mViews.callTypeIcons.getCallType(index)); 452 } 453 assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility()); 454 assertTrue(mViews.callLocationAndDate.getText().toString().contains(overflowText)); 455 assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday")); 456 } 457 458 /** Sets the phone call details with default values and the given number. */ 459 private void setPhoneCallDetailsWithNumber(String number, int presentation, 460 String formattedNumber) { 461 PhoneCallDetails details = getPhoneCallDetails(number, presentation, formattedNumber); 462 details.callTypes = new int[]{ AppCompatConstants.CALLS_VOICEMAIL_TYPE }; 463 mHelper.setPhoneCallDetails(mViews, details); 464 } 465 466 /** Sets the phone call details with default values and the given via number. */ 467 private void setPhoneCallDetailsWithViaNumber(String viaNumber) { 468 PhoneCallDetails details = getPhoneCallDetails(); 469 mPhoneUtils.setAccountLabel(""); 470 details.viaNumber = viaNumber; 471 mHelper.setPhoneCallDetails(mViews, details); 472 } 473 474 /** Sets the phone call details with an account handle. */ 475 private void setPhoneCallDetailsWithAccountHandle() { 476 PhoneCallDetails details = getPhoneCallDetails(); 477 details.accountHandle = new PhoneAccountHandle(new ComponentName("",""), ""); 478 mHelper.setPhoneCallDetails(mViews, details); 479 } 480 481 /** Sets the phone call details with an account handle and via number */ 482 private void setPhoneCallDetailsWithAccountLabelViaNumber(String viaNumber) { 483 PhoneCallDetails details = getPhoneCallDetails(); 484 details.viaNumber = viaNumber; 485 details.accountHandle = new PhoneAccountHandle(new ComponentName("",""), ""); 486 mHelper.setPhoneCallDetails(mViews, details); 487 } 488 489 /** Populates the phone call details with the Defaults. */ 490 private void setDefaultPhoneCallDetailsNoViaNumber() { 491 PhoneCallDetails details = getPhoneCallDetails(); 492 mPhoneUtils.setAccountLabel(""); 493 mHelper.setPhoneCallDetails(mViews, details); 494 } 495 496 /** Sets the phone call details with default values and the given number. */ 497 private void setPhoneCallDetailsWithNumberAndGeocode( 498 String number, String formattedNumber, String geocodedLocation) { 499 PhoneCallDetails details = getPhoneCallDetails( 500 number, Calls.PRESENTATION_ALLOWED, formattedNumber); 501 details.geocode = geocodedLocation; 502 mHelper.setPhoneCallDetails(mViews, details); 503 } 504 505 /** Sets the phone call details with default values and the given date. */ 506 private void setPhoneCallDetailsWithDate(long date) { 507 PhoneCallDetails details = getPhoneCallDetails(); 508 details.date = date; 509 mHelper.setPhoneCallDetails(mViews, details); 510 } 511 512 private void setVoicemailPhoneCallDetailsWithDate(long date) { 513 PhoneCallDetails details = getPhoneCallDetails(); 514 details.date = date; 515 details.callTypes = new int[] {Calls.VOICEMAIL_TYPE}; 516 mHelper.setPhoneCallDetails(mViews, details); 517 } 518 519 /** Sets the voice mail details with default values and the given duration. */ 520 private void setVoicemailPhoneCallDetailsWithDuration(long duration) { 521 PhoneCallDetails details = getPhoneCallDetails(); 522 details.duration = duration; 523 details.callTypes = new int[] {Calls.VOICEMAIL_TYPE}; 524 mHelper.setPhoneCallDetails(mViews, details); 525 } 526 527 /** Sets the phone call details with default values and the given call types using icons. */ 528 private void setPhoneCallDetailsWithCallTypeIcons(int... callTypes) { 529 PhoneCallDetails details = getPhoneCallDetails(); 530 details.callTypes = callTypes; 531 mHelper.setPhoneCallDetails(mViews, details); 532 } 533 534 private void setCallDetailsHeaderWithNumber(String number, int presentation) { 535 mHelper.setCallDetailsHeader(mNameView, 536 getPhoneCallDetails(number, presentation, TEST_FORMATTED_NUMBER)); 537 } 538 539 private void setCallDetailsHeader(String name) { 540 PhoneCallDetails details = getPhoneCallDetails(); 541 details.namePrimary = name; 542 mHelper.setCallDetailsHeader(mNameView, details); 543 } 544 545 private PhoneCallDetails getPhoneCallDetails() { 546 PhoneCallDetails details = new PhoneCallDetails( 547 mContext, 548 TEST_NUMBER, 549 Calls.PRESENTATION_ALLOWED, 550 TEST_FORMATTED_NUMBER, 551 EMPTY_POSTDIAL, 552 false /* isVoicemail */); 553 setDefaultDetails(details); 554 return details; 555 } 556 557 private PhoneCallDetails getPhoneCallDetails( 558 String number, int presentation, String formattedNumber) { 559 PhoneCallDetails details = new PhoneCallDetails( 560 mContext, 561 number, 562 presentation, 563 formattedNumber, 564 EMPTY_POSTDIAL, 565 isVoicemail(number)); 566 setDefaultDetails(details); 567 return details; 568 } 569 570 private void setDefaultDetails(PhoneCallDetails details) { 571 details.callTypes = new int[]{ AppCompatConstants.CALLS_INCOMING_TYPE }; 572 details.countryIso = TEST_COUNTRY_ISO; 573 details.date = TEST_DATE; 574 details.duration = TEST_DURATION; 575 details.geocode = TEST_GEOCODE; 576 } 577 578 private boolean isVoicemail(String number) { 579 return number.equals(TEST_VOICEMAIL_NUMBER); 580 } 581 } 582