blob: 168ea3826cbf5154a3a001e203f44dbe45089197 [file] [log] [blame]
Alexandre Savard166dbb62012-09-18 09:37:27 -04001/*
2 * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
3 *
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;
Alexandre Lision35c3cbb2013-11-04 17:11:54 -050042import android.util.Log;
alisiond295ec22013-05-17 10:12:13 -040043
44public class CallContact implements Parcelable {
45
alisiond8c83882013-05-17 17:00:42 -040046 private long id;
47 private String mDisplayName;
48 private long photo_id;
49 private ArrayList<Phone> phones, sip_phones;
50 private String mEmail;
alisioncd8fb912013-06-28 14:43:51 -040051 private boolean isUser;
Alexandre Lision35c3cbb2013-11-04 17:11:54 -050052 private WeakReference<Bitmap> contact_photo = new WeakReference<Bitmap>(null);
alisiond295ec22013-05-17 10:12:13 -040053
alisioncd8fb912013-06-28 14:43:51 -040054 private CallContact(long cID, String displayName, long photoID, ArrayList<Phone> p, ArrayList<Phone> sip, String mail, boolean user) {
alisiond8c83882013-05-17 17:00:42 -040055 id = cID;
alision465ceba2013-07-04 09:24:30 -040056 mDisplayName = displayName;
alisiond8c83882013-05-17 17:00:42 -040057 phones = p;
58 sip_phones = sip;
59 mEmail = mail;
60 photo_id = photoID;
alisioncd8fb912013-06-28 14:43:51 -040061 isUser = user;
alisiond8c83882013-05-17 17:00:42 -040062 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040063
alisiond8c83882013-05-17 17:00:42 -040064 public CallContact(Parcel in) {
65 readFromParcel(in);
66 }
alisiond295ec22013-05-17 10:12:13 -040067
alisiond8c83882013-05-17 17:00:42 -040068 public long getId() {
69 return id;
70 }
alisiond295ec22013-05-17 10:12:13 -040071
alisiond8c83882013-05-17 17:00:42 -040072 public String getmDisplayName() {
73 return mDisplayName;
74 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040075
alisiond8c83882013-05-17 17:00:42 -040076 public long getPhoto_id() {
77 return photo_id;
78 }
alisiond295ec22013-05-17 10:12:13 -040079
alisiond8c83882013-05-17 17:00:42 -040080 public void setPhoto_id(long photo_id) {
81 this.photo_id = photo_id;
82 }
alisiond295ec22013-05-17 10:12:13 -040083
alisiond8c83882013-05-17 17:00:42 -040084 public ArrayList<Phone> getPhones() {
85 return phones;
86 }
alisiond295ec22013-05-17 10:12:13 -040087
alisiond8c83882013-05-17 17:00:42 -040088 public void setPhones(ArrayList<Phone> phones) {
89 this.phones = phones;
90 }
alisiond295ec22013-05-17 10:12:13 -040091
alisiond8c83882013-05-17 17:00:42 -040092 public ArrayList<Phone> getSip_phones() {
93 return sip_phones;
94 }
alisiond295ec22013-05-17 10:12:13 -040095
alisiond8c83882013-05-17 17:00:42 -040096 public void setSip_phones(ArrayList<Phone> sip_phones) {
97 this.sip_phones = sip_phones;
98 }
alisiond295ec22013-05-17 10:12:13 -040099
alisiond8c83882013-05-17 17:00:42 -0400100 public Phone getSipPhone() {
101 if (sip_phones.size() > 0) {
102 return sip_phones.get(0);
103 }
104 if (phones.size() > 0) {
105 return phones.get(0);
106 }
107 return null;
108 }
Alexandre Savard38d6a152012-09-18 13:33:02 -0400109
alisiond8c83882013-05-17 17:00:42 -0400110 public String getmEmail() {
111 return mEmail;
112 }
alisiond295ec22013-05-17 10:12:13 -0400113
alisiond8c83882013-05-17 17:00:42 -0400114 public void setmEmail(String mEmail) {
115 this.mEmail = mEmail;
116 }
alisiond295ec22013-05-17 10:12:13 -0400117
alisiond8c83882013-05-17 17:00:42 -0400118 @Override
119 public String toString() {
120 return mDisplayName;
121 }
alisiond295ec22013-05-17 10:12:13 -0400122
alisiond8c83882013-05-17 17:00:42 -0400123 public static class ContactBuilder {
alisiond295ec22013-05-17 10:12:13 -0400124
alisiond8c83882013-05-17 17:00:42 -0400125 long contactID;
126 String contactName;
127 long contactPhoto;
128 ArrayList<Phone> phones;
129 ArrayList<Phone> sip;
130 String contactMail;
131 boolean hasPhoto;
alisiond295ec22013-05-17 10:12:13 -0400132
alisiond8c83882013-05-17 17:00:42 -0400133 public ContactBuilder startNewContact(long id, String displayName, long photo_id) {
134 contactID = id;
alisioncd8fb912013-06-28 14:43:51 -0400135
alisiond8c83882013-05-17 17:00:42 -0400136 contactName = displayName;
137 contactPhoto = photo_id;
138 phones = new ArrayList<Phone>();
139 sip = new ArrayList<Phone>();
140 return this;
141 }
alisiond295ec22013-05-17 10:12:13 -0400142
alisiond8c83882013-05-17 17:00:42 -0400143 public ContactBuilder addPhoneNumber(String num, int type) {
144 phones.add(new Phone(num, type));
145 return this;
146 }
alisiond295ec22013-05-17 10:12:13 -0400147
alisiond8c83882013-05-17 17:00:42 -0400148 public ContactBuilder addSipNumber(String num, int type) {
149 sip.add(new Phone(num, type));
150 return this;
151 }
alisiond295ec22013-05-17 10:12:13 -0400152
alisiond8c83882013-05-17 17:00:42 -0400153 public CallContact build() {
alisioncd8fb912013-06-28 14:43:51 -0400154 return new CallContact(contactID, contactName, contactPhoto, phones, sip, contactMail, false);
alisiond8c83882013-05-17 17:00:42 -0400155 }
Adrien Béraud33268882013-05-18 03:41:15 +1000156
alisiond8c83882013-05-17 17:00:42 -0400157 public static ContactBuilder getInstance() {
158 return new ContactBuilder();
159 }
alisiond295ec22013-05-17 10:12:13 -0400160
alisionfde875f2013-05-28 17:01:54 -0400161 public static CallContact buildUnknownContact(String to) {
162 ArrayList<Phone> phones = new ArrayList<Phone>();
alision84813a12013-05-27 17:40:39 -0400163 phones.add(new Phone(to, 0));
alision2ec64f92013-06-17 17:28:58 -0400164
alisioncd8fb912013-06-28 14:43:51 -0400165 return new CallContact(-1, to, 0, phones, new ArrayList<CallContact.Phone>(), "", false);
alision84813a12013-05-27 17:40:39 -0400166 }
alision2ec64f92013-06-17 17:28:58 -0400167
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500168 public static CallContact buildUserContact(ContentResolver cr) {
169 String[] mProjection = new String[] { Profile._ID, Profile.DISPLAY_NAME_PRIMARY, Profile.PHOTO_ID };
alision2ec64f92013-06-17 17:28:58 -0400170 Cursor mProfileCursor = cr.query(Profile.CONTENT_URI, mProjection, null, null, null);
171 CallContact result = null;
172 if (mProfileCursor.getCount() > 0) {
173 mProfileCursor.moveToFirst();
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500174 String displayName = mProfileCursor.getString(mProfileCursor.getColumnIndex(Profile.DISPLAY_NAME_PRIMARY));
175
alision2ec64f92013-06-17 17:28:58 -0400176 result = new CallContact(mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile._ID)), displayName,
177 mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile.PHOTO_ID)), new ArrayList<Phone>(),
alisioncd8fb912013-06-28 14:43:51 -0400178 new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400179 } else {
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500180 result = new CallContact(-1, "Me", 0, new ArrayList<Phone>(), new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400181 }
182 mProfileCursor.close();
183 return result;
alision85704182013-05-29 15:23:03 -0400184 }
alision84813a12013-05-27 17:40:39 -0400185
alisiond8c83882013-05-17 17:00:42 -0400186 }
alisiond295ec22013-05-17 10:12:13 -0400187
alisiond8c83882013-05-17 17:00:42 -0400188 @Override
189 public int describeContents() {
190 return 0;
191 }
alisiond295ec22013-05-17 10:12:13 -0400192
alisiond8c83882013-05-17 17:00:42 -0400193 @Override
194 public void writeToParcel(Parcel dest, int flags) {
195 dest.writeLong(id);
196 dest.writeString(mDisplayName);
197 dest.writeLong(photo_id);
198 dest.writeTypedList(phones);
alisiond295ec22013-05-17 10:12:13 -0400199
alisiond8c83882013-05-17 17:00:42 -0400200 dest.writeTypedList(sip_phones);
alision2ec64f92013-06-17 17:28:58 -0400201
alisiond8c83882013-05-17 17:00:42 -0400202 dest.writeString(mEmail);
alisioncd8fb912013-06-28 14:43:51 -0400203 dest.writeByte((byte) (isUser ? 1 : 0));
alisiond295ec22013-05-17 10:12:13 -0400204
alisiond8c83882013-05-17 17:00:42 -0400205 }
alisiond295ec22013-05-17 10:12:13 -0400206
alisiond8c83882013-05-17 17:00:42 -0400207 private void readFromParcel(Parcel in) {
alisiond295ec22013-05-17 10:12:13 -0400208
alisiond8c83882013-05-17 17:00:42 -0400209 id = in.readLong();
210 mDisplayName = in.readString();
211 photo_id = in.readLong();
212 phones = new ArrayList<CallContact.Phone>();
213 sip_phones = new ArrayList<CallContact.Phone>();
214 in.readTypedList(phones, Phone.CREATOR);
215 in.readTypedList(sip_phones, Phone.CREATOR);
216 mEmail = in.readString();
alisioncd8fb912013-06-28 14:43:51 -0400217 isUser = in.readByte() == 1 ? true : false;
alisiond8c83882013-05-17 17:00:42 -0400218 }
alisiond295ec22013-05-17 10:12:13 -0400219
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400220 public static final Parcelable.Creator<CallContact> CREATOR = new Parcelable.Creator<CallContact>() {
alisiond8c83882013-05-17 17:00:42 -0400221 @Override
222 public CallContact createFromParcel(Parcel in) {
223 return new CallContact(in);
224 }
alisiond295ec22013-05-17 10:12:13 -0400225
alisiond8c83882013-05-17 17:00:42 -0400226 @Override
227 public CallContact[] newArray(int size) {
228 return new CallContact[size];
229 }
230 };
alisiond295ec22013-05-17 10:12:13 -0400231
alisiond8c83882013-05-17 17:00:42 -0400232 public static class Phone implements Parcelable {
alisiond295ec22013-05-17 10:12:13 -0400233
alisiond8c83882013-05-17 17:00:42 -0400234 int type;
235 String number;
alisiond295ec22013-05-17 10:12:13 -0400236
alisiond8c83882013-05-17 17:00:42 -0400237 public Phone(String num, int ty) {
238 type = ty;
239 number = num;
240 }
alisiond295ec22013-05-17 10:12:13 -0400241
alisiond8c83882013-05-17 17:00:42 -0400242 public Phone(Parcel in) {
243 readFromParcel(in);
244 }
alisiond295ec22013-05-17 10:12:13 -0400245
alisiond8c83882013-05-17 17:00:42 -0400246 @Override
247 public int describeContents() {
248 return 0;
249 }
alisiond295ec22013-05-17 10:12:13 -0400250
alisiond8c83882013-05-17 17:00:42 -0400251 @Override
252 public void writeToParcel(Parcel dest, int arg1) {
253 dest.writeInt(type);
254 dest.writeString(number);
255 }
alisiond295ec22013-05-17 10:12:13 -0400256
alisiond8c83882013-05-17 17:00:42 -0400257 private void readFromParcel(Parcel in) {
258 type = in.readInt();
259 number = in.readString();
260 }
alisiond295ec22013-05-17 10:12:13 -0400261
alision11e8e162013-05-28 10:33:14 -0400262 public static final Parcelable.Creator<Phone> CREATOR = new Parcelable.Creator<Phone>() {
alisiond8c83882013-05-17 17:00:42 -0400263 @Override
264 public Phone createFromParcel(Parcel in) {
265 return new Phone(in);
266 }
alisiond295ec22013-05-17 10:12:13 -0400267
alisiond8c83882013-05-17 17:00:42 -0400268 @Override
269 public Phone[] newArray(int size) {
270 return new Phone[size];
271 }
272 };
alisiond295ec22013-05-17 10:12:13 -0400273
alisiond8c83882013-05-17 17:00:42 -0400274 public int getType() {
275 return type;
276 }
277
278 public void setType(int type) {
279 this.type = type;
280 }
281
282 public String getNumber() {
283 return number;
284 }
285
286 public void setNumber(String number) {
287 this.number = number;
288 }
289
290 }
alisiond295ec22013-05-17 10:12:13 -0400291
alision55c36cb2013-06-14 14:57:38 -0400292 public void addPhoneNumber(String tel, int type) {
293 phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400294
alision55c36cb2013-06-14 14:57:38 -0400295 }
296
297 public void addSipNumber(String tel, int type) {
298 sip_phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400299
alision55c36cb2013-06-14 14:57:38 -0400300 }
301
alisioncd8fb912013-06-28 14:43:51 -0400302 public boolean isUser() {
303 return isUser;
304 }
305
Alexandre Lision35c3cbb2013-11-04 17:11:54 -0500306 public boolean hasPhoto() {
307 if (contact_photo.get() != null)
308 return true;
309 return false;
310 }
311
312 public Bitmap getPhoto() {
313 return contact_photo.get();
314 }
315
316 public void setPhoto(Bitmap externalBMP) {
317 contact_photo = new WeakReference<Bitmap>(externalBMP);
318 }
319
Alexandre Savard166dbb62012-09-18 09:37:27 -0400320}