18ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng/* 28ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Copyright (C) 2013 The Android Open Source Project 38ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 48ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 58ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * you may not use this file except in compliance with the License. 68ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * You may obtain a copy of the License at 78ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 88ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 98ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 108ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Unless required by applicable law or agreed to in writing, software 118ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 128ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * See the License for the specific language governing permissions and 148ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * limitations under the License 158ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 168ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 178ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengpackage com.android.providers.contacts.testutil; 188ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 198ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengimport android.content.ContentResolver; 208ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengimport android.content.ContentUris; 218ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengimport android.content.ContentValues; 228ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengimport android.net.Uri; 238ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengimport android.provider.ContactsContract; 248a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onukiimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 258ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwellimport android.provider.ContactsContract.Data; 268ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 278ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng/** 288ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Convenience methods for operating on the Data table. 298ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 308ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengpublic class DataUtil { 318ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 328ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng private static final Uri URI = ContactsContract.Data.CONTENT_URI; 338ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 348ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static void delete(ContentResolver resolver, long dataId) { 358ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng Uri uri = ContentUris.withAppendedId(URI, dataId); 368ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng resolver.delete(uri, null, null); 378ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 388ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 398ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static void update(ContentResolver resolver, long dataId, ContentValues values) { 408ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng Uri uri = ContentUris.withAppendedId(URI, dataId); 418ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng resolver.update(uri, values, null, null); 428ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 438ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 448ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static Uri insertStructuredName(ContentResolver resolver, long rawContactId, 458ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng ContentValues values) { 468ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); 478a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki values.put(ContactsContract.Data.MIMETYPE, 488a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 498ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng Uri resultUri = resolver.insert(ContactsContract.Data.CONTENT_URI, values); 508ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return resultUri; 518ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 528ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 538ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static Uri insertStructuredName(ContentResolver resolver, long rawContactId, 548ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng String givenName, String familyName) { 558a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki return insertStructuredName(resolver, rawContactId, givenName, familyName, 568a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki /* phonetic given =*/ null); 578a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki } 588a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki 598a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki public static Uri insertStructuredName( 608a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki ContentResolver resolver, long rawContactId, String givenName, String familyName, 613cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell String phoneticFamily) { 623cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell return insertStructuredName(resolver, rawContactId, givenName, familyName, phoneticFamily, 638ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell /* isSuperPrimary = true */ false); 648ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell } 658ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell 668ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell public static Uri insertStructuredName( 678ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell ContentResolver resolver, long rawContactId, String givenName, String familyName, 683cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell String phoneticFamily, boolean isSuperPrimary) { 698ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng ContentValues values = new ContentValues(); 708ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng StringBuilder sb = new StringBuilder(); 718ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng if (givenName != null) { 728ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng sb.append(givenName); 738ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 748ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng if (givenName != null && familyName != null) { 758ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng sb.append(" "); 768ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 778ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng if (familyName != null) { 788ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng sb.append(familyName); 798ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 803cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell if (sb.length() == 0 && phoneticFamily != null) { 813cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell sb.append(phoneticFamily); 828a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki } 838a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki values.put(StructuredName.DISPLAY_NAME, sb.toString()); 848a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki values.put(StructuredName.GIVEN_NAME, givenName); 858a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki values.put(StructuredName.FAMILY_NAME, familyName); 863cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell if (phoneticFamily != null) { 873cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell // When creating phonetic names, be careful to use PHONETIC_FAMILY_NAME instead of 883cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell // PHONETIC_GIVEN_NAME, to work around b/19612393. 893cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell values.put(StructuredName.PHONETIC_FAMILY_NAME, phoneticFamily); 908a8ddc3d1ceee9872ace06326ebe999ba171f70bMakoto Onuki } 918ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell if (isSuperPrimary) { 928ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell values.put(Data.IS_PRIMARY, 1); 938ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell values.put(Data.IS_SUPER_PRIMARY, 1); 948ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell } 958ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 968ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return insertStructuredName(resolver, rawContactId, values); 978ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 983cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell 993cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell public static Uri insertPhoneticName(ContentResolver resolver, long rawContactId, 1003cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell String phoneticFamilyName) { 1013cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell ContentValues values = new ContentValues(); 1023cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell // When creating phonetic names, be careful to use PHONETIC_FAMILY_NAME instead of 1033cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell // PHONETIC_GIVEN_NAME, to work around b/19612393. 1043cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell values.put(StructuredName.PHONETIC_FAMILY_NAME, phoneticFamilyName); 1053cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell return insertStructuredName(resolver, rawContactId, values); 1063cf9ac64046bfd65d419476c900d3d98d3eccfebBrian Attwell } 1078ddd7038fb59c1b346ee8baa8fcef57cc3eebf0cBrian Attwell}