19e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol/*
29e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * Copyright (C) 2016 The Android Open Source Project
39e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol *
49e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * Licensed under the Apache License, Version 2.0 (the "License");
59e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * you may not use this file except in compliance with the License.
69e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * You may obtain a copy of the License at
79e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol *
89e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol *      http://www.apache.org/licenses/LICENSE-2.0
99e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol *
109e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * Unless required by applicable law or agreed to in writing, software
119e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * distributed under the License is distributed on an "AS IS" BASIS,
129e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * See the License for the specific language governing permissions and
149e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * limitations under the License.
159e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol */
169e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolpackage com.android.emergency;
179e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
189e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.content.ContentResolver;
199e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.content.ContentUris;
209e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.content.ContentValues;
219e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.database.Cursor;
229e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.net.Uri;
239e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.provider.ContactsContract;
249e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
259e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
269e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol/**
279e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol * Utils to create and delete contacts.
289e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol */
299e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyolpublic class ContactTestUtils {
309e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
319e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    /** Deletes contacts that match the given name and phone number. */
329e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    public static boolean deleteContact(ContentResolver contentResolver,
339e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                        String name,
349e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                        String phone) {
359e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
369e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                Uri.encode(phone));
379e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        Cursor cursor = contentResolver.query(contactUri, null, null, null, null);
389e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        try {
399e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol            if (cursor.moveToFirst()) {
409e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                do {
419e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                    String displayName = cursor.getString(
429e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                            cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
439e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                    if (displayName.equals(name)) {
449e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                        String lookupKey = cursor.getString(
459e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
469e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI,
479e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                lookupKey);
489e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                        contentResolver.delete(uri, null, null);
499e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                        return true;
509e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                    }
519e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                } while (cursor.moveToNext());
529e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol            }
539e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol            return false;
549e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        } finally {
559e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol            cursor.close();
569e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        }
579e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    }
589e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
599e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    /**
609e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol     * Creates a new contact with the given name and phone number. Returns the
619e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol     * ContactsContract.CommonDataKinds.Phone.CONTENT_URI corresponding to the new contact.
629e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol     */
639e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    public static Uri createContact(ContentResolver contentResolver,
649e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                    String name,
659e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                    String phoneNumber) {
669e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        ContentValues values = new ContentValues();
679e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        Uri rawContactUri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI,
689e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                values);
699e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        long rawContactId = ContentUris.parseId(rawContactUri);
709e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        insertStructuredName(contentResolver, rawContactId, name, values);
719e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        return insertPhoneNumber(contentResolver, rawContactId,
729e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                phoneNumber,
739e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
749e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    }
759e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
769e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    private static void insertStructuredName(ContentResolver contentResolver,
779e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                             long rawContactId,
789e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                             String name,
799e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                             ContentValues values) {
809e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(StructuredName.DISPLAY_NAME, name);
819e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
829e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
839e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        contentResolver.insert(ContactsContract.Data.CONTENT_URI, values);
849e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    }
859e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
869e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    private static Uri insertPhoneNumber(ContentResolver contentResolver,
879e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                         long rawContactId,
889e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                         String phoneNumber,
899e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                                         int type) {
909e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        ContentValues values = new ContentValues();
919e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
929e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.Data.MIMETYPE,
939e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
949e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber);
959e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.CommonDataKinds.Phone.TYPE, type);
969e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        values.put(ContactsContract.CommonDataKinds.Phone.LABEL, "Mobile");
979e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        return contentResolver.insert(ContactsContract.Data.CONTENT_URI, values);
989e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    }
999e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol
1009e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    private ContactTestUtils() {
1019e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        // Prevent instantiation
1029e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol        throw new UnsupportedOperationException();
1039e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol    }
1049e2eea1a8a4d34f8530fc9b042601d4a378bbf43mariagpuyol}
105