blob: 757db40328f5f63d0dad436295b485a10df6e99b [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
alisiond295ec22013-05-17 10:12:13 -040033import java.util.ArrayList;
Alexandre Savard166dbb62012-09-18 09:37:27 -040034
alision2ec64f92013-06-17 17:28:58 -040035import android.content.ContentResolver;
36import android.database.Cursor;
alisiond295ec22013-05-17 10:12:13 -040037import android.os.Parcel;
38import android.os.Parcelable;
alision2ec64f92013-06-17 17:28:58 -040039import android.provider.ContactsContract.Profile;
alisiond295ec22013-05-17 10:12:13 -040040
41public class CallContact implements Parcelable {
42
alisiond8c83882013-05-17 17:00:42 -040043 private long id;
44 private String mDisplayName;
45 private long photo_id;
46 private ArrayList<Phone> phones, sip_phones;
47 private String mEmail;
alisioncd8fb912013-06-28 14:43:51 -040048 private boolean isUser;
alisiond295ec22013-05-17 10:12:13 -040049
alisioncd8fb912013-06-28 14:43:51 -040050 private CallContact(long cID, String displayName, long photoID, ArrayList<Phone> p, ArrayList<Phone> sip, String mail, boolean user) {
alisiond8c83882013-05-17 17:00:42 -040051 id = cID;
alision465ceba2013-07-04 09:24:30 -040052 mDisplayName = displayName;
alisiond8c83882013-05-17 17:00:42 -040053 phones = p;
54 sip_phones = sip;
55 mEmail = mail;
56 photo_id = photoID;
alisioncd8fb912013-06-28 14:43:51 -040057 isUser = user;
alisiond8c83882013-05-17 17:00:42 -040058 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040059
alisiond8c83882013-05-17 17:00:42 -040060 public CallContact(Parcel in) {
61 readFromParcel(in);
62 }
alisiond295ec22013-05-17 10:12:13 -040063
alisiond8c83882013-05-17 17:00:42 -040064 public long getId() {
65 return id;
66 }
alisiond295ec22013-05-17 10:12:13 -040067
alisiond8c83882013-05-17 17:00:42 -040068 public String getmDisplayName() {
69 return mDisplayName;
70 }
Alexandre Savard166dbb62012-09-18 09:37:27 -040071
alisiond8c83882013-05-17 17:00:42 -040072 public long getPhoto_id() {
73 return photo_id;
74 }
alisiond295ec22013-05-17 10:12:13 -040075
alisiond8c83882013-05-17 17:00:42 -040076 public void setPhoto_id(long photo_id) {
77 this.photo_id = photo_id;
78 }
alisiond295ec22013-05-17 10:12:13 -040079
alisiond8c83882013-05-17 17:00:42 -040080 public ArrayList<Phone> getPhones() {
81 return phones;
82 }
alisiond295ec22013-05-17 10:12:13 -040083
alisiond8c83882013-05-17 17:00:42 -040084 public void setPhones(ArrayList<Phone> phones) {
85 this.phones = phones;
86 }
alisiond295ec22013-05-17 10:12:13 -040087
alisiond8c83882013-05-17 17:00:42 -040088 public ArrayList<Phone> getSip_phones() {
89 return sip_phones;
90 }
alisiond295ec22013-05-17 10:12:13 -040091
alisiond8c83882013-05-17 17:00:42 -040092 public void setSip_phones(ArrayList<Phone> sip_phones) {
93 this.sip_phones = sip_phones;
94 }
alisiond295ec22013-05-17 10:12:13 -040095
alisiond8c83882013-05-17 17:00:42 -040096 public Phone getSipPhone() {
97 if (sip_phones.size() > 0) {
98 return sip_phones.get(0);
99 }
100 if (phones.size() > 0) {
101 return phones.get(0);
102 }
103 return null;
104 }
Alexandre Savard38d6a152012-09-18 13:33:02 -0400105
alisiond8c83882013-05-17 17:00:42 -0400106 public String getmEmail() {
107 return mEmail;
108 }
alisiond295ec22013-05-17 10:12:13 -0400109
alisiond8c83882013-05-17 17:00:42 -0400110 public void setmEmail(String mEmail) {
111 this.mEmail = mEmail;
112 }
alisiond295ec22013-05-17 10:12:13 -0400113
alisiond8c83882013-05-17 17:00:42 -0400114 @Override
115 public String toString() {
116 return mDisplayName;
117 }
alisiond295ec22013-05-17 10:12:13 -0400118
alisiond8c83882013-05-17 17:00:42 -0400119 public static class ContactBuilder {
alisiond295ec22013-05-17 10:12:13 -0400120
alisiond8c83882013-05-17 17:00:42 -0400121 long contactID;
122 String contactName;
123 long contactPhoto;
124 ArrayList<Phone> phones;
125 ArrayList<Phone> sip;
126 String contactMail;
127 boolean hasPhoto;
alisiond295ec22013-05-17 10:12:13 -0400128
alisiond8c83882013-05-17 17:00:42 -0400129 public ContactBuilder startNewContact(long id, String displayName, long photo_id) {
130 contactID = id;
alisioncd8fb912013-06-28 14:43:51 -0400131
alisiond8c83882013-05-17 17:00:42 -0400132 contactName = displayName;
133 contactPhoto = photo_id;
134 phones = new ArrayList<Phone>();
135 sip = new ArrayList<Phone>();
136 return this;
137 }
alisiond295ec22013-05-17 10:12:13 -0400138
alisiond8c83882013-05-17 17:00:42 -0400139 public ContactBuilder addPhoneNumber(String num, int type) {
140 phones.add(new Phone(num, type));
141 return this;
142 }
alisiond295ec22013-05-17 10:12:13 -0400143
alisiond8c83882013-05-17 17:00:42 -0400144 public ContactBuilder addSipNumber(String num, int type) {
145 sip.add(new Phone(num, type));
146 return this;
147 }
alisiond295ec22013-05-17 10:12:13 -0400148
alisiond8c83882013-05-17 17:00:42 -0400149 public CallContact build() {
alisioncd8fb912013-06-28 14:43:51 -0400150 return new CallContact(contactID, contactName, contactPhoto, phones, sip, contactMail, false);
alisiond8c83882013-05-17 17:00:42 -0400151 }
Adrien Béraud33268882013-05-18 03:41:15 +1000152
alisiond8c83882013-05-17 17:00:42 -0400153 public static ContactBuilder getInstance() {
154 return new ContactBuilder();
155 }
alisiond295ec22013-05-17 10:12:13 -0400156
alisionfde875f2013-05-28 17:01:54 -0400157 public static CallContact buildUnknownContact(String to) {
158 ArrayList<Phone> phones = new ArrayList<Phone>();
alision84813a12013-05-27 17:40:39 -0400159 phones.add(new Phone(to, 0));
alision2ec64f92013-06-17 17:28:58 -0400160
alisioncd8fb912013-06-28 14:43:51 -0400161 return new CallContact(-1, to, 0, phones, new ArrayList<CallContact.Phone>(), "", false);
alision84813a12013-05-27 17:40:39 -0400162 }
alision2ec64f92013-06-17 17:28:58 -0400163
164 public static CallContact buildUserContact(ContentResolver cr, String displayName) {
165 String[] mProjection = new String[] { Profile._ID, Profile.PHOTO_ID };
166 Cursor mProfileCursor = cr.query(Profile.CONTENT_URI, mProjection, null, null, null);
167 CallContact result = null;
168 if (mProfileCursor.getCount() > 0) {
169 mProfileCursor.moveToFirst();
alision2ec64f92013-06-17 17:28:58 -0400170 result = new CallContact(mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile._ID)), displayName,
171 mProfileCursor.getLong(mProfileCursor.getColumnIndex(Profile.PHOTO_ID)), new ArrayList<Phone>(),
alisioncd8fb912013-06-28 14:43:51 -0400172 new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400173 } else {
alisioncd8fb912013-06-28 14:43:51 -0400174 result = new CallContact(-1, displayName, 0, new ArrayList<Phone>(), new ArrayList<CallContact.Phone>(), "", true);
alision2ec64f92013-06-17 17:28:58 -0400175 }
176 mProfileCursor.close();
177 return result;
alision85704182013-05-29 15:23:03 -0400178 }
alision84813a12013-05-27 17:40:39 -0400179
alisiond8c83882013-05-17 17:00:42 -0400180 }
alisiond295ec22013-05-17 10:12:13 -0400181
alisiond8c83882013-05-17 17:00:42 -0400182 @Override
183 public int describeContents() {
184 return 0;
185 }
alisiond295ec22013-05-17 10:12:13 -0400186
alisiond8c83882013-05-17 17:00:42 -0400187 @Override
188 public void writeToParcel(Parcel dest, int flags) {
189 dest.writeLong(id);
190 dest.writeString(mDisplayName);
191 dest.writeLong(photo_id);
192 dest.writeTypedList(phones);
alisiond295ec22013-05-17 10:12:13 -0400193
alisiond8c83882013-05-17 17:00:42 -0400194 dest.writeTypedList(sip_phones);
alision2ec64f92013-06-17 17:28:58 -0400195
alisiond8c83882013-05-17 17:00:42 -0400196 dest.writeString(mEmail);
alisioncd8fb912013-06-28 14:43:51 -0400197 dest.writeByte((byte) (isUser ? 1 : 0));
alisiond295ec22013-05-17 10:12:13 -0400198
alisiond8c83882013-05-17 17:00:42 -0400199 }
alisiond295ec22013-05-17 10:12:13 -0400200
alisiond8c83882013-05-17 17:00:42 -0400201 private void readFromParcel(Parcel in) {
alisiond295ec22013-05-17 10:12:13 -0400202
alisiond8c83882013-05-17 17:00:42 -0400203 id = in.readLong();
204 mDisplayName = in.readString();
205 photo_id = in.readLong();
206 phones = new ArrayList<CallContact.Phone>();
207 sip_phones = new ArrayList<CallContact.Phone>();
208 in.readTypedList(phones, Phone.CREATOR);
209 in.readTypedList(sip_phones, Phone.CREATOR);
210 mEmail = in.readString();
alisioncd8fb912013-06-28 14:43:51 -0400211 isUser = in.readByte() == 1 ? true : false;
alisiond8c83882013-05-17 17:00:42 -0400212 }
alisiond295ec22013-05-17 10:12:13 -0400213
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400214 public static final Parcelable.Creator<CallContact> CREATOR = new Parcelable.Creator<CallContact>() {
alisiond8c83882013-05-17 17:00:42 -0400215 @Override
216 public CallContact createFromParcel(Parcel in) {
217 return new CallContact(in);
218 }
alisiond295ec22013-05-17 10:12:13 -0400219
alisiond8c83882013-05-17 17:00:42 -0400220 @Override
221 public CallContact[] newArray(int size) {
222 return new CallContact[size];
223 }
224 };
alisiond295ec22013-05-17 10:12:13 -0400225
alisiond8c83882013-05-17 17:00:42 -0400226 public static class Phone implements Parcelable {
alisiond295ec22013-05-17 10:12:13 -0400227
alisiond8c83882013-05-17 17:00:42 -0400228 int type;
229 String number;
alisiond295ec22013-05-17 10:12:13 -0400230
alisiond8c83882013-05-17 17:00:42 -0400231 public Phone(String num, int ty) {
232 type = ty;
233 number = num;
234 }
alisiond295ec22013-05-17 10:12:13 -0400235
alisiond8c83882013-05-17 17:00:42 -0400236 public Phone(Parcel in) {
237 readFromParcel(in);
238 }
alisiond295ec22013-05-17 10:12:13 -0400239
alisiond8c83882013-05-17 17:00:42 -0400240 @Override
241 public int describeContents() {
242 return 0;
243 }
alisiond295ec22013-05-17 10:12:13 -0400244
alisiond8c83882013-05-17 17:00:42 -0400245 @Override
246 public void writeToParcel(Parcel dest, int arg1) {
247 dest.writeInt(type);
248 dest.writeString(number);
249 }
alisiond295ec22013-05-17 10:12:13 -0400250
alisiond8c83882013-05-17 17:00:42 -0400251 private void readFromParcel(Parcel in) {
252 type = in.readInt();
253 number = in.readString();
254 }
alisiond295ec22013-05-17 10:12:13 -0400255
alision11e8e162013-05-28 10:33:14 -0400256 public static final Parcelable.Creator<Phone> CREATOR = new Parcelable.Creator<Phone>() {
alisiond8c83882013-05-17 17:00:42 -0400257 @Override
258 public Phone createFromParcel(Parcel in) {
259 return new Phone(in);
260 }
alisiond295ec22013-05-17 10:12:13 -0400261
alisiond8c83882013-05-17 17:00:42 -0400262 @Override
263 public Phone[] newArray(int size) {
264 return new Phone[size];
265 }
266 };
alisiond295ec22013-05-17 10:12:13 -0400267
alisiond8c83882013-05-17 17:00:42 -0400268 public int getType() {
269 return type;
270 }
271
272 public void setType(int type) {
273 this.type = type;
274 }
275
276 public String getNumber() {
277 return number;
278 }
279
280 public void setNumber(String number) {
281 this.number = number;
282 }
283
284 }
alisiond295ec22013-05-17 10:12:13 -0400285
alision55c36cb2013-06-14 14:57:38 -0400286 public void addPhoneNumber(String tel, int type) {
287 phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400288
alision55c36cb2013-06-14 14:57:38 -0400289 }
290
291 public void addSipNumber(String tel, int type) {
292 sip_phones.add(new Phone(tel, type));
alision2ec64f92013-06-17 17:28:58 -0400293
alision55c36cb2013-06-14 14:57:38 -0400294 }
295
alisioncd8fb912013-06-28 14:43:51 -0400296 public boolean isUser() {
297 return isUser;
298 }
299
Alexandre Savard166dbb62012-09-18 09:37:27 -0400300}