• 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.test.AndroidTestCase;
33 
34 import androidx.test.filters.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         final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
87         kind.actionBody = new BaseAccountType.SimpleInflater(0);
88         kind.typeList = new ArrayList<>();
89         kind.typeList.add(new EditType(1, -1));
90         kind.typeList.add(new EditType(2, -1));
91         kind.typeColumn = Data.DATA2;
92 
93         mValues1.put(kind.typeColumn, 2);
94         mValues2.put(kind.typeColumn, 1);
95 
96         final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2);
97 
98         assertEquals(1, dataList.size());
99         assertEquals(true, dataList.get(0).isSuperPrimary());
100         assertEquals(true, dataList.get(0).isPrimary());
101         assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
102     }
103 
testDataItemCollapsing_email()104     public void testDataItemCollapsing_email() {
105         final String email1 = "email1@google.com";
106         final String email2 = "email2@google.com";
107 
108         mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
109         mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
110         mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
111 
112         mValues1.put(Email.ADDRESS, email1);
113         mValues2.put(Email.ADDRESS, email1);
114         mValues3.put(Email.ADDRESS, email2);
115 
116         mValues1.put(Email.TYPE, Email.TYPE_MOBILE);
117         mValues2.put(Email.TYPE, Email.TYPE_HOME);
118         mValues3.put(Email.TYPE, Email.TYPE_WORK);
119 
120         final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
121 
122         final List<DataItem> dataList =
123                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
124 
125         assertEquals(2, dataList.size());
126         assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress());
127         assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress());
128         assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME),
129                 ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind));
130     }
131 
testDataItemCollapsing_event()132     public void testDataItemCollapsing_event() {
133         final String date1 = "2014-01-01";
134         final String date2 = "2014-02-02";
135         final String customLabel1 = "custom label1";
136         final String customLabel2 = "custom label2";
137 
138         mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
139         mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
140         mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
141         mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
142 
143         mValues1.put(Event.START_DATE, date1);
144         mValues2.put(Event.START_DATE, date1);
145         mValues3.put(Event.START_DATE, date1);
146         mValues4.put(Event.START_DATE, date2);
147 
148         mValues1.put(Event.TYPE, Event.TYPE_CUSTOM);
149         mValues2.put(Event.TYPE, Event.TYPE_CUSTOM);
150         mValues3.put(Event.TYPE, Event.TYPE_CUSTOM);
151         mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
152 
153         mValues1.put(Event.LABEL, customLabel1);
154         mValues2.put(Event.LABEL, customLabel1);
155         mValues3.put(Event.LABEL, customLabel2);
156 
157         final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
158 
159         final List<DataItem> dataList =
160                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
161 
162         assertEquals(3, dataList.size());
163         assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel());
164         assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel());
165         assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate());
166     }
167 
testDataItemCollapsing_im()168     public void testDataItemCollapsing_im() {
169         final String address1 = "address 1";
170         final String address2 = "address 2";
171         final String customProtocol1 = "custom 1";
172         final String customProtocol2 = "custom 2";
173 
174         mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
175         mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
176         mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
177         mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
178 
179         mValues1.put(Im.DATA, address1);
180         mValues2.put(Im.DATA, address1);
181         mValues3.put(Im.DATA, address1);
182         mValues4.put(Im.DATA, address2);
183 
184         mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
185         mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
186         mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
187         mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM);
188 
189         mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1);
190         mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1);
191         mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2);
192 
193         final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
194 
195         final List<DataItem> dataList =
196                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
197 
198         assertEquals(3, dataList.size());
199         assertEquals(address1, ((ImDataItem) dataList.get(0)).getData());
200         assertEquals(address1, ((ImDataItem) dataList.get(1)).getData());
201         assertEquals(address2, ((ImDataItem) dataList.get(2)).getData());
202 
203         assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol());
204         assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol());
205         assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol());
206     }
207 
testDataItemCollapsing_nickname()208     public void testDataItemCollapsing_nickname() {
209         final String nickname1 = "nickname 1";
210         final String nickname2 = "nickname 2";
211 
212         mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
213         mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
214         mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
215 
216         mValues1.put(Nickname.NAME, nickname1);
217         mValues2.put(Nickname.NAME, nickname1);
218         mValues3.put(Nickname.NAME, nickname2);
219 
220         final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
221 
222         final List<DataItem> dataList =
223                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
224 
225         assertEquals(2, dataList.size());
226         assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName());
227         assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName());
228     }
229 
testDataItemCollapsing_note()230     public void testDataItemCollapsing_note() {
231         final String note1 = "note 1";
232         final String note2 = "note 2";
233 
234         mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
235         mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
236         mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
237 
238         mValues1.put(Note.NOTE, note1);
239         mValues2.put(Note.NOTE, note1);
240         mValues3.put(Note.NOTE, note2);
241 
242         DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
243 
244         final List<DataItem> dataList =
245                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
246 
247         assertEquals(2, dataList.size());
248         assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote());
249         assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote());
250     }
251 
testDataItemCollapsing_organization()252     public void testDataItemCollapsing_organization() {
253         final String company1 = "company1";
254         final String company2 = "company2";
255         final String title1 = "title1";
256         final String title2 = "title2";
257 
258         mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
259         mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
260         mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
261         mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
262 
263         mValues1.put(Organization.COMPANY, company1);
264         mValues2.put(Organization.COMPANY, company1);
265         mValues3.put(Organization.COMPANY, company1);
266         mValues4.put(Organization.COMPANY, company2);
267 
268         mValues1.put(Organization.TITLE, title1);
269         mValues2.put(Organization.TITLE, title1);
270         mValues3.put(Organization.TITLE, title2);
271         mValues4.put(Organization.TITLE, title1);
272 
273         final DataKind kind =
274                 mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
275 
276         final List<DataItem> dataList =
277                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
278 
279         assertEquals(3, dataList.size());
280         assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany());
281         assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany());
282         assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany());
283 
284         assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle());
285         assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle());
286     }
287 
testDataItemCollapsing_phone()288     public void testDataItemCollapsing_phone() {
289         final String phone1 = "111-111-1111";
290         final String phone1a = "1111111111";
291         final String phone2 = "222-222-2222";
292 
293         mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
294         mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
295         mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
296 
297         mValues1.put(Phone.NUMBER, phone1);
298         mValues2.put(Phone.NUMBER, phone1a);
299         mValues3.put(Phone.NUMBER, phone2);
300 
301         mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE);
302         mValues2.put(Phone.TYPE, Phone.TYPE_HOME);
303         mValues3.put(Phone.TYPE, Phone.TYPE_WORK);
304 
305         final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
306 
307         final List<DataItem> dataList =
308                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
309         assertEquals(2, dataList.size());
310         assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber());
311         assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber());
312         assertEquals(Phone.TYPE_MOBILE,
313                 ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind));
314     }
315 
testDataItemCollapsing_relation()316     public void testDataItemCollapsing_relation() {
317         final String name1 = "name1";
318         final String name2 = "name2";
319         final String customRelation1 = "custom relation 1";
320         final String customRelation2 = "custom relation 2";
321 
322         mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
323         mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
324         mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
325         mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
326 
327         mValues1.put(Relation.NAME, name1);
328         mValues2.put(Relation.NAME, name1);
329         mValues3.put(Relation.NAME, name1);
330         mValues4.put(Relation.NAME, name2);
331 
332         mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM);
333         mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM);
334         mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM);
335         mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER);
336 
337         mValues1.put(Relation.LABEL, customRelation1);
338         mValues2.put(Relation.LABEL, customRelation1);
339         mValues3.put(Relation.LABEL, customRelation2);
340 
341         final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE);
342 
343         final List<DataItem> dataList =
344                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
345 
346         assertEquals(3, dataList.size());
347         assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName());
348         assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName());
349 
350         assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel());
351         assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel());
352     }
353 
testDataItemCollapsing_sip()354     public void testDataItemCollapsing_sip() {
355         final String sip1 = "sip 1";
356         final String sip2 = "sip 2";
357 
358         mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
359         mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
360         mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
361 
362         mValues1.put(SipAddress.SIP_ADDRESS, sip1);
363         mValues2.put(SipAddress.SIP_ADDRESS, sip1);
364         mValues3.put(SipAddress.SIP_ADDRESS, sip2);
365 
366         mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
367         mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME);
368         mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
369 
370         final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE);
371 
372         final List<DataItem> dataList =
373                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
374 
375         assertEquals(2, dataList.size());
376         assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress());
377         assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress());
378     }
379 
testDataItemCollapsing_structuredName()380     public void testDataItemCollapsing_structuredName() {
381         final String displayName1 = "Display Name 1";
382         final String displayName2 = "Display Name 2";
383 
384         mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
385         mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
386         mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
387 
388         mValues1.put(StructuredName.DISPLAY_NAME, displayName1);
389         mValues2.put(StructuredName.DISPLAY_NAME, displayName1);
390         mValues3.put(StructuredName.DISPLAY_NAME, displayName2);
391 
392         final DataKind kind =
393                 mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
394 
395         final List<DataItem> dataList =
396                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
397 
398         assertEquals(2, dataList.size());
399         assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName());
400         assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName());
401     }
402 
testDataItemCollapsing_structuredPostal()403     public void testDataItemCollapsing_structuredPostal() {
404         final String formattedAddress1 = "Formatted Address 1";
405         final String formattedAddress2 = "Formatted Address 2";
406 
407         mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
408         mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
409         mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
410 
411         mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
412         mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
413         mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2);
414 
415         final DataKind kind =
416                 mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
417 
418         final List<DataItem> dataList =
419                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
420 
421         assertEquals(2, dataList.size());
422         assertEquals(formattedAddress1,
423                 ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress());
424         assertEquals(formattedAddress2,
425                 ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress());
426     }
427 
testDataItemCollapsing_website()428     public void testDataItemCollapsing_website() {
429         final String url1 = "www.url1.com";
430         final String url2 = "www.url2.com";
431 
432         mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
433         mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
434         mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
435 
436         mValues1.put(Website.URL, url1);
437         mValues2.put(Website.URL, url1);
438         mValues3.put(Website.URL, url2);
439 
440         final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE);
441 
442         final List<DataItem> dataList =
443                 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
444 
445         assertEquals(2, dataList.size());
446         assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl());
447         assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl());
448     }
449 }
450