Home | History | Annotate | Download | only in phonenumbercache
      1 /*
      2  * Copyright (C) 2011 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.phonenumbercache;
     18 
     19 import android.net.Uri;
     20 import android.support.annotation.NonNull;
     21 import android.text.TextUtils;
     22 import com.android.contacts.common.ContactsUtils.UserType;
     23 import com.android.dialer.logging.ContactSource;
     24 import com.android.dialer.util.UriUtils;
     25 
     26 /** Information for a contact as needed by the Call Log. */
     27 public class ContactInfo {
     28 
     29   public static final ContactInfo EMPTY = new ContactInfo();
     30   public Uri lookupUri;
     31   /**
     32    * Contact lookup key. Note this may be a lookup key for a corp contact, in which case "lookup by
     33    * lookup key" doesn't work on the personal profile.
     34    */
     35   public String lookupKey;
     36 
     37   public String name;
     38   public String nameAlternative;
     39   public int type;
     40   public String label;
     41   public String number;
     42   public String formattedNumber;
     43   public String geoDescription;
     44   /*
     45    * ContactInfo.normalizedNumber is a column value returned by PhoneLookup query. By definition,
     46    * it's E164 representation.
     47    * http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns.
     48    * html#NORMALIZED_NUMBER.
     49    *
     50    * The fallback value, when PhoneLookup fails or else, should be either null or
     51    * PhoneNumberUtils.formatNumberToE164.
     52    */
     53   public String normalizedNumber;
     54   /** The photo for the contact, if available. */
     55   public long photoId;
     56   /** The high-res photo for the contact, if available. */
     57   public Uri photoUri;
     58 
     59   public boolean isBadData;
     60   public String objectId;
     61   public @UserType long userType;
     62   public @NonNull ContactSource.Type sourceType = ContactSource.Type.UNKNOWN_SOURCE_TYPE;
     63   /**
     64    * True if local contact exists. This is only used for Cequint Caller ID so it won't overwrite
     65    * photo if local contact exists.
     66    */
     67   public boolean contactExists;
     68 
     69   /** @see android.provider.ContactsContract.CommonDataKinds.Phone#CARRIER_PRESENCE */
     70   public int carrierPresence;
     71 
     72   @Override
     73   public int hashCode() {
     74     // Uses only name and contactUri to determine hashcode.
     75     // This should be sufficient to have a reasonable distribution of hash codes.
     76     // Moreover, there should be no two people with the same lookupUri.
     77     final int prime = 31;
     78     int result = 1;
     79     result = prime * result + ((lookupUri == null) ? 0 : lookupUri.hashCode());
     80     result = prime * result + ((name == null) ? 0 : name.hashCode());
     81     return result;
     82   }
     83 
     84   @Override
     85   public boolean equals(Object obj) {
     86     if (this == obj) {
     87       return true;
     88     }
     89     if (obj == null) {
     90       return false;
     91     }
     92     if (getClass() != obj.getClass()) {
     93       return false;
     94     }
     95     ContactInfo other = (ContactInfo) obj;
     96     if (!UriUtils.areEqual(lookupUri, other.lookupUri)) {
     97       return false;
     98     }
     99     if (!TextUtils.equals(name, other.name)) {
    100       return false;
    101     }
    102     if (!TextUtils.equals(nameAlternative, other.nameAlternative)) {
    103       return false;
    104     }
    105     if (type != other.type) {
    106       return false;
    107     }
    108     if (!TextUtils.equals(label, other.label)) {
    109       return false;
    110     }
    111     if (!TextUtils.equals(number, other.number)) {
    112       return false;
    113     }
    114     if (!TextUtils.equals(formattedNumber, other.formattedNumber)) {
    115       return false;
    116     }
    117     if (!TextUtils.equals(normalizedNumber, other.normalizedNumber)) {
    118       return false;
    119     }
    120     if (photoId != other.photoId) {
    121       return false;
    122     }
    123     if (!UriUtils.areEqual(photoUri, other.photoUri)) {
    124       return false;
    125     }
    126     if (!TextUtils.equals(objectId, other.objectId)) {
    127       return false;
    128     }
    129     if (userType != other.userType) {
    130       return false;
    131     }
    132     if (carrierPresence != other.carrierPresence) {
    133       return false;
    134     }
    135     if (!TextUtils.equals(geoDescription, other.geoDescription)) {
    136       return false;
    137     }
    138     return true;
    139   }
    140 
    141   @Override
    142   public String toString() {
    143     return "ContactInfo{"
    144         + "lookupUri="
    145         + lookupUri
    146         + ", name='"
    147         + name
    148         + '\''
    149         + ", nameAlternative='"
    150         + nameAlternative
    151         + '\''
    152         + ", type="
    153         + type
    154         + ", label='"
    155         + label
    156         + '\''
    157         + ", number='"
    158         + number
    159         + '\''
    160         + ", formattedNumber='"
    161         + formattedNumber
    162         + '\''
    163         + ", normalizedNumber='"
    164         + normalizedNumber
    165         + '\''
    166         + ", photoId="
    167         + photoId
    168         + ", photoUri="
    169         + photoUri
    170         + ", objectId='"
    171         + objectId
    172         + '\''
    173         + ", userType="
    174         + userType
    175         + ", carrierPresence="
    176         + carrierPresence
    177         + ", geoDescription="
    178         + geoDescription
    179         + '}';
    180   }
    181 }
    182