1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel.media; 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Intent; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.res.Resources; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.res.Resources.NotFoundException; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.ContactsContract.CommonDataKinds.Im; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.ContactsContract.CommonDataKinds.Organization; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.ContactsContract.CommonDataKinds.Phone; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.support.v4.util.ArrayMap; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.text.TextUtils; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.Factory; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.R; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.MediaScratchFileProvider; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.PersonItemData; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.ContactUtil; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.LogUtil; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.SafeAsyncTask; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.EmailData; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.ImData; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.NoteData; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.OrganizationData; 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.PhoneData; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.PostalData; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardEntry.WebsiteData; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.vcard.VCardProperty; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.UnsupportedEncodingException; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.net.URLEncoder; 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Holds one entry item (i.e. a single contact) within a VCard resource. It is able to take 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * a VCardEntry and extract relevant information from it. 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class VCardResourceEntry { 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String PROPERTY_KIND = "KIND"; 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String KIND_LOCATION = "location"; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final List<VCardResourceEntry.VCardResourceEntryDestinationItem> mContactInfo; 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Uri mAvatarUri; 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final String mDisplayName; 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final CustomVCardEntry mVCard; 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public VCardResourceEntry(final CustomVCardEntry vcard, final Uri avatarUri) { 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mContactInfo = getContactInfoFromVCardEntry(vcard); 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDisplayName = getDisplayNameFromVCardEntry(vcard); 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mAvatarUri = avatarUri; 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mVCard = vcard; 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd void close() { 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // If the avatar image was temporarily saved in the scratch folder, remove that. 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (MediaScratchFileProvider.isMediaScratchSpaceUri(mAvatarUri)) { 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SafeAsyncTask.executeOnThreadPool(new Runnable() { 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void run() { 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Factory.get().getApplicationContext().getContentResolver().delete( 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mAvatarUri, null, null); 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }); 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getKind() { 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd VCardProperty kindProperty = mVCard.getProperty(PROPERTY_KIND); 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return kindProperty == null ? null : kindProperty.getRawValue(); 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Uri getAvatarUri() { 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mAvatarUri; 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDisplayName() { 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDisplayName; 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDisplayAddress() { 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd List<PostalData> postalList = mVCard.getPostalList(); 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (postalList == null || postalList.size() < 1) { 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return formatAddress(postalList.get(0)); 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getNotes() { 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd List<NoteData> notes = mVCard.getNotes(); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (notes == null || notes.size() == 0) { 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd StringBuilder noteBuilder = new StringBuilder(); 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (NoteData note : notes) { 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd noteBuilder.append(note.getNote()); 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return noteBuilder.toString(); 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Returns a UI-facing representation that can be bound and consumed by the UI layer to display 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * this VCard resource entry. 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PersonItemData getDisplayItem() { 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new PersonItemData() { 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Uri getAvatarUri() { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return VCardResourceEntry.this.getAvatarUri(); 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDisplayName() { 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return VCardResourceEntry.this.getDisplayName(); 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDetails() { 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Intent getClickIntent() { 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getContactId() { 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return ContactUtil.INVALID_CONTACT_ID; 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getLookupKey() { 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getNormalizedDestination() { 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public List<VCardResourceEntry.VCardResourceEntryDestinationItem> getContactInfo() { 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mContactInfo; 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static List<VCardResourceEntryDestinationItem> getContactInfoFromVCardEntry( 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final VCardEntry vcard) { 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Resources resources = Factory.get().getApplicationContext().getResources(); 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final List<VCardResourceEntry.VCardResourceEntryDestinationItem> retList = 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new ArrayList<VCardResourceEntry.VCardResourceEntryDestinationItem>(); 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getPhoneList() != null) { 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final PhoneData phone : vcard.getPhoneList()) { 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Intent intent = new Intent(Intent.ACTION_DIAL); 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent.setData(Uri.parse("tel:" + phone.getNumber())); 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(phone.getNumber(), 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.getTypeLabel(resources, phone.getType(), phone.getLabel()).toString(), 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent)); 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getEmailList() != null) { 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final EmailData email : vcard.getEmailList()) { 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Intent intent = new Intent(Intent.ACTION_SENDTO); 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent.setData(Uri.parse("mailto:")); 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent.putExtra(Intent.EXTRA_EMAIL, new String[] { email.getAddress() }); 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(email.getAddress(), 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.getTypeLabel(resources, email.getType(), 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd email.getLabel()).toString(), intent)); 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getPostalList() != null) { 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final PostalData postalData : vcard.getPostalList()) { 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String type; 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources. 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getStringArray(android.R.array.postalAddressTypes) 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd [postalData.getType() - 1]; 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (final NotFoundException ex) { 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources.getStringArray(android.R.array.postalAddressTypes)[2]; 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (final Exception e) { 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LogUtil.e(LogUtil.BUGLE_TAG, "createContactItem postal Exception:" + e); 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources.getStringArray(android.R.array.postalAddressTypes)[2]; 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Intent intent = new Intent(Intent.ACTION_VIEW); 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String address = formatAddress(postalData); 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent.setData(Uri.parse("geo:0,0?q=" + URLEncoder.encode(address, "UTF-8"))); 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (UnsupportedEncodingException e) { 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent = null; 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(address, type, intent)); 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getImList() != null) { 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final ImData imData : vcard.getImList()) { 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String type = null; 219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources. 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getString(Im.getProtocolLabelResource(imData.getProtocol())); 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (final NotFoundException ex) { 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Do nothing since this implies an empty label. 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(imData.getAddress(), type, null)); 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getOrganizationList() != null) { 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final OrganizationData organtization : vcard.getOrganizationList()) { 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String type = null; 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources.getString(Organization.getTypeLabelResource( 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd organtization.getType())); 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (final NotFoundException ex) { 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd //set other kind as "other" 237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources.getStringArray(android.R.array.organizationTypes)[1]; 238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (final Exception e) { 239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LogUtil.e(LogUtil.BUGLE_TAG, "createContactItem org Exception:" + e); 240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd type = resources.getStringArray(android.R.array.organizationTypes)[1]; 241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem( 243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd organtization.getOrganizationName(), type, null)); 244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getWebsiteList() != null) { 248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final WebsiteData web : vcard.getWebsiteList()) { 249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (web != null && TextUtils.isGraphic(web.getWebsite())){ 250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String website = web.getWebsite(); 251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!website.startsWith("http://") && !website.startsWith("https://")) { 252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Prefix required for parsing to end up with a scheme and result in 253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // navigation 254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd website = "http://" + website; 255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(website)); 257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(web.getWebsite(), null, 258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd intent)); 259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getBirthday() != null) { 264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String birthday = vcard.getBirthday(); 265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (TextUtils.isGraphic(birthday)){ 266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(birthday, 267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd resources.getString(R.string.vcard_detail_birthday_label), null)); 268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (vcard.getNotes() != null) { 272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final NoteData note : vcard.getNotes()) { 273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ArrayMap<String, String> curChildMap = new ArrayMap<String, String>(); 274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (TextUtils.isGraphic(note.getNote())){ 275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd retList.add(new VCardResourceEntryDestinationItem(note.getNote(), 276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd resources.getString(R.string.vcard_detail_notes_label), null)); 277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return retList; 281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static String formatAddress(final PostalData postalData) { 284d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final StringBuilder sb = new StringBuilder(); 285d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String poBox = postalData.getPobox(); 286d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(poBox)) { 287d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(poBox); 288d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 289d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 290d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String extendedAddress = postalData.getExtendedAddress(); 291d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(extendedAddress)) { 292d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(extendedAddress); 293d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 294d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 295d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String street = postalData.getStreet(); 296d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(street)) { 297d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(street); 298d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 299d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 300d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String localty = postalData.getLocalty(); 301d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(localty)) { 302d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(localty); 303d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 304d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 305d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String region = postalData.getRegion(); 306d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(region)) { 307d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(region); 308d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 309d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 310d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String postalCode = postalData.getPostalCode(); 311d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(postalCode)) { 312d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(postalCode); 313d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(" "); 314d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 315d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String country = postalData.getCountry(); 316d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(country)) { 317d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(country); 318d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 319d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return sb.toString(); 320d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 321d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 322d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static String getDisplayNameFromVCardEntry(final VCardEntry vcard) { 323d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String name = vcard.getDisplayName(); 324d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (name == null) { 325d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd vcard.consolidateFields(); 326d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd name = vcard.getDisplayName(); 327d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 328d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return name; 329d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 330d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 331d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 332d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Represents one entry line (e.g. phone number and phone label) for a single contact. Each 333d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * VCardResourceEntry may hold one or more VCardResourceEntryDestinationItem's. 334d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 335d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static class VCardResourceEntryDestinationItem { 336d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final String mDisplayDestination; 337d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final String mDestinationType; 338d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Intent mClickIntent; 339d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public VCardResourceEntryDestinationItem(final String displayDestination, 340d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String destinationType, final Intent clickIntent) { 341d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDisplayDestination = displayDestination; 342d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDestinationType = destinationType; 343d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mClickIntent = clickIntent; 344d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 345d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 346d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 347d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Returns a UI-facing representation that can be bound and consumed by the UI layer to 348d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * display this VCard resource destination entry. 349d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 350d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PersonItemData getDisplayItem() { 351d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new PersonItemData() { 352d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 353d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Uri getAvatarUri() { 354d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 355d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 356d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 357d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 358d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDisplayName() { 359d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDisplayDestination; 360d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 361d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 362d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 363d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDetails() { 364d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDestinationType; 365d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 366d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 367d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 368d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Intent getClickIntent() { 369d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mClickIntent; 370d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 371d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 372d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 373d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getContactId() { 374d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return ContactUtil.INVALID_CONTACT_ID; 375d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 376d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 377d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 378d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getLookupKey() { 379d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 380d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 381d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 382d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 383d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getNormalizedDestination() { 384d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 385d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 386d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 387d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 388d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 389d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 390