1851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu/* 2851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Copyright (C) 2012 The Android Open Source Project 3851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 4851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Licensed under the Apache License, Version 2.0 (the "License"); 5851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * you may not use this file except in compliance with the License. 6851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * You may obtain a copy of the License at 7851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 8851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * http://www.apache.org/licenses/LICENSE-2.0 9851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 10851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Unless required by applicable law or agreed to in writing, software 11851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * distributed under the License is distributed on an "AS IS" BASIS, 12851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * See the License for the specific language governing permissions and 14851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * limitations under the License. 15851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 16851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 17851222a96b5d68602fb361ea3527101e893f67e3Maurice Chupackage com.android.contacts.model; 18851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 19851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.ContentValues; 20851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.Context; 21851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.net.Uri; 22851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Photo; 23851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.Data; 24851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.Directory; 25851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.DisplayNameSources; 26851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 27851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.GroupMetaData; 28851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.account.AccountType; 29851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.dataitem.DataItem; 30851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.util.DataStatus; 31851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.util.StreamItemEntry; 32851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.google.common.annotations.VisibleForTesting; 33851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.google.common.collect.ImmutableList; 34851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.google.common.collect.ImmutableMap; 35851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 36851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport java.util.ArrayList; 37851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 38851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu/** 39851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * A Contact represents a single person or logical entity as perceived by the user. The information 40851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * about a contact can come from multiple data sources, which are each represented by a RawContact 41851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * object. Thus, a Contact is associated with a collection of RawContact objects. 42851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 43851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * The aggregation of raw contacts into a single contact is performed automatically, and it is 44851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * also possible for users to manually split and join raw contacts into various contacts. 45851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 46851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Only the {@link ContactLoader} class can create a Contact object with various flags to allow 47851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * partial loading of contact data. Thus, an instance of this class should be treated as 48851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * a read-only object. 49851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 50851222a96b5d68602fb361ea3527101e893f67e3Maurice Chupublic class Contact { 51851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private enum Status { 52851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** Contact is successfully loaded */ 53851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu LOADED, 54851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** There was an error loading the contact */ 55851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu ERROR, 56851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** Contact is not found */ 57851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu NOT_FOUND, 58851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 59851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 60851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Uri mRequestedUri; 61851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Uri mLookupUri; 62851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Uri mUri; 63851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final long mDirectoryId; 64851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mLookupKey; 65851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final long mId; 66851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final long mNameRawContactId; 67851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final int mDisplayNameSource; 68851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final long mPhotoId; 69851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mPhotoUri; 70851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mDisplayName; 71851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mAltDisplayName; 72851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mPhoneticName; 73851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final boolean mStarred; 74851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Integer mPresence; 75851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private ImmutableList<RawContact> mRawContacts; 76851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private ImmutableList<StreamItemEntry> mStreamItems; 77851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private ImmutableMap<Long,DataStatus> mStatuses; 78851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private ImmutableList<AccountType> mInvitableAccountTypes; 79851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 80851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private String mDirectoryDisplayName; 81851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private String mDirectoryType; 82851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private String mDirectoryAccountType; 83851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private String mDirectoryAccountName; 84851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private int mDirectoryExportSupport; 85851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 86851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private ImmutableList<GroupMetaData> mGroups; 87851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 88851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private byte[] mPhotoBinaryData; 89851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final boolean mSendToVoicemail; 90851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final String mCustomRingtone; 91851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final boolean mIsUserProfile; 92851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 93851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Contact.Status mStatus; 94851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Exception mException; 95851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 96851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 97851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Constructor for special results, namely "no contact found" and "error". 98851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 99851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private Contact(Uri requestedUri, Contact.Status status, Exception exception) { 100851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (status == Status.ERROR && exception == null) { 101851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu throw new IllegalArgumentException("ERROR result must have exception"); 102851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 103851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatus = status; 104851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mException = exception; 105851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRequestedUri = requestedUri; 106851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupUri = null; 107851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mUri = null; 108851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryId = -1; 109851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupKey = null; 110851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mId = -1; 111851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRawContacts = null; 112851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStreamItems = null; 113851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatuses = null; 114851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mNameRawContactId = -1; 115851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayNameSource = DisplayNameSources.UNDEFINED; 116851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoId = -1; 117851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoUri = null; 118851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayName = null; 119851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mAltDisplayName = null; 120851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhoneticName = null; 121851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStarred = false; 122851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPresence = null; 123851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mInvitableAccountTypes = null; 124851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mSendToVoicemail = false; 125851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mCustomRingtone = null; 126851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mIsUserProfile = false; 127851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 128851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 129851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public static Contact forError(Uri requestedUri, Exception exception) { 130851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return new Contact(requestedUri, Status.ERROR, exception); 131851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 132851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 133851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public static Contact forNotFound(Uri requestedUri) { 134851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return new Contact(requestedUri, Status.NOT_FOUND, null); 135851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 136851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 137851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 138851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Constructor to call when contact was found 139851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 140851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Contact(Uri requestedUri, Uri uri, Uri lookupUri, long directoryId, String lookupKey, 141851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu long id, long nameRawContactId, int displayNameSource, long photoId, 142851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu String photoUri, String displayName, String altDisplayName, String phoneticName, 143851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu boolean starred, Integer presence, boolean sendToVoicemail, String customRingtone, 144851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu boolean isUserProfile) { 145851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatus = Status.LOADED; 146851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mException = null; 147851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRequestedUri = requestedUri; 148851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupUri = lookupUri; 149851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mUri = uri; 150851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryId = directoryId; 151851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupKey = lookupKey; 152851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mId = id; 153851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRawContacts = null; 154851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStreamItems = null; 155851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatuses = null; 156851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mNameRawContactId = nameRawContactId; 157851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayNameSource = displayNameSource; 158851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoId = photoId; 159851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoUri = photoUri; 160851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayName = displayName; 161851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mAltDisplayName = altDisplayName; 162851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhoneticName = phoneticName; 163851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStarred = starred; 164851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPresence = presence; 165851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mInvitableAccountTypes = null; 166851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mSendToVoicemail = sendToVoicemail; 167851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mCustomRingtone = customRingtone; 168851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mIsUserProfile = isUserProfile; 169851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 170851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 171851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Contact(Uri requestedUri, Contact from) { 172851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRequestedUri = requestedUri; 173851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 174851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatus = from.mStatus; 175851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mException = from.mException; 176851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupUri = from.mLookupUri; 177851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mUri = from.mUri; 178851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryId = from.mDirectoryId; 179851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mLookupKey = from.mLookupKey; 180851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mId = from.mId; 181851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mNameRawContactId = from.mNameRawContactId; 182851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayNameSource = from.mDisplayNameSource; 183851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoId = from.mPhotoId; 184851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoUri = from.mPhotoUri; 185851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDisplayName = from.mDisplayName; 186851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mAltDisplayName = from.mAltDisplayName; 187851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhoneticName = from.mPhoneticName; 188851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStarred = from.mStarred; 189851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPresence = from.mPresence; 190851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRawContacts = from.mRawContacts; 191851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStreamItems = from.mStreamItems; 192851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatuses = from.mStatuses; 193851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mInvitableAccountTypes = from.mInvitableAccountTypes; 194851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 195851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryDisplayName = from.mDirectoryDisplayName; 196851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryType = from.mDirectoryType; 197851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryAccountType = from.mDirectoryAccountType; 198851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryAccountName = from.mDirectoryAccountName; 199851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryExportSupport = from.mDirectoryExportSupport; 200851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 201851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mGroups = from.mGroups; 202851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 203851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoBinaryData = from.mPhotoBinaryData; 204851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mSendToVoicemail = from.mSendToVoicemail; 205851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mCustomRingtone = from.mCustomRingtone; 206851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mIsUserProfile = from.mIsUserProfile; 207851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 208851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 209851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 210851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @param exportSupport See {@link Directory#EXPORT_SUPPORT}. 211851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 212851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setDirectoryMetaData(String displayName, String directoryType, 213851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu String accountType, String accountName, int exportSupport) { 214851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryDisplayName = displayName; 215851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryType = directoryType; 216851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryAccountType = accountType; 217851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryAccountName = accountName; 218851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDirectoryExportSupport = exportSupport; 219851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 220851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 221851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setPhotoBinaryData(byte[] photoBinaryData) { 222851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mPhotoBinaryData = photoBinaryData; 223851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 224851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 225851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 226851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the URI for the contact that contains both the lookup key and the ID. This is 227851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * the best URI to reference a contact. 228851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * For directory contacts, this is the same a the URI as returned by {@link #getUri()} 229851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 230851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Uri getLookupUri() { 231851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mLookupUri; 232851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 233851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 234851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getLookupKey() { 235851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mLookupKey; 236851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 237851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 238851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 239851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the contact Uri that was passed to the provider to make the query. This is 240851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * the same as the requested Uri, unless the requested Uri doesn't specify a Contact: 241851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * If it either references a Raw-Contact or a Person (a pre-Eclair style Uri), this Uri will 242851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * always reference the full aggregate contact. 243851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 244851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Uri getUri() { 245851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mUri; 246851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 247851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 248851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 249851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the URI for which this {@link ContactLoader) was initially requested. 250851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 251851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Uri getRequestedUri() { 252851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mRequestedUri; 253851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 254851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 255851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 256851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Instantiate a new RawContactDeltaList for this contact. 257851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 258851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public RawContactDeltaList createRawContactDeltaList() { 259851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return RawContactDeltaList.fromIterator(getRawContacts().iterator()); 260851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 261851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 262851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 263851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the contact ID. 264851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 265851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu @VisibleForTesting 266851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ long getId() { 267851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mId; 268851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 269851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 270851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 271851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return true when an exception happened during loading, in which case 272851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * {@link #getException} returns the actual exception object. 273851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If 274851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false}, 275851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * and vice versa. 276851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 277851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isError() { 278851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStatus == Status.ERROR; 279851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 280851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 281851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Exception getException() { 282851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mException; 283851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 284851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 285851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 286851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return true when the specified contact is not found. 287851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If 288851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false}, 289851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * and vice versa. 290851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 291851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isNotFound() { 292851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStatus == Status.NOT_FOUND; 293851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 294851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 295851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 296851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return true if the specified contact is successfully loaded. 297851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * i.e. neither {@link #isError()} nor {@link #isNotFound()}. 298851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 299851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isLoaded() { 300851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStatus == Status.LOADED; 301851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 302851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 303851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getNameRawContactId() { 304851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mNameRawContactId; 305851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 306851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 307851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public int getDisplayNameSource() { 308851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDisplayNameSource; 309851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 310851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 311851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getPhotoId() { 312851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mPhotoId; 313851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 314851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 315851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getPhotoUri() { 316851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mPhotoUri; 317851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 318851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 319851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDisplayName() { 320851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDisplayName; 321851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 322851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 323851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getAltDisplayName() { 324851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mAltDisplayName; 325851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 326851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 327851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getPhoneticName() { 328851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mPhoneticName; 329851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 330851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 331851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean getStarred() { 332851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStarred; 333851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 334851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 335851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Integer getPresence() { 336851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mPresence; 337851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 338851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 339851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 340851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This can return non-null invitable account types only if the {@link ContactLoader} was 341851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * configured to load invitable account types in its constructor. 342851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return 343851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 344851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ImmutableList<AccountType> getInvitableAccountTypes() { 345851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mInvitableAccountTypes; 346851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 347851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 348851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ImmutableList<RawContact> getRawContacts() { 349851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mRawContacts; 350851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 351851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 352851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 353851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This can return non-null stream items only if the {@link ContactLoader} was 354851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * configured to load stream items in its constructor. 355851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return 356851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 357851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ImmutableList<StreamItemEntry> getStreamItems() { 358851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStreamItems; 359851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 360851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 361851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ImmutableMap<Long, DataStatus> getStatuses() { 362851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mStatuses; 363851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 364851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 365851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getDirectoryId() { 366851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryId; 367851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 368851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 369851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isDirectoryEntry() { 370851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryId != -1 && mDirectoryId != Directory.DEFAULT 371851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu && mDirectoryId != Directory.LOCAL_INVISIBLE; 372851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 373851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 374851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 375851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return true if this is a contact (not group, etc.) with at least one 376851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * writable raw-contact, and false otherwise. 377851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 378851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isWritableContact(final Context context) { 379851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getFirstWritableRawContactId(context) != -1; 380851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 381851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 382851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 383851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Return the ID of the first raw-contact in the contact data that belongs to a 384851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * contact-writable account, or -1 if no such entity exists. 385851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 386851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getFirstWritableRawContactId(final Context context) { 387851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // Directory entries are non-writable 388851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (isDirectoryEntry()) return -1; 389851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 390851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // Iterate through raw-contacts; if we find a writable on, return its ID. 391851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu for (RawContact rawContact : getRawContacts()) { 392851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu AccountType accountType = rawContact.getAccountType(); 393851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (accountType != null && accountType.areContactsWritable()) { 394851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return rawContact.getId(); 395851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 396851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 397851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // No writable raw-contact was found. 398851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return -1; 399851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 400851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 401851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public int getDirectoryExportSupport() { 402851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryExportSupport; 403851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 404851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 405851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDirectoryDisplayName() { 406851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryDisplayName; 407851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 408851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 409851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDirectoryType() { 410851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryType; 411851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 412851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 413851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDirectoryAccountType() { 414851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryAccountType; 415851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 416851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 417851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDirectoryAccountName() { 418851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDirectoryAccountName; 419851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 420851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 421851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public byte[] getPhotoBinaryData() { 422851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mPhotoBinaryData; 423851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 424851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 425851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ArrayList<ContentValues> getContentValues() { 426851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (mRawContacts.size() != 1) { 427851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu throw new IllegalStateException( 428851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu "Cannot extract content values from an aggregated contact"); 429851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 430851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 431851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu RawContact rawContact = mRawContacts.get(0); 432851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu ArrayList<ContentValues> result = new ArrayList<ContentValues>(); 433851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu for (DataItem dataItem : rawContact.getDataItems()) { 434851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu result.add(dataItem.getContentValues()); 435851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 436851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 437851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // If the photo was loaded using the URI, create an entry for the photo 438851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // binary data. 439851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (mPhotoId == 0 && mPhotoBinaryData != null) { 440851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu ContentValues photo = new ContentValues(); 441851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu photo.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE); 442851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu photo.put(Photo.PHOTO, mPhotoBinaryData); 443851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu result.add(photo); 444851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 445851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 446851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return result; 447851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 448851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 449851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 450851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This can return non-null group meta-data only if the {@link ContactLoader} was configured to 451851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * load group metadata in its constructor. 452851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * @return 453851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 454851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ImmutableList<GroupMetaData> getGroupMetaData() { 455851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mGroups; 456851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 457851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 458851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isSendToVoicemail() { 459851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mSendToVoicemail; 460851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 461851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 462851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getCustomRingtone() { 463851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mCustomRingtone; 464851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 465851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 466851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isUserProfile() { 467851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mIsUserProfile; 468851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 469851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 470851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu @Override 471851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String toString() { 472851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey + 473851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu ",uri=" + mUri + ",status=" + mStatus + "}"; 474851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 475851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 476851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setRawContacts(ImmutableList<RawContact> rawContacts) { 477851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mRawContacts = rawContacts; 478851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 479851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 480851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setStatuses(ImmutableMap<Long, DataStatus> statuses) { 481851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStatuses = statuses; 482851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 483851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 484851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setInvitableAccountTypes(ImmutableList<AccountType> accountTypes) { 485851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mInvitableAccountTypes = accountTypes; 486851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 487851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 488851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setGroupMetaData(ImmutableList<GroupMetaData> groups) { 489851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mGroups = groups; 490851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 491851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 492851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /* package */ void setStreamItems(ImmutableList<StreamItemEntry> streamItems) { 493851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mStreamItems = streamItems; 494851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 495851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu} 496