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