LegacyApiSupport.java revision a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0
1f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov/* 2f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project 3f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 4f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * you may not use this file except in compliance with the License. 6f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * You may obtain a copy of the License at 7f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 8f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 10f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * See the License for the specific language governing permissions and 14f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * limitations under the License 15f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov */ 16f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovpackage com.android.providers.contacts; 17f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 18e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.DataColumns; 190f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.ExtensionsColumns; 200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.GroupsColumns; 21e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.MimetypesColumns; 22e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.PhoneColumns; 23c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport com.android.providers.contacts.OpenHelper.RawContactsColumns; 24f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport com.android.providers.contacts.OpenHelper.Tables; 25f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 26c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.app.SearchManager; 27f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.ContentUris; 28f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.ContentValues; 29f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.Context; 30f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.UriMatcher; 31f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.Cursor; 32e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.database.DatabaseUtils; 33f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteDatabase; 34f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteQueryBuilder; 35f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteStatement; 36f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.net.Uri; 37f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract; 38e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.Contacts.ContactMethods; 39f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.Contacts.People; 40e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.Data; 410f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport android.provider.ContactsContract.Groups; 4270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikovimport android.provider.ContactsContract.Presence; 43c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.provider.ContactsContract.RawContacts; 44e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email; 450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.GroupMembership; 46e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Im; 47f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Note; 483cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Organization; 49e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 50c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Photo; 51f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 5267dde51ab932dc84d95a203b113989b13437f13dJeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 53c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.util.Log; 54f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 55f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport java.util.HashMap; 56f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 57d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikovpublic class LegacyApiSupport implements OpenHelper.Delegate { 58f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 59f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 60f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 61f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE = 1; 62f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE_ID = 2; 63f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE_UPDATE_CONTACT_TIME = 3; 643cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final int ORGANIZATIONS = 4; 653cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final int ORGANIZATIONS_ID = 5; 66e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_CONTACTMETHODS = 6; 67e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_CONTACTMETHODS_ID = 7; 68e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int CONTACTMETHODS = 8; 69e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int CONTACTMETHODS_ID = 9; 70e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_PHONES = 10; 71e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_PHONES_ID = 11; 72e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PHONES = 12; 73e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PHONES_ID = 13; 740f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int EXTENSIONS = 14; 750f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int EXTENSIONS_ID = 15; 760f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_EXTENSIONS = 16; 770f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_EXTENSIONS_ID = 17; 780f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPS = 18; 790f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPS_ID = 19; 800f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPMEMBERSHIP = 20; 810f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPMEMBERSHIP_ID = 21; 820f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_GROUPMEMBERSHIP = 22; 830f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_GROUPMEMBERSHIP_ID = 23; 84c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PEOPLE_PHOTO = 24; 85c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PHOTOS = 25; 86c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PHOTOS_ID = 26; 8770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov private static final int PRESENCE = 27; 8870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov private static final int PRESENCE_ID = 28; 89445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov private static final int PEOPLE_FILTER = 29; 9033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov private static final int DELETED_PEOPLE = 30; 9133b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov private static final int DELETED_GROUPS = 31; 92c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov private static final int SEARCH_SUGGESTIONS = 32; 93c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 9433b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 950f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 96e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String PEOPLE_JOINS = 975ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " LEFT OUTER JOIN data name ON (raw_contacts._id = name.raw_contact_id" 98e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = name.mimetype_id)" 99e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + StructuredName.CONTENT_ITEM_TYPE + "')" 1005ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data organization ON (raw_contacts._id = organization.raw_contact_id" 101e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = organization.mimetype_id)" 102e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Organization.CONTENT_ITEM_TYPE + "' AND organization.is_primary)" 1035ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data email ON (raw_contacts._id = email.raw_contact_id" 104e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = email.mimetype_id)" 105e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Email.CONTENT_ITEM_TYPE + "' AND email.is_primary)" 1065ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data note ON (raw_contacts._id = note.raw_contact_id" 107e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = note.mimetype_id)" 108e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Note.CONTENT_ITEM_TYPE + "')" 1095ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data phone ON (raw_contacts._id = phone.raw_contact_id" 110e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = phone.mimetype_id)" 111e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Phone.CONTENT_ITEM_TYPE + "' AND phone.is_primary)"; 112e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 113d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String DATA_JOINS = 114d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " JOIN mimetypes ON (mimetypes._id = data.mimetype_id)" 1155ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " JOIN raw_contacts ON (raw_contacts._id = data.raw_contact_id)" 116d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + PEOPLE_JOINS; 117d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 11870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public static final String PRESENCE_JOINS = 11970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov " LEFT OUTER JOIN presence ON (" 12070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " presence.presence_id = (SELECT max(presence_id) FROM presence" 1215ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " WHERE view_v1_people._id = presence.raw_contact_id))"; 12270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 123e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String PHONETIC_NAME_SQL = "trim(trim(" 124e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_GIVEN_NAME + ",' ')||' '||" 125e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_MIDDLE_NAME + ",' '))||' '||" 126e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_FAMILY_NAME + ",' ')) "; 127e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 128e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String CONTACT_METHOD_KIND_SQL = 129d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "CAST ((CASE WHEN mimetype='" + Email.CONTENT_ITEM_TYPE + "'" 130e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_EMAIL 131e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 132e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " (CASE WHEN mimetype='" + Im.CONTENT_ITEM_TYPE +"'" 133e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_IM 134e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 13567dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey + " (CASE WHEN mimetype='" + StructuredPostal.CONTENT_ITEM_TYPE + "'" 136e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_POSTAL 137e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 138e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " NULL" 139e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " END)" 140e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " END)" 141d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " END) AS INTEGER)"; 142f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 143f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public interface LegacyTables { 144d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String PEOPLE = "view_v1_people"; 14570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public static final String PEOPLE_JOIN_PRESENCE = "view_v1_people" + PRESENCE_JOINS; 146d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String GROUPS = "view_v1_groups"; 147d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String ORGANIZATIONS = "view_v1_organizations"; 148d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String CONTACT_METHODS = "view_v1_contact_methods"; 149d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String PHONES = "view_v1_phones"; 150d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String EXTENSIONS = "view_v1_extensions"; 151d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String GROUP_MEMBERSHIP = "view_v1_group_membership"; 152c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String PHOTOS = "view_v1_photos"; 15370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public static final String PRESENCE_JOIN_CONTACTS = Tables.PRESENCE + 1545ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " LEFT OUTER JOIN " + Tables.RAW_CONTACTS 1555ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " ON (" + Tables.PRESENCE + "." + Presence.RAW_CONTACT_ID + "=" 1566cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContactsColumns.CONCRETE_ID + ")"; 157f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 158f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 159e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] ORGANIZATION_MIME_TYPES = new String[] { 160e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Organization.CONTENT_ITEM_TYPE 161e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 162e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 163e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] CONTACT_METHOD_MIME_TYPES = new String[] { 164e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Email.CONTENT_ITEM_TYPE, 165e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Im.CONTENT_ITEM_TYPE, 16667dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey StructuredPostal.CONTENT_ITEM_TYPE, 167e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 168e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 169e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] PHONE_MIME_TYPES = new String[] { 170e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Phone.CONTENT_ITEM_TYPE 171e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 172e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 173c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private interface PhotoQuery { 174c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov String[] COLUMNS = { Data._ID }; 175c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 176c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int _ID = 0; 177c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 178c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 179c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov /** 180c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov * A custom data row that is used to store legacy photo data fields no 181c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov * longer directly supported by the API. 182c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov */ 183c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private interface LegacyPhotoData { 184c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo_v1_extras"; 185c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 186c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String PHOTO_DATA_ID = Data.DATA1; 187c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String LOCAL_VERSION = Data.DATA2; 188c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String DOWNLOAD_REQUIRED = Data.DATA3; 189c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String EXISTS_ON_SERVER = Data.DATA4; 190c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String SYNC_ERROR = Data.DATA5; 191c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 192c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 193c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String LEGACY_PHOTO_JOIN = 1945ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " LEFT OUTER JOIN data legacy_photo ON (raw_contacts._id = legacy_photo.raw_contact_id" 195c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = legacy_photo.mimetype_id)" 196c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + "='" + LegacyPhotoData.CONTENT_ITEM_TYPE + "'" 197c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND " + DataColumns.CONCRETE_ID + " = legacy_photo." + LegacyPhotoData.PHOTO_DATA_ID 198c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + ")"; 199c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 200f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final HashMap<String, String> sPeopleProjectionMap; 2013cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final HashMap<String, String> sOrganizationProjectionMap; 202e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final HashMap<String, String> sContactMethodProjectionMap; 203e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final HashMap<String, String> sPhoneProjectionMap; 2040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sExtensionProjectionMap; 2050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sGroupProjectionMap; 2060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sGroupMembershipProjectionMap; 207c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final HashMap<String, String> sPhotoProjectionMap; 20870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov private static final HashMap<String, String> sPresenceProjectionMap; 209f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 210f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov static { 211f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 212f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // Contacts URI matching table 213f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov UriMatcher matcher = sUriMatcher; 214f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 215f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String authority = android.provider.Contacts.AUTHORITY; 2160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "extensions", EXTENSIONS); 2170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "extensions/#", EXTENSIONS_ID); 2180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groups", GROUPS); 2190f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groups/#", GROUPS_ID); 220f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/name/*/members", GROUP_NAME_MEMBERS); 221f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/name/*/members/filter/*", 222f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// GROUP_NAME_MEMBERS_FILTER); 223f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/system_id/*/members", GROUP_SYSTEM_ID_MEMBERS); 224f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/system_id/*/members/filter/*", 225f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// GROUP_SYSTEM_ID_MEMBERS_FILTER); 2260f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groupmembership", GROUPMEMBERSHIP); 2270f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groupmembership/#", GROUPMEMBERSHIP_ID); 228f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groupmembershipraw", GROUPMEMBERSHIP_RAW); 229f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people", PEOPLE); 230f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/strequent", PEOPLE_STREQUENT); 231f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/strequent/filter/*", PEOPLE_STREQUENT_FILTER); 232445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov matcher.addURI(authority, "people/filter/*", PEOPLE_FILTER); 233f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/with_phones_filter/*", 234f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_WITH_PHONES_FILTER); 235f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/with_email_or_im_filter/*", 236f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_WITH_EMAIL_OR_IM_FILTER); 237f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people/#", PEOPLE_ID); 2380f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/extensions", PEOPLE_EXTENSIONS); 2390f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/extensions/#", PEOPLE_EXTENSIONS_ID); 240e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/phones", PEOPLE_PHONES); 241e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/phones/#", PEOPLE_PHONES_ID); 242f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/phones_with_presence", 243f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_PHONES_WITH_PRESENCE); 244c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "people/#/photo", PEOPLE_PHOTO); 245f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/photo/data", PEOPLE_PHOTO_DATA); 246e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/contact_methods", PEOPLE_CONTACTMETHODS); 247f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/contact_methods_with_presence", 248f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_CONTACTMETHODS_WITH_PRESENCE); 249e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/contact_methods/#", PEOPLE_CONTACTMETHODS_ID); 250f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/organizations", PEOPLE_ORGANIZATIONS); 251f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/organizations/#", PEOPLE_ORGANIZATIONS_ID); 2520f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/groupmembership", PEOPLE_GROUPMEMBERSHIP); 2530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/groupmembership/#", PEOPLE_GROUPMEMBERSHIP_ID); 254f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/raw", PEOPLE_RAW); 255f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/owner", PEOPLE_OWNER); 256f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people/#/update_contact_time", 257f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov PEOPLE_UPDATE_CONTACT_TIME); 25833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov matcher.addURI(authority, "deleted_people", DELETED_PEOPLE); 25933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov matcher.addURI(authority, "deleted_groups", DELETED_GROUPS); 260e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "phones", PHONES); 261f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones_with_presence", PHONES_WITH_PRESENCE); 262f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones/filter/*", PHONES_FILTER); 263f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones/filter_name/*", PHONES_FILTER_NAME); 264f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones/mobile_filter_name/*", 265f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PHONES_MOBILE_FILTER_NAME); 266e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "phones/#", PHONES_ID); 267c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "photos", PHOTOS); 268c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "photos/#", PHOTOS_ID); 269e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "contact_methods", CONTACTMETHODS); 270f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "contact_methods/email", CONTACTMETHODS_EMAIL); 271f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "contact_methods/email/*", CONTACTMETHODS_EMAIL_FILTER); 272e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "contact_methods/#", CONTACTMETHODS_ID); 273f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "contact_methods/with_presence", 274f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// CONTACTMETHODS_WITH_PRESENCE); 27570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov matcher.addURI(authority, "presence", PRESENCE); 27670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov matcher.addURI(authority, "presence/#", PRESENCE_ID); 2773cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov matcher.addURI(authority, "organizations", ORGANIZATIONS); 2783cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov matcher.addURI(authority, "organizations/#", ORGANIZATIONS_ID); 279f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "voice_dialer_timestamp", VOICE_DIALER_TIMESTAMP); 280c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY, 281c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov SEARCH_SUGGESTIONS); 282c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", 283c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov SEARCH_SUGGESTIONS); 284f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/#", 285f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// SEARCH_SHORTCUT); 286f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "settings", SETTINGS); 287f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// 288f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "live_folders/people", LIVE_FOLDERS_PEOPLE); 289f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "live_folders/people/*", 290f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// LIVE_FOLDERS_PEOPLE_GROUP_NAME); 291f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "live_folders/people_with_phones", 292f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// LIVE_FOLDERS_PEOPLE_WITH_PHONES); 293f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "live_folders/favorites", 294f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// LIVE_FOLDERS_PEOPLE_FAVORITES); 295f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 296f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 297e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov HashMap<String, String> peopleProjectionMap = new HashMap<String, String>(); 298d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.NAME, People.NAME); 299d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.DISPLAY_NAME, People.DISPLAY_NAME); 300d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.PHONETIC_NAME, People.PHONETIC_NAME); 301d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.NOTES, People.NOTES); 302d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.TIMES_CONTACTED, People.TIMES_CONTACTED); 303d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.LAST_TIME_CONTACTED, People.LAST_TIME_CONTACTED); 304d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.CUSTOM_RINGTONE, People.CUSTOM_RINGTONE); 305d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.SEND_TO_VOICEMAIL, People.SEND_TO_VOICEMAIL); 306d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.STARRED, People.STARRED); 307e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 308e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPeopleProjectionMap = new HashMap<String, String>(peopleProjectionMap); 309d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.PRIMARY_ORGANIZATION_ID, People.PRIMARY_ORGANIZATION_ID); 310d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.PRIMARY_EMAIL_ID, People.PRIMARY_EMAIL_ID); 311d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.PRIMARY_PHONE_ID, People.PRIMARY_PHONE_ID); 312d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.NUMBER, People.NUMBER); 313d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.TYPE, People.TYPE); 314d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.LABEL, People.LABEL); 315d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.NUMBER_KEY, People.NUMBER_KEY); 31670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.IM_PROTOCOL, People.IM_PROTOCOL); 31770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.IM_HANDLE, People.IM_HANDLE); 31870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.IM_ACCOUNT, People.IM_ACCOUNT); 31970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.PRESENCE_STATUS, People.PRESENCE_STATUS); 32070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.PRESENCE_CUSTOM_STATUS, People.PRESENCE_CUSTOM_STATUS); 3213cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 3223cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap = new HashMap<String, String>(); 3233cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.PERSON_ID, 324d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.PERSON_ID); 3253cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.ISPRIMARY, 326d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.ISPRIMARY); 3273cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.COMPANY, 328d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.COMPANY); 3293cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.TYPE, 330d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.TYPE); 3313cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.LABEL, 332d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.LABEL); 3333cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.TITLE, 334d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.TITLE); 335e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 336e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sContactMethodProjectionMap = new HashMap<String, String>(peopleProjectionMap); 337d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.PERSON_ID, ContactMethods.PERSON_ID); 338d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.KIND, ContactMethods.KIND); 339d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.ISPRIMARY, ContactMethods.ISPRIMARY); 340d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.TYPE, ContactMethods.TYPE); 341d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.DATA, ContactMethods.DATA); 342d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.LABEL, ContactMethods.LABEL); 343d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.AUX_DATA, ContactMethods.AUX_DATA); 344e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 345e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap = new HashMap<String, String>(peopleProjectionMap); 346e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.PERSON_ID, 347d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.PERSON_ID); 348e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.ISPRIMARY, 349d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.ISPRIMARY); 350e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.NUMBER, 351d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.NUMBER); 352e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.TYPE, 353d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.TYPE); 354e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.LABEL, 355d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.LABEL); 356e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.NUMBER_KEY, 357d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.NUMBER_KEY); 3580f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 3590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap = new HashMap<String, String>(); 3600f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.PERSON_ID, 361d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.PERSON_ID); 3620f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.NAME, 363d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.NAME); 3640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.VALUE, 365d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.VALUE); 3660f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 3670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap = new HashMap<String, String>(); 3680f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups._ID, 369d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups._ID); 3700f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.NAME, 371d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.NAME); 3720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.NOTES, 373d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.NOTES); 3740f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.SYSTEM_ID, 375d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.SYSTEM_ID); 3760f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 3770f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap = new HashMap<String, String>(); 3780f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap.put(android.provider.Contacts.GroupMembership.PERSON_ID, 379d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.GroupMembership.PERSON_ID); 3800f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap.put(android.provider.Contacts.GroupMembership.GROUP_ID, 381d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.GroupMembership.GROUP_ID); 382c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 383c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap = new HashMap<String, String>(); 384c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.PERSON_ID, 385c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.PERSON_ID); 386c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.DATA, 387c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.DATA); 388c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.LOCAL_VERSION, 389c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.LOCAL_VERSION); 390c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.DOWNLOAD_REQUIRED, 391c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.DOWNLOAD_REQUIRED); 392c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.EXISTS_ON_SERVER, 393c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.EXISTS_ON_SERVER); 394c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.SYNC_ERROR, 395c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.SYNC_ERROR); 39670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 39770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap = new HashMap<String, String>(); 39870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence._ID, 39970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Tables.PRESENCE + "." + Presence._ID 40070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence._ID); 40170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.PERSON_ID, 4025ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.PRESENCE + "." + Presence.RAW_CONTACT_ID 40370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.PERSON_ID); 40470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.IM_PROTOCOL, 40570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence.IM_PROTOCOL 40670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.IM_PROTOCOL); 40770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.IM_HANDLE, 40870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence.IM_HANDLE 40970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.IM_HANDLE); 41070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.IM_ACCOUNT, 41170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence.IM_ACCOUNT 41270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.IM_ACCOUNT); 41370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.PRESENCE_STATUS, 41470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence.PRESENCE_STATUS 41570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.PRESENCE_STATUS); 41670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPresenceProjectionMap.put(android.provider.Contacts.Presence.PRESENCE_CUSTOM_STATUS, 41770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence.PRESENCE_CUSTOM_STATUS 41870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + android.provider.Contacts.Presence.PRESENCE_CUSTOM_STATUS); 419f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 420f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 421f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final Context mContext; 422f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final OpenHelper mOpenHelper; 423f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final ContactsProvider2 mContactsProvider; 424f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final NameSplitter mPhoneticNameSplitter; 425a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov private final GlobalSearchSupport mGlobalSearchSupport; 426f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 427d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov /** Precompiled sql statement for incrementing times contacted for a contact */ 4283cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final SQLiteStatement mLastTimeContactedUpdate; 4293cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 4303cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final ContentValues mValues = new ContentValues(); 4313cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 432a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov 433f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public LegacyApiSupport(Context context, OpenHelper openHelper, 434a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov ContactsProvider2 contactsProvider, GlobalSearchSupport globalSearchSupport) { 435f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext = context; 436f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContactsProvider = contactsProvider; 437f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mOpenHelper = openHelper; 438a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov mGlobalSearchSupport = globalSearchSupport; 439d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mOpenHelper.setDelegate(this); 440f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 441f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mPhoneticNameSplitter = new NameSplitter("", "", "", 442f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov context.getString(com.android.internal.R.string.common_name_conjunctions)); 443f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 444f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 4455ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate = db.compileStatement("UPDATE " + Tables.RAW_CONTACTS + " SET " 4466cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "=" 4476cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "+1," 4486cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.LAST_TIME_CONTACTED + "=? WHERE " 4496cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts._ID + "=?"); 450f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 451f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 452d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 453d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public void createDatabase(SQLiteDatabase db) { 454d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 455d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PEOPLE + ";"); 456d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PEOPLE + " AS SELECT " + 4576cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContactsColumns.CONCRETE_ID 458d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.People._ID + ", " + 459d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 460d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NAME + ", " + 4615ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 462d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.DISPLAY_NAME + ", " + 463d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 464d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PHONETIC_NAME + " , " + 465d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 466d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NOTES + ", " + 4675ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 468d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TIMES_CONTACTED + ", " + 4695ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 470d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LAST_TIME_CONTACTED + ", " + 4715ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 472d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.CUSTOM_RINGTONE + ", " + 4735ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 474d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.SEND_TO_VOICEMAIL + ", " + 4755ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 476d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.STARRED + ", " + 477d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "organization." + Data._ID 478d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_ORGANIZATION_ID + ", " + 479d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "email." + Data._ID 480d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_EMAIL_ID + ", " + 481d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Data._ID 482d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_PHONE_ID + ", " + 483d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.NUMBER 484d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NUMBER + ", " + 485d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.TYPE 486d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TYPE + ", " + 487d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.LABEL 488d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LABEL + ", " + 489d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + PhoneColumns.NORMALIZED_NUMBER 49070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + People.NUMBER_KEY + ", " + 4916cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 4925ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.RAW_CONTACTS + PEOPLE_JOINS + 4935ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " WHERE " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 494d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 495d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 496d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.ORGANIZATIONS + ";"); 497d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.ORGANIZATIONS + " AS SELECT " + 498d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 499d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations._ID + ", " + 5005ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Data.RAW_CONTACT_ID 501d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.PERSON_ID + ", " + 502d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Data.IS_PRIMARY 503d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.ISPRIMARY + ", " + 504d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.COMPANY 505d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.COMPANY + ", " + 506d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TYPE 507d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TYPE + ", " + 508d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.LABEL 509d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.LABEL + ", " + 510d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TITLE 511d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TITLE + ", " + 5126cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 5135ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 514d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 51533b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Organization.CONTENT_ITEM_TYPE + "'" 5165ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 517d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 518d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 519d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.CONTACT_METHODS + ";"); 520d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.CONTACT_METHODS + " AS SELECT " + 521d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 522d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods._ID + ", " + 523d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 524d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.PERSON_ID + ", " + 525d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov CONTACT_METHOD_KIND_SQL 526d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.KIND + ", " + 527d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 528d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.ISPRIMARY + ", " + 529d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA1 530d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.TYPE + ", " + 531d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA2 532d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.DATA + ", " + 533d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA3 534d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.LABEL + ", " + 535d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA14 536d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.AUX_DATA + ", " + 537d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 538d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.NAME + ", " + 5395ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 540d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.DISPLAY_NAME + ", " + 541d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 542d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.PHONETIC_NAME + " , " + 543d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 544d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.NOTES + ", " + 5455ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 546d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.TIMES_CONTACTED + ", " + 5475ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 548d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.LAST_TIME_CONTACTED + ", " + 5495ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 550d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.CUSTOM_RINGTONE + ", " + 5515ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 552d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.SEND_TO_VOICEMAIL + ", " + 5535ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 554d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.STARRED + ", " + 5556cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 556d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 55733b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov " WHERE " + ContactMethods.KIND + " IS NOT NULL" 5585ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 559d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 560d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 561d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 562d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHONES + ";"); 563d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHONES + " AS SELECT " + 564d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 565d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones._ID + ", " + 566d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 567d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.PERSON_ID + ", " + 568d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 569d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.ISPRIMARY + ", " + 570d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.NUMBER 571d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER + ", " + 572d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.TYPE 573d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.TYPE + ", " + 574d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.LABEL 575d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.LABEL + ", " + 576d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PhoneColumns.CONCRETE_NORMALIZED_NUMBER 577d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER_KEY + ", " + 578d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 579d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NAME + ", " + 5805ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 581d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.DISPLAY_NAME + ", " + 582d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 583d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.PHONETIC_NAME + " , " + 584d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 585d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NOTES + ", " + 5865ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 587d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.TIMES_CONTACTED + ", " + 5885ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 589d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.LAST_TIME_CONTACTED + ", " + 5905ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 591d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.CUSTOM_RINGTONE + ", " + 5925ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 593d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.SEND_TO_VOICEMAIL + ", " + 5945ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 595d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.STARRED + ", " + 5966cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 597d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 598d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 59933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Phone.CONTENT_ITEM_TYPE + "'" 6005ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 601d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 602d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 603d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.EXTENSIONS + ";"); 604d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.EXTENSIONS + " AS SELECT " + 605d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 606d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions._ID + ", " + 607d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 608d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.PERSON_ID + ", " + 609d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.NAME 610d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.NAME + ", " + 611d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.VALUE 612d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.VALUE + ", " + 6136cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 6145ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 615d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 61633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE + "'" 6175ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 618d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 619d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 620d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUPS + ";"); 621d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUPS + " AS SELECT " + 622d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupsColumns.CONCRETE_ID + " AS " + android.provider.Contacts.Groups._ID + ", " + 623d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE + " AS " + android.provider.Contacts.Groups.NAME + ", " + 624d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES + " AS " + android.provider.Contacts.Groups.NOTES + " , " + 625d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID + " AS " + android.provider.Contacts.Groups.SYSTEM_ID + 626d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.GROUPS + 627d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 628d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 629d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUP_MEMBERSHIP + ";"); 630d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUP_MEMBERSHIP + " AS SELECT " + 631d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 632d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership._ID + ", " + 633d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 634d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.PERSON_ID + ", " + 635d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupMembership.GROUP_ROW_ID 636d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.GROUP_ID + ", " + 637d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE 638d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NAME + ", " + 639d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES 640d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NOTES + " , " + 641d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID 642d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.SYSTEM_ID + ", " + 6436cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 6445ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_PACKAGES_MIMETYPES_RAW_CONTACTS_GROUPS + 645d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 64633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + GroupMembership.CONTENT_ITEM_TYPE + "'" 6475ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 648d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 649c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 650c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHOTOS + ";"); 651c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHOTOS + " AS SELECT " + 652c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov DataColumns.CONCRETE_ID 653c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos._ID + ", " + 654d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 655c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.PERSON_ID + ", " + 656c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Tables.DATA + "." + Photo.PHOTO 657c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DATA + ", " + 658c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.EXISTS_ON_SERVER 659c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.EXISTS_ON_SERVER + ", " + 660c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.DOWNLOAD_REQUIRED 661c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DOWNLOAD_REQUIRED + ", " + 662c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.LOCAL_VERSION 663c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.LOCAL_VERSION + ", " + 664c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.SYNC_ERROR 665c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.SYNC_ERROR + ", " + 6666cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 667c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + LEGACY_PHOTO_JOIN + 668c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 66933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Photo.CONTENT_ITEM_TYPE + "'" 6705ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 671c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov ";"); 672d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov } 673d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 674f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Uri insert(Uri uri, ContentValues values) { 675f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 676f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long id = 0; 677f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 678f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: 6793cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertPeople(values); 6803cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 6813cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 6823cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 6833cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertOrganization(values); 684f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 685f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 6860f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: { 6875ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 6885ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 689e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 6900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 691e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 6920f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case CONTACTMETHODS: { 6935ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, ContactMethods.PERSON_ID); 6945ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 695e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 6960f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 697e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 6980f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PHONES: { 6995ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7000f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Phones.PERSON_ID); 7015ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertPhone(rawContactId, values); 7020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7030f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 7050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: { 7065ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Extensions.PERSON_ID); 7085ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertExtension(rawContactId, values); 7090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7110f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 7120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 7130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov id = insertGroup(values); 714e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 715e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: { 7175ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.PERSON_ID); 7190f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov long groupId = getRequiredValue(values, 7200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.GROUP_ID); 7215ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertGroupMembership(rawContactId, groupId); 7220f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7240f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 72570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE: { 72670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov id = insertPresence(values); 72770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 72870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov } 72970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 730f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 731f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 732f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 733f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 734f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (id < 0) { 735f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return null; 736f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 737f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 738f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Uri result = ContentUris.withAppendedId(uri, id); 739f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov onChange(result); 740f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return result; 741f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 742f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7430f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long getRequiredValue(ContentValues values, String column) { 7440f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov if (!values.containsKey(column)) { 7450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov throw new RuntimeException("Required value: " + column); 746e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 747e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7480f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return values.getAsLong(column); 749e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 750e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7513cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertPeople(ContentValues values) { 7523cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 753f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7546cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyStringValue(mValues, RawContacts.CUSTOM_RINGTONE, 755f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.CUSTOM_RINGTONE); 7566cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.SEND_TO_VOICEMAIL, 757f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.SEND_TO_VOICEMAIL); 7586cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.LAST_TIME_CONTACTED, 759f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.LAST_TIME_CONTACTED); 7606cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.TIMES_CONTACTED, 761f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.TIMES_CONTACTED); 7626cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.STARRED, 763f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.STARRED); 7646cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov Uri contactUri = mContactsProvider.insert(RawContacts.CONTENT_URI, mValues); 7655ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = ContentUris.parseId(contactUri); 766f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 767f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.NAME) || values.containsKey(People.PHONETIC_NAME)) { 7683cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7695ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); 7703cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 7713cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, StructuredName.DISPLAY_NAME, 772f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.NAME); 773f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.PHONETIC_NAME)) { 774f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String phoneticName = values.getAsString(People.PHONETIC_NAME); 775f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov NameSplitter.Name parsedName = new NameSplitter.Name(); 776f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mPhoneticNameSplitter.split(parsedName, phoneticName); 7773cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_GIVEN_NAME, parsedName.getGivenNames()); 7783cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_MIDDLE_NAME, parsedName.getMiddleName()); 7793cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_FAMILY_NAME, parsedName.getFamilyName()); 780f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 781f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7823cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mContactsProvider.insert(ContactsContract.Data.CONTENT_URI, mValues); 783f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 784f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 785f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.NOTES)) { 7863cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7875ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 7883cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 7893cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Note.NOTE, values, People.NOTES); 7903cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mContactsProvider.insert(Data.CONTENT_URI, mValues); 791f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 792f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 793f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO instant aggregation 7945ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov return rawContactId; 795f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 796f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7973cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertOrganization(ContentValues values) { 7983cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7993cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8005ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.RAW_CONTACT_ID, 8013cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.PERSON_ID); 8023cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 8033cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8043cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 8053cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.ISPRIMARY); 8063cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8073cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.COMPANY, 8083cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.COMPANY); 8093cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8103cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 8113cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyLongValue(mValues, Organization.TYPE, 8123cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.TYPE); 8133cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8143cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.LABEL, 8153cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.LABEL); 8163cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.TITLE, 8173cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.TITLE); 8183cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8193cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 8203cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8213cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return ContentUris.parseId(uri); 8223cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 823f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 8245ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertPhone(long rawContactId, ContentValues values) { 825e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.clear(); 826e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8275ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 828e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 829e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 830e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 831e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.ISPRIMARY); 832e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 833e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.NUMBER, 834e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.NUMBER); 835e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 836e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 837e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Phone.TYPE, 838e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.TYPE); 839e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 840e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.LABEL, 841e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.LABEL); 842e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 843e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 844e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 845e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 846e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 847e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8485ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertContactMethod(long rawContactId, ContentValues values) { 849e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Integer kind = values.getAsInteger(ContactMethods.KIND); 850e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov if (kind == null) { 851e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov throw new RuntimeException("Required value: " + ContactMethods.KIND); 852e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 853e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 854e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.clear(); 8555ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 856e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 857e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, values, ContactMethods.ISPRIMARY); 858e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 859e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov switch (kind) { 860e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_EMAIL: 861e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov copyCommonFields(values, Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.LABEL, 8620f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Email.DATA, Data.DATA14); 863e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 864e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 865e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_IM: 866e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov copyCommonFields(values, Im.CONTENT_ITEM_TYPE, Im.TYPE, Im.LABEL, 8670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Email.DATA, Data.DATA14); 868e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 869e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 870e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_POSTAL: 87167dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey copyCommonFields(values, StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE, 87267dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey StructuredPostal.LABEL, StructuredPostal.FORMATTED_ADDRESS, Data.DATA14); 873e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 874e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 875e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 876e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 877e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 878e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 879e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 880e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private void copyCommonFields(ContentValues values, String mimeType, String typeColumn, 881e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov String labelColumn, String dataColumn, String auxDataColumn) { 882e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.put(Data.MIMETYPE, mimeType); 883e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, typeColumn, values, ContactMethods.TYPE); 884e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, labelColumn, values, ContactMethods.LABEL); 885e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, dataColumn, values, ContactMethods.DATA); 886e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, auxDataColumn, values, ContactMethods.AUX_DATA); 887e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 888e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8895ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertExtension(long rawContactId, ContentValues values) { 8900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 8910f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8925ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 8930f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE); 8940f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8950f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.NAME, 8960f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.NAME); 8970f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.VALUE, 8980f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.VALUE); 8990f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9000f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 9010f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 9020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9030f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long insertGroup(ContentValues values) { 9050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 9060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.TITLE, 9080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.NAME); 9090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.NOTES, 9100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.NOTES); 9110f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.SYSTEM_ID, 9120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.SYSTEM_ID); 9130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9140f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Groups.CONTENT_URI, mValues); 9150f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 9160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9185ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertGroupMembership(long rawContactId, long groupId) { 9190f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 9200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9210f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE); 9225ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(GroupMembership.RAW_CONTACT_ID, rawContactId); 9230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(GroupMembership.GROUP_ROW_ID, groupId); 9240f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9250f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 9260f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 9270f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9280f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 92970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov private long insertPresence(ContentValues values) { 93070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov mValues.clear(); 93170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 93270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence._ID, 93370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence._ID); 9345ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence.RAW_CONTACT_ID, 93570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PERSON_ID); 93670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_PROTOCOL, 93770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_PROTOCOL); 93870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_HANDLE, 93970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_HANDLE); 94070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_ACCOUNT, 94170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_ACCOUNT); 94270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence.PRESENCE_STATUS, 94370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PRESENCE_STATUS); 94470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.PRESENCE_CUSTOM_STATUS, 94570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PRESENCE_CUSTOM_STATUS); 94670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 94770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov return mContactsProvider.insertPresence(mValues); 94870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov } 94970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 950f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { 951f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 952c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count = 0; 953f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch(match) { 954f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE_UPDATE_CONTACT_TIME: 955f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov count = updateContactTime(uri, values); 956f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 957c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 958c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: { 9595ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 9605ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov return updatePhoto(rawContactId, values); 961c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 962c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 963c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PHOTOS: 964c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO 965c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 966c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 967c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PHOTOS_ID: 968c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO 969c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 970c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 971c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 972f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 973f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 974f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 975f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 976f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (count > 0) { 977f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext.getContentResolver().notifyChange(uri, null); 978f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 979f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return count; 980f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 981f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 982c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 983f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private int updateContactTime(Uri uri, ContentValues values) { 984f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 985f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO check sanctions 986f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 987f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long lastTimeContacted; 988f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.LAST_TIME_CONTACTED)) { 989f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = values.getAsLong(People.LAST_TIME_CONTACTED); 990f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 991f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = System.currentTimeMillis(); 992f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 993f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 9945ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 995d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov long contactId = mOpenHelper.getContactId(rawContactId); 996d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov if (contactId != 0) { 997d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov mContactsProvider.updateContactTime(contactId, lastTimeContacted); 998f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 999f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(1, lastTimeContacted); 10005ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(2, rawContactId); 1001f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.execute(); 1002f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1003f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return 1; 1004f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1005f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 10065ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private int updatePhoto(long rawContactId, ContentValues values) { 1007c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1008c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO check sanctions 1009c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1010c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count; 1011c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1012c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov long dataId = -1; 1013c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Cursor c = mContactsProvider.query(Data.CONTENT_URI, PhotoQuery.COLUMNS, 10145ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Data.RAW_CONTACT_ID + "=" + rawContactId + " AND " 1015c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + Data.MIMETYPE + "=" + mOpenHelper.getMimeTypeId(Photo.CONTENT_ITEM_TYPE), 1016c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov null, null); 1017c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov try { 1018c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (c.moveToFirst()) { 1019c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov dataId = c.getLong(PhotoQuery._ID); 1020c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1021c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } finally { 1022c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov c.close(); 1023c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1024c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1025c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1026c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov byte[] bytes = values.getAsByteArray(android.provider.Contacts.Photos.DATA); 1027c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Photo.PHOTO, bytes); 1028c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1029c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (dataId == -1) { 1030c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE); 10315ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 1032c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Uri dataUri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 1033c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov dataId = ContentUris.parseId(dataUri); 1034c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov count = 1; 1035c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } else { 1036c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 1037c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov count = mContactsProvider.update(dataUri, mValues, null, null); 1038c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1039c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1040c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1041c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.LOCAL_VERSION, 1042c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.LOCAL_VERSION); 1043c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.DOWNLOAD_REQUIRED, 1044c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.DOWNLOAD_REQUIRED); 1045c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.EXISTS_ON_SERVER, 1046c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.EXISTS_ON_SERVER); 1047c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.SYNC_ERROR, 1048c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.SYNC_ERROR); 1049c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1050c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int updated = mContactsProvider.update(Data.CONTENT_URI, mValues, 1051c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Data.MIMETYPE + "='" + LegacyPhotoData.CONTENT_ITEM_TYPE + "'" 10525ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Data.RAW_CONTACT_ID + "=" + rawContactId 1053c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND " + LegacyPhotoData.PHOTO_DATA_ID + "=" + dataId, null); 1054c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (updated == 0) { 10555ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 1056c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, LegacyPhotoData.CONTENT_ITEM_TYPE); 1057c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(LegacyPhotoData.PHOTO_DATA_ID, dataId); 1058c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mContactsProvider.insert(Data.CONTENT_URI, mValues); 1059c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1060c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1061c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov return count; 1062c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1063c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 10643cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public int delete(Uri uri, String selection, String[] selectionArgs) { 10653cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov final int match = sUriMatcher.match(uri); 10663cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov int count = 0; 10673cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov switch (match) { 106833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case PEOPLE_ID: 106933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov count = mContactsProvider.deleteRawContact(ContentUris.parseId(uri), false); 107033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov break; 107133b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 10723cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 1073e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1074e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov ORGANIZATION_MIME_TYPES); 1075e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1076e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1077e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 1078e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1079e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov CONTACT_METHOD_MIME_TYPES); 1080e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1081e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1082e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 1083e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1084e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov PHONE_MIME_TYPES); 10853cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 10863cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 10873cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov default: 10883cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 10893cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 10903cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 10913cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return count; 10923cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 10933cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 1094f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 1095c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String sortOrder, String limit) { 1096f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 1097f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 1098f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String groupBy = null; 1099f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1100f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 1101f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 1102f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: { 110370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1104f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1105f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1106f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1107f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1108f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE_ID: 110970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1110f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1111d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(People._ID + "="); 1112f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1113f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1114f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1115445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov case PEOPLE_FILTER: { 1116445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1117445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1118445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov String filterParam = uri.getPathSegments().get(2); 1119445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.appendWhere(People._ID + " IN " 11205ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + mContactsProvider.getRawContactsByFilterAsNestedQuery(filterParam)); 1121445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov break; 1122445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov } 1123445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov 11243cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 1125d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS); 1126d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 1127d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 11283cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 11293cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 11303cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 1131d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS); 11323cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 1133e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1134d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Organizations._ID + "="); 1135e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1136e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1137e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1138e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS: 1139d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1140d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1141d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1142e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1143e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1144e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 1145d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1146e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1147e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1148d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1149e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1150e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1151e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1152e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: 1153d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1154e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1155e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1156d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1157e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1158e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1159e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1160e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1161e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS_ID: 1162d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1163e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1164e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1165d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1166e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1167d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1168e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 1169e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1170e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1171e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1172e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES: 1173d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1174d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1175d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1176e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1177e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1178e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 1179d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1180e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1181e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1182d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1183e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1184e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1185e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1186e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES: 1187d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1188e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1189e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1190d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 1191e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1192e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1193e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1194e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES_ID: 1195d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1196e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1197e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1198d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 11993cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1200d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1201e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 12023cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 12033cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 12040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: 1205d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 1206d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 1207d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 12080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS_ID: 1211d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1214d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 12150f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS: 1219d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12210f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1222d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 12230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12240f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12250f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12260f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS_ID: 1227d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12280f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12290f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1230d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 12310f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1232d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 12330f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 12340f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12350f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12360f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 1237d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUPS); 12380f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 12390f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12400f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12410f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS_ID: 1242d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUPS); 12430f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 1244d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(android.provider.Contacts.Groups._ID + "="); 12450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12460f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12470f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12480f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: 1249d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 1250d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 1251d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 12520f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12540f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP_ID: 1255d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12570f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1258d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 12590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12600f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12610f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12620f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP: 1263d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12650f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1266d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 12670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12680f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12690f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12700f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP_ID: 1271d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12730f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1274d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 12750f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1276d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 12770f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 12780f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12790f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 1280c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: 1281c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.setTables(LegacyTables.PHOTOS); 1282c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.setProjectionMap(sPhotoProjectionMap); 1283c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1284c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Photos.PERSON_ID + "="); 1285c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1286c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov limit = "1"; 1287c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 1288c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 128970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE: 129070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(Tables.PRESENCE); 129170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setProjectionMap(sPresenceProjectionMap); 129270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(mContactsProvider.getContactsRestrictionExceptionAsNestedQuery( 129370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov android.provider.Contacts.Presence.PERSON_ID)); 129470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 129570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 129670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE_ID: 129770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(Tables.PRESENCE); 129870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setProjectionMap(sPresenceProjectionMap); 129970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(mContactsProvider.getContactsRestrictionExceptionAsNestedQuery( 130070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov android.provider.Contacts.Presence.PERSON_ID)); 130170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Presence._ID + "="); 130270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 130370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 130470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 1305c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov case SEARCH_SUGGESTIONS: 1306c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 1307c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // No legacy compatibility for search suggestions 1308a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov return mGlobalSearchSupport.handleSearchSuggestionsQuery(db, uri, limit); 1309c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 131033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_PEOPLE: 131133b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_GROUPS: 131233b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov throw new UnsupportedOperationException(); 131333b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 1314f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 1315f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new IllegalArgumentException("Unknown URL " + uri); 1316f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1317f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1318f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // Perform the query and set the notification uri 1319f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Cursor c = qb.query(db, projection, selection, selectionArgs, 1320f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov groupBy, null, sortOrder, limit); 1321f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (c != null) { 13226cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov c.setNotificationUri(mContext.getContentResolver(), RawContacts.CONTENT_URI); 1323f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1324e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov DatabaseUtils.dumpCursor(c); 1325f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return c; 1326f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1327f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1328f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov /** 1329f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Called when a change has been made. 1330f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 1331f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * @param uri the uri that the change was made to 1332f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov */ 1333f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private void onChange(Uri uri) { 1334f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext.getContentResolver().notifyChange(android.provider.Contacts.CONTENT_URI, null); 1335f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1336f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov} 1337