/* * 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.phonenumbercache; import android.net.Uri; import android.support.annotation.NonNull; import android.text.TextUtils; import com.android.contacts.common.ContactsUtils.UserType; import com.android.dialer.logging.ContactSource; import com.android.dialer.util.UriUtils; /** Information for a contact as needed by the Call Log. */ public class ContactInfo { public static final ContactInfo EMPTY = new ContactInfo(); public Uri lookupUri; /** * Contact lookup key. Note this may be a lookup key for a corp contact, in which case "lookup by * lookup key" doesn't work on the personal profile. */ public String lookupKey; public String name; public String nameAlternative; public int type; public String label; public String number; public String formattedNumber; public String geoDescription; /* * ContactInfo.normalizedNumber is a column value returned by PhoneLookup query. By definition, * it's E164 representation. * http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns. * html#NORMALIZED_NUMBER. * * The fallback value, when PhoneLookup fails or else, should be either null or * PhoneNumberUtils.formatNumberToE164. */ public String normalizedNumber; /** The photo for the contact, if available. */ public long photoId; /** The high-res photo for the contact, if available. */ public Uri photoUri; public boolean isBadData; public String objectId; public @UserType long userType; public @NonNull ContactSource.Type sourceType = ContactSource.Type.UNKNOWN_SOURCE_TYPE; /** * True if local contact exists. This is only used for Cequint Caller ID so it won't overwrite * photo if local contact exists. */ public boolean contactExists; /** @see android.provider.ContactsContract.CommonDataKinds.Phone#CARRIER_PRESENCE */ public int carrierPresence; @Override public int hashCode() { // Uses only name and contactUri to determine hashcode. // This should be sufficient to have a reasonable distribution of hash codes. // Moreover, there should be no two people with the same lookupUri. final int prime = 31; int result = 1; result = prime * result + ((lookupUri == null) ? 0 : lookupUri.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } ContactInfo other = (ContactInfo) obj; if (!UriUtils.areEqual(lookupUri, other.lookupUri)) { return false; } if (!TextUtils.equals(name, other.name)) { return false; } if (!TextUtils.equals(nameAlternative, other.nameAlternative)) { return false; } if (type != other.type) { return false; } if (!TextUtils.equals(label, other.label)) { return false; } if (!TextUtils.equals(number, other.number)) { return false; } if (!TextUtils.equals(formattedNumber, other.formattedNumber)) { return false; } if (!TextUtils.equals(normalizedNumber, other.normalizedNumber)) { return false; } if (photoId != other.photoId) { return false; } if (!UriUtils.areEqual(photoUri, other.photoUri)) { return false; } if (!TextUtils.equals(objectId, other.objectId)) { return false; } if (userType != other.userType) { return false; } if (carrierPresence != other.carrierPresence) { return false; } if (!TextUtils.equals(geoDescription, other.geoDescription)) { return false; } return true; } @Override public String toString() { return "ContactInfo{" + "lookupUri=" + lookupUri + ", name='" + name + '\'' + ", nameAlternative='" + nameAlternative + '\'' + ", type=" + type + ", label='" + label + '\'' + ", number='" + number + '\'' + ", formattedNumber='" + formattedNumber + '\'' + ", normalizedNumber='" + normalizedNumber + '\'' + ", photoId=" + photoId + ", photoUri=" + photoUri + ", objectId='" + objectId + '\'' + ", userType=" + userType + ", carrierPresence=" + carrierPresence + ", geoDescription=" + geoDescription + '}'; } }