15ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee/* 25ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Copyright (C) 2012 The Android Open Source Project 35ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 45ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Licensed under the Apache License, Version 2.0 (the "License"); 55ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * you may not use this file except in compliance with the License. 65ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * You may obtain a copy of the License at 75ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 85ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * http://www.apache.org/licenses/LICENSE-2.0 95ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Unless required by applicable law or agreed to in writing, software 115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * distributed under the License is distributed on an "AS IS" BASIS, 125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * See the License for the specific language governing permissions and 145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * limitations under the License. 155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leepackage com.android.contacts.common.model; 185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.content.ContentValues; 205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.content.Context; 215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.net.Uri; 225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.CommonDataKinds.Photo; 235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.Data; 245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.Directory; 255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport android.provider.ContactsContract.DisplayNameSources; 265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.GroupMetaData; 285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.model.account.AccountType; 295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.android.contacts.common.util.DataStatus; 305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.google.common.annotations.VisibleForTesting; 325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.google.common.collect.ImmutableList; 335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport com.google.common.collect.ImmutableMap; 345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport java.util.ArrayList; 365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leeimport java.util.Collections; 375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee/** 395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * A Contact represents a single person or logical entity as perceived by the user. The information 405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * about a contact can come from multiple data sources, which are each represented by a RawContact 415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * object. Thus, a Contact is associated with a collection of RawContact objects. 425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * The aggregation of raw contacts into a single contact is performed automatically, and it is 445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * also possible for users to manually split and join raw contacts into various contacts. 455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * 465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Only the {@link ContactLoader} class can create a Contact object with various flags to allow 475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * partial loading of contact data. Thus, an instance of this class should be treated as 485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * a read-only object. 495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Leepublic class Contact { 515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private enum Status { 525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** Contact is successfully loaded */ 535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee LOADED, 545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** There was an error loading the contact */ 555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ERROR, 565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** Contact is not found */ 575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee NOT_FOUND, 585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Uri mRequestedUri; 615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Uri mLookupUri; 625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Uri mUri; 635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final long mDirectoryId; 645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mLookupKey; 655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final long mId; 665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final long mNameRawContactId; 675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final int mDisplayNameSource; 685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final long mPhotoId; 695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mPhotoUri; 705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mDisplayName; 715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mAltDisplayName; 725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mPhoneticName; 735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final boolean mStarred; 745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Integer mPresence; 755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private ImmutableList<RawContact> mRawContacts; 765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private ImmutableMap<Long,DataStatus> mStatuses; 775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private ImmutableList<AccountType> mInvitableAccountTypes; 785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private String mDirectoryDisplayName; 805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private String mDirectoryType; 815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private String mDirectoryAccountType; 825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private String mDirectoryAccountName; 835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private int mDirectoryExportSupport; 845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private ImmutableList<GroupMetaData> mGroups; 865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private byte[] mPhotoBinaryData; 8878c550493787bc702a80f124c1eda067cffb9444Brian Attwell /** 8978c550493787bc702a80f124c1eda067cffb9444Brian Attwell * Small version of the contact photo loaded from a blob instead of from a file. If a large 9078c550493787bc702a80f124c1eda067cffb9444Brian Attwell * contact photo is not available yet, then this has the same value as mPhotoBinaryData. 9178c550493787bc702a80f124c1eda067cffb9444Brian Attwell */ 9278c550493787bc702a80f124c1eda067cffb9444Brian Attwell private byte[] mThumbnailPhotoBinaryData; 935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final boolean mSendToVoicemail; 945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final String mCustomRingtone; 955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final boolean mIsUserProfile; 965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Contact.Status mStatus; 985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private final Exception mException; 995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 1015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Constructor for special results, namely "no contact found" and "error". 1025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 1035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee private Contact(Uri requestedUri, Contact.Status status, Exception exception) { 1045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee if (status == Status.ERROR && exception == null) { 1055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee throw new IllegalArgumentException("ERROR result must have exception"); 1065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatus = status; 1085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mException = exception; 1095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRequestedUri = requestedUri; 1105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupUri = null; 1115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mUri = null; 1125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryId = -1; 1135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupKey = null; 1145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mId = -1; 1155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRawContacts = null; 1165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatuses = null; 1175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mNameRawContactId = -1; 1185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayNameSource = DisplayNameSources.UNDEFINED; 1195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoId = -1; 1205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoUri = null; 1215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayName = null; 1225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mAltDisplayName = null; 1235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhoneticName = null; 1245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStarred = false; 1255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPresence = null; 1265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mInvitableAccountTypes = null; 1275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mSendToVoicemail = false; 1285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mCustomRingtone = null; 1295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mIsUserProfile = false; 1305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public static Contact forError(Uri requestedUri, Exception exception) { 1335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return new Contact(requestedUri, Status.ERROR, exception); 1345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public static Contact forNotFound(Uri requestedUri) { 1375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return new Contact(requestedUri, Status.NOT_FOUND, null); 1385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 1415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Constructor to call when contact was found 1425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 1435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Contact(Uri requestedUri, Uri uri, Uri lookupUri, long directoryId, String lookupKey, 1445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee long id, long nameRawContactId, int displayNameSource, long photoId, 1455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee String photoUri, String displayName, String altDisplayName, String phoneticName, 1465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee boolean starred, Integer presence, boolean sendToVoicemail, String customRingtone, 1475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee boolean isUserProfile) { 1485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatus = Status.LOADED; 1495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mException = null; 1505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRequestedUri = requestedUri; 1515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupUri = lookupUri; 1525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mUri = uri; 1535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryId = directoryId; 1545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupKey = lookupKey; 1555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mId = id; 1565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRawContacts = null; 1575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatuses = null; 1585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mNameRawContactId = nameRawContactId; 1595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayNameSource = displayNameSource; 1605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoId = photoId; 1615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoUri = photoUri; 1625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayName = displayName; 1635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mAltDisplayName = altDisplayName; 1645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhoneticName = phoneticName; 1655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStarred = starred; 1665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPresence = presence; 1675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mInvitableAccountTypes = null; 1685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mSendToVoicemail = sendToVoicemail; 1695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mCustomRingtone = customRingtone; 1705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mIsUserProfile = isUserProfile; 1715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 1725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Contact(Uri requestedUri, Contact from) { 1745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRequestedUri = requestedUri; 1755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatus = from.mStatus; 1775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mException = from.mException; 1785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupUri = from.mLookupUri; 1795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mUri = from.mUri; 1805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryId = from.mDirectoryId; 1815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mLookupKey = from.mLookupKey; 1825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mId = from.mId; 1835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mNameRawContactId = from.mNameRawContactId; 1845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayNameSource = from.mDisplayNameSource; 1855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoId = from.mPhotoId; 1865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoUri = from.mPhotoUri; 1875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDisplayName = from.mDisplayName; 1885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mAltDisplayName = from.mAltDisplayName; 1895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhoneticName = from.mPhoneticName; 1905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStarred = from.mStarred; 1915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPresence = from.mPresence; 1925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRawContacts = from.mRawContacts; 1935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatuses = from.mStatuses; 1945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mInvitableAccountTypes = from.mInvitableAccountTypes; 1955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 1965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryDisplayName = from.mDirectoryDisplayName; 1975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryType = from.mDirectoryType; 1985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryAccountType = from.mDirectoryAccountType; 1995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryAccountName = from.mDirectoryAccountName; 2005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryExportSupport = from.mDirectoryExportSupport; 2015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mGroups = from.mGroups; 2035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoBinaryData = from.mPhotoBinaryData; 2055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mSendToVoicemail = from.mSendToVoicemail; 2065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mCustomRingtone = from.mCustomRingtone; 2075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mIsUserProfile = from.mIsUserProfile; 2085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @param exportSupport See {@link Directory#EXPORT_SUPPORT}. 2125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public void setDirectoryMetaData(String displayName, String directoryType, 2145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee String accountType, String accountName, int exportSupport) { 2155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryDisplayName = displayName; 2165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryType = directoryType; 2175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryAccountType = accountType; 2185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryAccountName = accountName; 2195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mDirectoryExportSupport = exportSupport; 2205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ void setPhotoBinaryData(byte[] photoBinaryData) { 2235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mPhotoBinaryData = photoBinaryData; 2245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 22678c550493787bc702a80f124c1eda067cffb9444Brian Attwell /* package */ void setThumbnailPhotoBinaryData(byte[] photoBinaryData) { 22778c550493787bc702a80f124c1eda067cffb9444Brian Attwell mThumbnailPhotoBinaryData = photoBinaryData; 22878c550493787bc702a80f124c1eda067cffb9444Brian Attwell } 22978c550493787bc702a80f124c1eda067cffb9444Brian Attwell 2305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Returns the URI for the contact that contains both the lookup key and the ID. This is 2325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * the best URI to reference a contact. 2335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * For directory contacts, this is the same a the URI as returned by {@link #getUri()} 2345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Uri getLookupUri() { 2365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mLookupUri; 2375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getLookupKey() { 2405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mLookupKey; 2415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Returns the contact Uri that was passed to the provider to make the query. This is 2455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * the same as the requested Uri, unless the requested Uri doesn't specify a Contact: 2465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * If it either references a Raw-Contact or a Person (a pre-Eclair style Uri), this Uri will 2475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * always reference the full aggregate contact. 2485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Uri getUri() { 2505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mUri; 2515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Returns the URI for which this {@link ContactLoader) was initially requested. 2555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Uri getRequestedUri() { 2575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mRequestedUri; 2585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Instantiate a new RawContactDeltaList for this contact. 2625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public RawContactDeltaList createRawContactDeltaList() { 2645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return RawContactDeltaList.fromIterator(getRawContacts().iterator()); 2655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Returns the contact ID. 2695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee @VisibleForTesting 2715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ long getId() { 2725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mId; 2735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return true when an exception happened during loading, in which case 2775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * {@link #getException} returns the actual exception object. 2785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If 2795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false}, 2805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * and vice versa. 2815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isError() { 2835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mStatus == Status.ERROR; 2845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Exception getException() { 2875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mException; 2885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 2905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 2915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return true when the specified contact is not found. 2925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If 2935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false}, 2945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * and vice versa. 2955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 2965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isNotFound() { 2975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mStatus == Status.NOT_FOUND; 2985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 2995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 3015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return true if the specified contact is successfully loaded. 3025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * i.e. neither {@link #isError()} nor {@link #isNotFound()}. 3035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 3045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isLoaded() { 3055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mStatus == Status.LOADED; 3065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public long getNameRawContactId() { 3095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mNameRawContactId; 3105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public int getDisplayNameSource() { 3135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDisplayNameSource; 3145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3166084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee /** 3176084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee * Used by various classes to determine whether or not this contact should be displayed as 3186084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee * a business rather than a person. 3196084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee */ 3206084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee public boolean isDisplayNameFromOrganization() { 3216084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee return DisplayNameSources.ORGANIZATION == mDisplayNameSource; 3226084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee } 3236084726fbdda78bdb16e2d4cc1c3b81c84fd5da1Yorke Lee 3245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public long getPhotoId() { 3255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mPhotoId; 3265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getPhotoUri() { 3295ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mPhotoUri; 3305ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3315ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3325ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getDisplayName() { 3335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDisplayName; 3345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getAltDisplayName() { 3375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mAltDisplayName; 3385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getPhoneticName() { 3415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mPhoneticName; 3425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean getStarred() { 3455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mStarred; 3465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public Integer getPresence() { 3495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mPresence; 3505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 3535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * This can return non-null invitable account types only if the {@link ContactLoader} was 3545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * configured to load invitable account types in its constructor. 3555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return 3565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 3575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public ImmutableList<AccountType> getInvitableAccountTypes() { 3585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mInvitableAccountTypes; 3595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public ImmutableList<RawContact> getRawContacts() { 3625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mRawContacts; 3635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public ImmutableMap<Long, DataStatus> getStatuses() { 3665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mStatuses; 3675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public long getDirectoryId() { 3705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryId; 3715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isDirectoryEntry() { 3745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryId != -1 && mDirectoryId != Directory.DEFAULT 3755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee && mDirectoryId != Directory.LOCAL_INVISIBLE; 3765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 3795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return true if this is a contact (not group, etc.) with at least one 3805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * writable raw-contact, and false otherwise. 3815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 3825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isWritableContact(final Context context) { 3835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return getFirstWritableRawContactId(context) != -1; 3845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 3855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 3875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * Return the ID of the first raw-contact in the contact data that belongs to a 3885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * contact-writable account, or -1 if no such entity exists. 3895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 3905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public long getFirstWritableRawContactId(final Context context) { 3915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Directory entries are non-writable 3925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee if (isDirectoryEntry()) return -1; 3935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 3945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // Iterate through raw-contacts; if we find a writable on, return its ID. 3955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee for (RawContact rawContact : getRawContacts()) { 3965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee AccountType accountType = rawContact.getAccountType(context); 3975ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee if (accountType != null && accountType.areContactsWritable()) { 3985ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return rawContact.getId(); 3995ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4005ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4015ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // No writable raw-contact was found. 4025ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return -1; 4035ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4045ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4055ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public int getDirectoryExportSupport() { 4065ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryExportSupport; 4075ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4085ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4095ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getDirectoryDisplayName() { 4105ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryDisplayName; 4115ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4125ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4135ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getDirectoryType() { 4145ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryType; 4155ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4165ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4175ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getDirectoryAccountType() { 4185ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryAccountType; 4195ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4205ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4215ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getDirectoryAccountName() { 4225ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mDirectoryAccountName; 4235ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4245ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4255ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public byte[] getPhotoBinaryData() { 4265ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mPhotoBinaryData; 4275ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4285ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 42978c550493787bc702a80f124c1eda067cffb9444Brian Attwell public byte[] getThumbnailPhotoBinaryData() { 43078c550493787bc702a80f124c1eda067cffb9444Brian Attwell return mThumbnailPhotoBinaryData; 43178c550493787bc702a80f124c1eda067cffb9444Brian Attwell } 43278c550493787bc702a80f124c1eda067cffb9444Brian Attwell 4335ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public ArrayList<ContentValues> getContentValues() { 4345ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee if (mRawContacts.size() != 1) { 4355ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee throw new IllegalStateException( 4365ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee "Cannot extract content values from an aggregated contact"); 4375ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4385ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4395ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee RawContact rawContact = mRawContacts.get(0); 4405ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ArrayList<ContentValues> result = rawContact.getContentValues(); 4415ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4425ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // If the photo was loaded using the URI, create an entry for the photo 4435ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee // binary data. 4445ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee if (mPhotoId == 0 && mPhotoBinaryData != null) { 4455ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ContentValues photo = new ContentValues(); 4465ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee photo.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE); 4475ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee photo.put(Photo.PHOTO, mPhotoBinaryData); 4485ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee result.add(photo); 4495ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4505ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4515ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return result; 4525ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4535ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4545ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /** 4555ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * This can return non-null group meta-data only if the {@link ContactLoader} was configured to 4565ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * load group metadata in its constructor. 4575ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee * @return 4585ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee */ 4595ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public ImmutableList<GroupMetaData> getGroupMetaData() { 4605ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mGroups; 4615ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4625ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4635ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isSendToVoicemail() { 4645ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mSendToVoicemail; 4655ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4665ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4675ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String getCustomRingtone() { 4685ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mCustomRingtone; 4695ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4705ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4715ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public boolean isUserProfile() { 4725ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return mIsUserProfile; 4735ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4745ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4755ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee @Override 4765ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee public String toString() { 4775ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey + 4785ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee ",uri=" + mUri + ",status=" + mStatus + "}"; 4795ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4805ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4815ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ void setRawContacts(ImmutableList<RawContact> rawContacts) { 4825ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mRawContacts = rawContacts; 4835ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4845ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4855ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ void setStatuses(ImmutableMap<Long, DataStatus> statuses) { 4865ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mStatuses = statuses; 4875ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4885ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4895ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ void setInvitableAccountTypes(ImmutableList<AccountType> accountTypes) { 4905ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mInvitableAccountTypes = accountTypes; 4915ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4925ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee 4935ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee /* package */ void setGroupMetaData(ImmutableList<GroupMetaData> groups) { 4945ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee mGroups = groups; 4955ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee } 4965ade0bb1757b216ace2f50d2357409bf9876a07aYorke Lee} 497