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}