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