• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 package com.android.contacts.model.dataitem;
17 
18 import android.content.ContentValues;
19 import android.provider.ContactsContract.CommonDataKinds.Email;
20 import android.provider.ContactsContract.CommonDataKinds.Event;
21 import android.provider.ContactsContract.CommonDataKinds.Im;
22 import android.provider.ContactsContract.CommonDataKinds.Nickname;
23 import android.provider.ContactsContract.CommonDataKinds.Note;
24 import android.provider.ContactsContract.CommonDataKinds.Organization;
25 import android.provider.ContactsContract.CommonDataKinds.Phone;
26 import android.provider.ContactsContract.CommonDataKinds.Relation;
27 import android.provider.ContactsContract.CommonDataKinds.SipAddress;
28 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
29 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
30 import android.provider.ContactsContract.CommonDataKinds.Website;
31 import android.provider.ContactsContract.Contacts.Data;
32 import android.provider.ContactsContract.Contacts.Entity;
33 import android.test.AndroidTestCase;
34 import android.test.suitebuilder.annotation.SmallTest;
35 
36 import com.android.contacts.Collapser;
37 import com.android.contacts.model.account.AccountType.EditType;
38 import com.android.contacts.model.account.BaseAccountType;
39 import com.android.contacts.model.account.GoogleAccountType;
40 
41 import java.util.ArrayList;
42 import java.util.List;
43 
44 /**
45  * Test case for {@link DataItem}.
46  */
47 @SmallTest
48 public class DataItemTests extends AndroidTestCase {
49 
50     private ContentValues mValues1;
51     private ContentValues mValues2;
52     private ContentValues mValues3;
53     private ContentValues mValues4;
54     private GoogleAccountType mGoogleAccountType;
55 
56     @Override
setUp()57     protected void setUp() {
58         mValues1 = new ContentValues();
59         mValues2 = new ContentValues();
60         mValues3 = new ContentValues();
61         mValues4 = new ContentValues();
62 
63         mValues1.put(Data._ID, 1);
64         mValues2.put(Data._ID, 2);
65         mValues3.put(Data._ID, 3);
66         mValues4.put(Data._ID, 4);
67 
68         mGoogleAccountType = new GoogleAccountType(getContext(), "packageName");
69     }
70 
createDataItemsAndCollapse(DataKind kind, ContentValues... values)71     private List<DataItem> createDataItemsAndCollapse(DataKind kind, ContentValues... values) {
72         final List<DataItem> dataList = new ArrayList<>(values.length);
73         for (ContentValues value : values) {
74             final DataItem data = DataItem.createFrom(value);
75             data.setDataKind(kind);
76             dataList.add(data);
77         }
78         Collapser.collapseList(dataList, getContext());
79         return dataList;
80     }
81 
testDataItemCollapsing_genericDataItemFields()82     public void testDataItemCollapsing_genericDataItemFields() {
83         mValues1.put(Data.IS_SUPER_PRIMARY, 1);
84         mValues2.put(Data.IS_PRIMARY, 0);
85 
86         mValues1.put(Entity.TIMES_USED, 5);
87         mValues2.put(Entity.TIMES_USED, 4);
88 
89         mValues1.put(Entity.LAST_TIME_USED, 555);
90         mValues2.put(Entity.LAST_TIME_USED, 999);
91 
92         final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
93         kind.actionBody = new BaseAccountType.SimpleInflater(0);
94         kind.typeList = new ArrayList<>();
95         kind.typeList.add(new EditType(1, -1));
96         kind.typeList.add(new EditType(2, -1));
97         kind.typeColumn = Data.DATA2;
98 
99         mValues1.put(kind.typeColumn, 2);
100         mValues2.put(kind.typeColumn, 1);
101 
102         final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2);
103 
104         assertEquals(1, dataList.size());
105         assertEquals(true, dataList.get(0).isSuperPrimary());
106         assertEquals(true, dataList.get(0).isPrimary());
107         assertEquals(9, (int) dataList.get(0).getTimesUsed());
108         assertEquals(999L, (long) dataList.get(0).getLastTimeUsed());
109         assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
110     }
111 
testDataItemCollapsing_email()112     public void testDataItemCollapsing_email() {
113         final String email1 = "email1@google.com";
114         final String email2 = "email2@google.com";
115 
116         mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
117         mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
118         mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
119 
120         mValues1.put(Email.ADDRESS, email1);
121         mValues2.put(Email.ADDRESS, email1);
122         mValues3.put(Email.ADDRESS, email2);
123 
124         mValues1.put(Email.TYPE, Email.TYPE_MOBILE);
125         mValues2.put(Email.TYPE, Email.TYPE_HOME);
126         mValues3.put(Email.TYPE, Email.TYPE_WORK);
127 
128         final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
129 
130         final List<DataItem> dataList =
131                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
132 
133         assertEquals(2, dataList.size());
134         assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress());
135         assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress());
136         assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME),
137                 ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind));
138     }
139 
testDataItemCollapsing_event()140     public void testDataItemCollapsing_event() {
141         final String date1 = "2014-01-01";
142         final String date2 = "2014-02-02";
143         final String customLabel1 = "custom label1";
144         final String customLabel2 = "custom label2";
145 
146         mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
147         mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
148         mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
149         mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
150 
151         mValues1.put(Event.START_DATE, date1);
152         mValues2.put(Event.START_DATE, date1);
153         mValues3.put(Event.START_DATE, date1);
154         mValues4.put(Event.START_DATE, date2);
155 
156         mValues1.put(Event.TYPE, Event.TYPE_CUSTOM);
157         mValues2.put(Event.TYPE, Event.TYPE_CUSTOM);
158         mValues3.put(Event.TYPE, Event.TYPE_CUSTOM);
159         mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
160 
161         mValues1.put(Event.LABEL, customLabel1);
162         mValues2.put(Event.LABEL, customLabel1);
163         mValues3.put(Event.LABEL, customLabel2);
164 
165         final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
166 
167         final List<DataItem> dataList =
168                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
169 
170         assertEquals(3, dataList.size());
171         assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel());
172         assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel());
173         assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate());
174     }
175 
testDataItemCollapsing_im()176     public void testDataItemCollapsing_im() {
177         final String address1 = "address 1";
178         final String address2 = "address 2";
179         final String customProtocol1 = "custom 1";
180         final String customProtocol2 = "custom 2";
181 
182         mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
183         mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
184         mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
185         mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
186 
187         mValues1.put(Im.DATA, address1);
188         mValues2.put(Im.DATA, address1);
189         mValues3.put(Im.DATA, address1);
190         mValues4.put(Im.DATA, address2);
191 
192         mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
193         mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
194         mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
195         mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM);
196 
197         mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1);
198         mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1);
199         mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2);
200 
201         final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
202 
203         final List<DataItem> dataList =
204                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
205 
206         assertEquals(3, dataList.size());
207         assertEquals(address1, ((ImDataItem) dataList.get(0)).getData());
208         assertEquals(address1, ((ImDataItem) dataList.get(1)).getData());
209         assertEquals(address2, ((ImDataItem) dataList.get(2)).getData());
210 
211         assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol());
212         assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol());
213         assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol());
214     }
215 
testDataItemCollapsing_nickname()216     public void testDataItemCollapsing_nickname() {
217         final String nickname1 = "nickname 1";
218         final String nickname2 = "nickname 2";
219 
220         mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
221         mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
222         mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
223 
224         mValues1.put(Nickname.NAME, nickname1);
225         mValues2.put(Nickname.NAME, nickname1);
226         mValues3.put(Nickname.NAME, nickname2);
227 
228         final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
229 
230         final List<DataItem> dataList =
231                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
232 
233         assertEquals(2, dataList.size());
234         assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName());
235         assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName());
236     }
237 
testDataItemCollapsing_note()238     public void testDataItemCollapsing_note() {
239         final String note1 = "note 1";
240         final String note2 = "note 2";
241 
242         mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
243         mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
244         mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
245 
246         mValues1.put(Note.NOTE, note1);
247         mValues2.put(Note.NOTE, note1);
248         mValues3.put(Note.NOTE, note2);
249 
250         DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
251 
252         final List<DataItem> dataList =
253                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
254 
255         assertEquals(2, dataList.size());
256         assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote());
257         assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote());
258     }
259 
testDataItemCollapsing_organization()260     public void testDataItemCollapsing_organization() {
261         final String company1 = "company1";
262         final String company2 = "company2";
263         final String title1 = "title1";
264         final String title2 = "title2";
265 
266         mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
267         mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
268         mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
269         mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
270 
271         mValues1.put(Organization.COMPANY, company1);
272         mValues2.put(Organization.COMPANY, company1);
273         mValues3.put(Organization.COMPANY, company1);
274         mValues4.put(Organization.COMPANY, company2);
275 
276         mValues1.put(Organization.TITLE, title1);
277         mValues2.put(Organization.TITLE, title1);
278         mValues3.put(Organization.TITLE, title2);
279         mValues4.put(Organization.TITLE, title1);
280 
281         final DataKind kind =
282                 mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
283 
284         final List<DataItem> dataList =
285                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
286 
287         assertEquals(3, dataList.size());
288         assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany());
289         assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany());
290         assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany());
291 
292         assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle());
293         assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle());
294     }
295 
testDataItemCollapsing_phone()296     public void testDataItemCollapsing_phone() {
297         final String phone1 = "111-111-1111";
298         final String phone1a = "1111111111";
299         final String phone2 = "222-222-2222";
300 
301         mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
302         mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
303         mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
304 
305         mValues1.put(Phone.NUMBER, phone1);
306         mValues2.put(Phone.NUMBER, phone1a);
307         mValues3.put(Phone.NUMBER, phone2);
308 
309         mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE);
310         mValues2.put(Phone.TYPE, Phone.TYPE_HOME);
311         mValues3.put(Phone.TYPE, Phone.TYPE_WORK);
312 
313         final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
314 
315         final List<DataItem> dataList =
316                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
317         assertEquals(2, dataList.size());
318         assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber());
319         assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber());
320         assertEquals(Phone.TYPE_MOBILE,
321                 ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind));
322     }
323 
testDataItemCollapsing_relation()324     public void testDataItemCollapsing_relation() {
325         final String name1 = "name1";
326         final String name2 = "name2";
327         final String customRelation1 = "custom relation 1";
328         final String customRelation2 = "custom relation 2";
329 
330         mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
331         mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
332         mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
333         mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
334 
335         mValues1.put(Relation.NAME, name1);
336         mValues2.put(Relation.NAME, name1);
337         mValues3.put(Relation.NAME, name1);
338         mValues4.put(Relation.NAME, name2);
339 
340         mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM);
341         mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM);
342         mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM);
343         mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER);
344 
345         mValues1.put(Relation.LABEL, customRelation1);
346         mValues2.put(Relation.LABEL, customRelation1);
347         mValues3.put(Relation.LABEL, customRelation2);
348 
349         final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE);
350 
351         final List<DataItem> dataList =
352                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
353 
354         assertEquals(3, dataList.size());
355         assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName());
356         assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName());
357 
358         assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel());
359         assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel());
360     }
361 
testDataItemCollapsing_sip()362     public void testDataItemCollapsing_sip() {
363         final String sip1 = "sip 1";
364         final String sip2 = "sip 2";
365 
366         mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
367         mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
368         mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
369 
370         mValues1.put(SipAddress.SIP_ADDRESS, sip1);
371         mValues2.put(SipAddress.SIP_ADDRESS, sip1);
372         mValues3.put(SipAddress.SIP_ADDRESS, sip2);
373 
374         mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
375         mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME);
376         mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
377 
378         final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE);
379 
380         final List<DataItem> dataList =
381                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
382 
383         assertEquals(2, dataList.size());
384         assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress());
385         assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress());
386     }
387 
testDataItemCollapsing_structuredName()388     public void testDataItemCollapsing_structuredName() {
389         final String displayName1 = "Display Name 1";
390         final String displayName2 = "Display Name 2";
391 
392         mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
393         mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
394         mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
395 
396         mValues1.put(StructuredName.DISPLAY_NAME, displayName1);
397         mValues2.put(StructuredName.DISPLAY_NAME, displayName1);
398         mValues3.put(StructuredName.DISPLAY_NAME, displayName2);
399 
400         final DataKind kind =
401                 mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
402 
403         final List<DataItem> dataList =
404                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
405 
406         assertEquals(2, dataList.size());
407         assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName());
408         assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName());
409     }
410 
testDataItemCollapsing_structuredPostal()411     public void testDataItemCollapsing_structuredPostal() {
412         final String formattedAddress1 = "Formatted Address 1";
413         final String formattedAddress2 = "Formatted Address 2";
414 
415         mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
416         mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
417         mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
418 
419         mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
420         mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
421         mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2);
422 
423         final DataKind kind =
424                 mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
425 
426         final List<DataItem> dataList =
427                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
428 
429         assertEquals(2, dataList.size());
430         assertEquals(formattedAddress1,
431                 ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress());
432         assertEquals(formattedAddress2,
433                 ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress());
434     }
435 
testDataItemCollapsing_website()436     public void testDataItemCollapsing_website() {
437         final String url1 = "www.url1.com";
438         final String url2 = "www.url2.com";
439 
440         mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
441         mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
442         mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
443 
444         mValues1.put(Website.URL, url1);
445         mValues2.put(Website.URL, url1);
446         mValues3.put(Website.URL, url2);
447 
448         final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE);
449 
450         final List<DataItem> dataList =
451                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
452 
453         assertEquals(2, dataList.size());
454         assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl());
455         assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl());
456     }
457 }
458