1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2011 The Android Open Source Project 3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License. 6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at 7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and 14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License. 15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.dialer.calllogutils; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.Context; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.res.Resources; 21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.net.Uri; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.provider.CallLog; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.provider.CallLog.Calls; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.Nullable; 25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.telecom.PhoneAccountHandle; 26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils; 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.ContactsUtils.UserType; 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.preference.ContactsPreferences; 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.util.ContactDisplayUtils; 308369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.logging.ContactSource; 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.phonenumbercache.ContactInfo; 32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/** The details of a phone call to be shown in the UI. */ 34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic class PhoneCallDetails { 35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The number of the other party involved in the call. 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence number; 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Post-dial digits associated with the outgoing call. 39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String postDialDigits; 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The secondary line number the call was received via. 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String viaNumber; 42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The number presenting rules set by the network, e.g., {@link Calls#PRESENTATION_ALLOWED} 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int numberPresentation; 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The country corresponding with the phone number. 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String countryIso; 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The geocoded location for the phone number. 47ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String geocode; 48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 49ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 50ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * The type of calls, as defined in the call log table, e.g., {@link Calls#INCOMING_TYPE}. 51ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * <p>There might be multiple types if this represents a set of entries grouped together. 53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int[] callTypes; 55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The date of the call, in milliseconds since the epoch. 57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public long date; 58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The duration of the call in milliseconds, or 0 for missed calls. 59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public long duration; 60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The name of the contact, or the empty string. 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence namePrimary; 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The alternative name of the contact, e.g. last name first, or the empty string 63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence nameAlternative; 64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * The user's preference on name display order, last name first or first time first. {@see 66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * ContactsPreferences} 67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int nameDisplayOrder; 69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The type of phone, e.g., {@link Phone#TYPE_HOME}, 0 if not available. 70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int numberType; 71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The custom label associated with the phone number in the contact, or the empty string. 72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence numberLabel; 73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The URI of the contact associated with this phone call. 74ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public Uri contactUri; 75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * The photo URI of the picture of the contact that is associated with this phone call or null if 78ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * there is none. 79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * <p>This is meant to store the high-res photo only. 81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public Uri photoUri; 83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The source type of the contact associated with this call. 858369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian public ContactSource.Type sourceType; 86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The object id type of the contact associated with this call. 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String objectId; 89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The unique identifier for the account associated with the call. 91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public PhoneAccountHandle accountHandle; 92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Features applicable to this call. 94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int features; 95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Total data usage for this call. 97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public Long dataUsage; 98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Voicemail transcription 100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String transcription; 101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // The display string for the number. 103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String displayNumber; 104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 105ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Whether the contact number is a voicemail number. 106ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean isVoicemail; 107ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 108ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** The {@link UserType} of the contact */ 109ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public @UserType long contactUserType; 110ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 111ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 112ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * If this is a voicemail, whether the message is read. For other types of calls, this defaults to 113ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * {@code true}. 114ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 115ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean isRead = true; 116ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 117ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // If this call is a spam number. 118ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean isSpam = false; 119ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 120ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // If this call is a blocked number. 121ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean isBlocked = false; 122ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 123ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Call location and date text. 124ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence callLocationAndDate; 125ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 126ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Call description. 127ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence callDescription; 128ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String accountComponentName; 129ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public String accountId; 130ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public ContactInfo cachedContactInfo; 131ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int voicemailId; 132ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public int previousGroup; 133ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 134ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 135ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Constructor with required fields for the details of a call with a number associated with a 136ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * contact. 137ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 138ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public PhoneCallDetails( 139ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence number, int numberPresentation, CharSequence postDialDigits) { 140ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.number = number; 141ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.numberPresentation = numberPresentation; 142ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian this.postDialDigits = postDialDigits.toString(); 143ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 144ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 145ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Construct the "on {accountLabel} via {viaNumber}" accessibility description for the account 146ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * list item, depending on the existence of the accountLabel and viaNumber. 147ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 148ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param viaNumber The number that this call is being placed via. 149ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param accountLabel The {@link PhoneAccount} label that this call is being placed with. 150ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @return The description of the account that this call has been placed on. 151ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 152ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static CharSequence createAccountLabelDescription( 153ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Resources resources, @Nullable String viaNumber, @Nullable CharSequence accountLabel) { 154ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 155ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if ((!TextUtils.isEmpty(viaNumber)) && !TextUtils.isEmpty(accountLabel)) { 156ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian String msg = 157ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian resources.getString( 158ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian R.string.description_via_number_phone_account, accountLabel, viaNumber); 159ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence accountNumberLabel = 160ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ContactDisplayUtils.getTelephoneTtsSpannable(msg, viaNumber); 161ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return (accountNumberLabel == null) ? msg : accountNumberLabel; 162ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else if (!TextUtils.isEmpty(viaNumber)) { 163ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence viaNumberLabel = 164ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ContactDisplayUtils.getTtsSpannedPhoneNumber( 165ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian resources, R.string.description_via_number, viaNumber); 166ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return (viaNumberLabel == null) ? viaNumber : viaNumberLabel; 167ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else if (!TextUtils.isEmpty(accountLabel)) { 168ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return TextUtils.expandTemplate( 169ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian resources.getString(R.string.description_phone_account), accountLabel); 170ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 171ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return ""; 172ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 173ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 174ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 175ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Returns the preferred name for the call details as specified by the {@link #nameDisplayOrder} 176ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 177ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @return the preferred name 178ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 179ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public CharSequence getPreferredName() { 180ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (nameDisplayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY 181ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian || TextUtils.isEmpty(nameAlternative)) { 182ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return namePrimary; 183ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 184ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return nameAlternative; 185ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 186ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 187ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public void updateDisplayNumber( 188ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, CharSequence formattedNumber, boolean isVoicemail) { 189ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian displayNumber = 190ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian PhoneNumberDisplayUtil.getDisplayNumber( 191ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian context, number, numberPresentation, formattedNumber, postDialDigits, isVoicemail) 192ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian .toString(); 193ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 194ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 195ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public boolean hasIncomingCalls() { 196ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian for (int i = 0; i < callTypes.length; i++) { 197ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (callTypes[i] == CallLog.Calls.INCOMING_TYPE 198ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian || callTypes[i] == CallLog.Calls.MISSED_TYPE 199ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian || callTypes[i] == CallLog.Calls.VOICEMAIL_TYPE 200ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian || callTypes[i] == CallLog.Calls.REJECTED_TYPE 201ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian || callTypes[i] == CallLog.Calls.BLOCKED_TYPE) { 202ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return true; 203ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 204ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 205ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return false; 206ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 207ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 208