blob: fd703952fa267c8d3a8e22cbda2eb9760a271252 [file] [log] [blame]
Alexandre Savard166dbb62012-09-18 09:37:27 -04001/*
Alexandre Lisionec71b2d2013-11-05 10:21:08 -05002 * Copyright (C) 2004-2013 Savoir-Faire Linux Inc.
Alexandre Savard166dbb62012-09-18 09:37:27 -04003 *
alision11e8e162013-05-28 10:33:14 -04004 * Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
Alexandre Savard166dbb62012-09-18 09:37:27 -04005 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 * Additional permission under GNU GPL version 3 section 7:
21 *
22 * If you modify this program, or any covered work, by linking or
23 * combining it with the OpenSSL project's OpenSSL library (or a
24 * modified version of that library), containing parts covered by the
25 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
26 * grants you additional permission to convey the resulting work.
27 * Corresponding Source for a non-source form of such a combination
28 * shall include the source code for the parts of OpenSSL used as well
29 * as that of the covered work.
30 */
Alexandre Lision064e1e02013-10-01 16:18:42 -040031package org.sflphone.model;
Alexandre Savard166dbb62012-09-18 09:37:27 -040032
Alexandre Lision35c3cbb2013-11-04 17:11:54 -050033import java.lang.ref.WeakReference;
alisiond295ec22013-05-17 10:12:13 -040034import java.util.ArrayList;
Alexandre Savard166dbb62012-09-18 09:37:27 -040035
alision2ec64f92013-06-17 17:28:58 -040036import android.content.ContentResolver;
37import android.database.Cursor;
Alexandre Lision35c3cbb2013-11-04 17:11:54 -050038import android.graphics.Bitmap;
alisiond295ec22013-05-17 10:12:13 -040039import android.os.Parcel;
40import android.os.Parcelable;
alision2ec64f92013-06-17 17:28:58 -040041import android.provider.ContactsContract.Profile;
alisiond295ec22013-05-17 10:12:13 -040042
43public class CallContact implements Parcelable {
44
alisiond8c83882013-05-17 17:00:42 -040045 private long id;
46 private String mDisplayName;
47 private long photo_id;
48 private ArrayList<Phone> phones, sip_phones;
49 private String mEmail;
alisioncd8fb912013-06-28 14:43:51 -040050 private boolean isUser;
Alexandre Lision35c3cbb2013-11-04 17:11:54 -050051 private WeakReference<Bitmap> contact_photo = new WeakReference<Bitmap>(null);
alisiond295ec22013-05-17 10:12:13 -040052
alisioncd8fb912013-06-28 14:43:51 -040053 private CallContact(long cID, String displayName, long photoID, ArrayList<Phone> p, ArrayList<Phone> sip, String mail, boolean user) {
alisiond8c83882013-05-17 17:00:42 -040054 id = cID;
alision465ceba2013-07-04 09:24:30 -040055 mDisplayName = displayName;
alisiond8c83882013-05-17 17:00:42 -040056 phones = p;
57 sip_phones = sip;
58 mEmail = mail;
59 photo_id = photoID;
alisioncd8fb912013-06-28 14:43:51 -040060 isUser = user;
alisiond8c83882013-05-17 17:00:42 -040061 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040062
alisiond8c83882013-05-17 17:00:42 -040063 public CallContact(Parcel in) {
64 readFromParcel(in);
65 }
alisiond295ec22013-05-17 10:12:13 -040066
alisiond8c83882013-05-17 17:00:42 -040067 public long getId() {
68 return id;
69 }
alisiond295ec22013-05-17 10:12:13 -040070
alisiond8c83882013-05-17 17:00:42 -040071 public String getmDisplayName() {
72 return mDisplayName;
73 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040074
alisiond8c83882013-05-17 17:00:42 -040075 public long getPhoto_id() {
76 return photo_id;
77 }
alisiond295ec22013-05-17 10:12:13 -040078
alisiond8c83882013-05-17 17:00:42 -040079 public void setPhoto_id(long photo_id) {
80 this.photo_id = photo_id;
81 }
alisiond295ec22013-05-17 10:12:13 -040082
alisiond8c83882013-05-17 17:00:42 -040083 public ArrayList<Phone> getPhones() {
84 return phones;
85 }
alisiond295ec22013-05-17 10:12:13 -040086
alisiond8c83882013-05-17 17:00:42 -040087 public void setPhones(ArrayList<Phone> phones) {
88 this.phones = phones;
89 }
alisiond295ec22013-05-17 10:12:13 -040090
alisiond8c83882013-05-17 17:00:42 -040091 public ArrayList<Phone> getSip_phones() {
92 return sip_phones;
93 }
alisiond295ec22013-05-17 10:12:13 -040094
alisiond8c83882013-05-17 17:00:42 -040095 public void setSip_phones(ArrayList<Phone> sip_phones) {
96 this.sip_phones = sip_phones;
97 }
alisiond295ec22013-05-17 10:12:13 -040098
alisiond8c83882013-05-17 17:00:42 -040099 public Phone getSipPhone() {
100 if (sip_phones.size() > 0) {
101 return sip_phones.get(0);
102 }
103 if (phones.size() > 0) {
104 return phones.get(0);
105 }
106 return null;
107 }
Alexandre Savard38d6a152012-09-18 13:33:02 -0400108
alisiond8c83882013-05-17 17:00:42 -0400109 public String getmEmail() {
110 return mEmail;
111 }
alisiond295ec22013-05-17 10:12:13 -0400112
alisiond8c83882013-05-17 17:00:42 -0400113 public void setmEmail(String mEmail) {
114 this.mEmail = mEmail;
115 }
alisiond295ec22013-05-17 10:12:13 -0400116
alisiond8c83882013-05-17 17:00:42 -0400117 @Override
118 public String toString() {
119 return mDisplayName;
120 }
alisiond295ec22013-05-17 10:12:13 -0400121
alisiond8c83882013-05-17 17:00:42 -0400122 public static class ContactBuilder {
alisiond295ec22013-05-17 10:12:13 -0400123
alisiond8c83882013-05-17 17:00:42 -0400124 long contactID;
125 String contactName;
126 long contactPhoto;
127 ArrayList<Phone> phones;
128 ArrayList<Phone> sip;
129 String contactMail;
130 boolean hasPhoto;
alisiond295ec22013-05-17 10:12:13 -0400131
alisiond8c83882013-05-17 17:00:42 -0400132 public ContactBuilder startNewContact(long id, String displayName, long photo_id) {
133 contactID = id;
alisioncd8fb912013-06-28 14:43:51 -0400134
alisiond8c83882013-05-17 17:00:42 -0400135 contactName = displayName;
136 contactPhoto = photo_id;
137 phones = new ArrayList<Phone>();
138 sip = new ArrayList<Phone>();
139 return this;
140 }
alisiond295ec22013-05-17 10:12:13 -0400141
alisiond8c83882013-05-17 17:00:42 -0400142 public ContactBuilder addPhoneNumber(String num, int type) {
143 phones.add(new Phone(num, type));
144 return this;
145 }
alisiond295ec22013-05-17 10:12:13 -0400146
alisiond8c83882013-05-17 17:00:42 -0400147 public ContactBuilder addSipNumber(String num, int type) {
148 sip.add(new Phone(num, type));
149 return this;
150 }
alisiond295ec22013-05-17 10:12:13 -0400151
alisiond8c83882013-05-17 17:00:42 -0400152 public CallContact build() {
alisioncd8fb912013-06-28 14:43:51 -0400153 return new CallContact(contactID, contactName, contactPhoto, phones, sip, contactMail, false);
alisiond8c83882013-05-17 17:00:42 -0400154 }
Adrien Béraud33268882013-05-18 03:41:15 +1000155
alisiond8c83882013-05-17 17:00:42 -0400156 public static ContactBuilder getInstance() {
157 return new ContactBuilder();
158 }
alisiond295ec22013-05-17 10:12:13 -0400159
alisionfde875f2013-05-28 17:01:54 -0400160 public static CallContact buildUnknownContact(String to) {
161 ArrayList<Phone> phones = new ArrayList<Phone>();
alision84813a12013-05-27 17:40:39 -0400162 phones.add(new Phone(to, 0));
alision2ec64f92013-06-17 17:28:58 -0400163
alisioncd8fb912013-06-28 14:43:51 -0400164 return new CallContact(-1, to, 0, phones, new ArrayList<CallContact.Phone>(), "", false);
alision84813a12013-05-27 17:40:39 -0400165 }
alision2ec64f92013-06-17 17:28:58 -0400166
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500167 public static CallContact buildUserContact(ContentResolver cr) {
168 String[] mProjection = new String[] { Profile._ID, Profile.DISPLAY_NAME_PRIMARY, Profile.PHOTO_ID };
alision2ec64f92013-06-17 17:28:58 -0400169 Cursor mProfileCursor = cr.query(Profile.CONTENT_URI, mProjection, null, null, null);
170 CallContact result = null;
171 if (mProfileCursor.getCount() > 0) {
172 mProfileCursor.moveToFirst();
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500173 String displayName = mProfileCursor.getString(mProfileCursor.getColumnIndex(Profile.DISPLAY_NAME_PRIMARY));
174
alision2ec64f92013-06-17 17:28:58 -0400175 result = new CallContact(mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile._ID)), displayName,
176 mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile.PHOTO_ID)), new ArrayList<Phone>(),
alisioncd8fb912013-06-28 14:43:51 -0400177 new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400178 } else {
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500179 result = new CallContact(-1, "Me", 0, new ArrayList<Phone>(), new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400180 }
181 mProfileCursor.close();
182 return result;
alision85704182013-05-29 15:23:03 -0400183 }
alision84813a12013-05-27 17:40:39 -0400184
Alexandre Lisiona458ba22013-12-11 15:04:11 -0500185 public CallContact buildSimpleContact(String name, String number_called) {
186 ArrayList<Phone> phones = new ArrayList<Phone>();
187 phones.add(new Phone(number_called, 0));
188
189 return new CallContact(-1, name, 0, phones, new ArrayList<CallContact.Phone>(), "", false);
190 }
191
alisiond8c83882013-05-17 17:00:42 -0400192 }
alisiond295ec22013-05-17 10:12:13 -0400193
alisiond8c83882013-05-17 17:00:42 -0400194 @Override
195 public int describeContents() {
196 return 0;
197 }
alisiond295ec22013-05-17 10:12:13 -0400198
alisiond8c83882013-05-17 17:00:42 -0400199 @Override
200 public void writeToParcel(Parcel dest, int flags) {
201 dest.writeLong(id);
202 dest.writeString(mDisplayName);
203 dest.writeLong(photo_id);
204 dest.writeTypedList(phones);
alisiond295ec22013-05-17 10:12:13 -0400205
alisiond8c83882013-05-17 17:00:42 -0400206 dest.writeTypedList(sip_phones);
alision2ec64f92013-06-17 17:28:58 -0400207
alisiond8c83882013-05-17 17:00:42 -0400208 dest.writeString(mEmail);
alisioncd8fb912013-06-28 14:43:51 -0400209 dest.writeByte((byte) (isUser ? 1 : 0));
alisiond295ec22013-05-17 10:12:13 -0400210
alisiond8c83882013-05-17 17:00:42 -0400211 }
alisiond295ec22013-05-17 10:12:13 -0400212
alisiond8c83882013-05-17 17:00:42 -0400213 private void readFromParcel(Parcel in) {
alisiond295ec22013-05-17 10:12:13 -0400214
alisiond8c83882013-05-17 17:00:42 -0400215 id = in.readLong();
216 mDisplayName = in.readString();
217 photo_id = in.readLong();
218 phones = new ArrayList<CallContact.Phone>();
219 sip_phones = new ArrayList<CallContact.Phone>();
220 in.readTypedList(phones, Phone.CREATOR);
221 in.readTypedList(sip_phones, Phone.CREATOR);
222 mEmail = in.readString();
alisioncd8fb912013-06-28 14:43:51 -0400223 isUser = in.readByte() == 1 ? true : false;
alisiond8c83882013-05-17 17:00:42 -0400224 }
alisiond295ec22013-05-17 10:12:13 -0400225
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400226 public static final Parcelable.Creator<CallContact> CREATOR = new Parcelable.Creator<CallContact>() {
alisiond8c83882013-05-17 17:00:42 -0400227 @Override
228 public CallContact createFromParcel(Parcel in) {
229 return new CallContact(in);
230 }
alisiond295ec22013-05-17 10:12:13 -0400231
alisiond8c83882013-05-17 17:00:42 -0400232 @Override
233 public CallContact[] newArray(int size) {
234 return new CallContact[size];
235 }
236 };
alisiond295ec22013-05-17 10:12:13 -0400237
alisiond8c83882013-05-17 17:00:42 -0400238 public static class Phone implements Parcelable {
alisiond295ec22013-05-17 10:12:13 -0400239
alisiond8c83882013-05-17 17:00:42 -0400240 int type;
241 String number;
alisiond295ec22013-05-17 10:12:13 -0400242
alisiond8c83882013-05-17 17:00:42 -0400243 public Phone(String num, int ty) {
244 type = ty;
245 number = num;
246 }
alisiond295ec22013-05-17 10:12:13 -0400247
alisiond8c83882013-05-17 17:00:42 -0400248 public Phone(Parcel in) {
249 readFromParcel(in);
250 }
alisiond295ec22013-05-17 10:12:13 -0400251
alisiond8c83882013-05-17 17:00:42 -0400252 @Override
253 public int describeContents() {
254 return 0;
255 }
alisiond295ec22013-05-17 10:12:13 -0400256
alisiond8c83882013-05-17 17:00:42 -0400257 @Override
258 public void writeToParcel(Parcel dest, int arg1) {
259 dest.writeInt(type);
260 dest.writeString(number);
261 }
alisiond295ec22013-05-17 10:12:13 -0400262
alisiond8c83882013-05-17 17:00:42 -0400263 private void readFromParcel(Parcel in) {
264 type = in.readInt();
265 number = in.readString();
266 }
alisiond295ec22013-05-17 10:12:13 -0400267
alision11e8e162013-05-28 10:33:14 -0400268 public static final Parcelable.Creator<Phone> CREATOR = new Parcelable.Creator<Phone>() {
alisiond8c83882013-05-17 17:00:42 -0400269 @Override
270 public Phone createFromParcel(Parcel in) {
271 return new Phone(in);
272 }
alisiond295ec22013-05-17 10:12:13 -0400273
alisiond8c83882013-05-17 17:00:42 -0400274 @Override
275 public Phone[] newArray(int size) {
276 return new Phone[size];
277 }
278 };
alisiond295ec22013-05-17 10:12:13 -0400279
alisiond8c83882013-05-17 17:00:42 -0400280 public int getType() {
281 return type;
282 }
283
284 public void setType(int type) {
285 this.type = type;
286 }
287
288 public String getNumber() {
289 return number;
290 }
291
292 public void setNumber(String number) {
293 this.number = number;
294 }
295
296 }
alisiond295ec22013-05-17 10:12:13 -0400297
alision55c36cb2013-06-14 14:57:38 -0400298 public void addPhoneNumber(String tel, int type) {
299 phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400300
alision55c36cb2013-06-14 14:57:38 -0400301 }
302
303 public void addSipNumber(String tel, int type) {
304 sip_phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400305
alision55c36cb2013-06-14 14:57:38 -0400306 }
307
alisioncd8fb912013-06-28 14:43:51 -0400308 public boolean isUser() {
309 return isUser;
310 }
311
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500312 public boolean hasPhoto() {
313 if (contact_photo.get() != null)
314 return true;
315 return false;
316 }
317
318 public Bitmap getPhoto() {
319 return contact_photo.get();
320 }
321
322 public void setPhoto(Bitmap externalBMP) {
323 contact_photo = new WeakReference<Bitmap>(externalBMP);
324 }
325
Alexandre Savard166dbb62012-09-18 09:37:27 -0400326}