LegacyApiSupport.java revision c70dc0e38ff82c6e6d6b7458637c54fbdf446aac
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; 425f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 426d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov /** Precompiled sql statement for incrementing times contacted for a contact */ 4273cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final SQLiteStatement mLastTimeContactedUpdate; 4283cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 4293cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final ContentValues mValues = new ContentValues(); 4303cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 431f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public LegacyApiSupport(Context context, OpenHelper openHelper, 432f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov ContactsProvider2 contactsProvider) { 433f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext = context; 434f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContactsProvider = contactsProvider; 435f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mOpenHelper = openHelper; 436d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mOpenHelper.setDelegate(this); 437f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 438f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mPhoneticNameSplitter = new NameSplitter("", "", "", 439f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov context.getString(com.android.internal.R.string.common_name_conjunctions)); 440f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 441f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 4425ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate = db.compileStatement("UPDATE " + Tables.RAW_CONTACTS + " SET " 4436cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "=" 4446cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "+1," 4456cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.LAST_TIME_CONTACTED + "=? WHERE " 4466cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts._ID + "=?"); 447f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 448f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 449d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 450d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public void createDatabase(SQLiteDatabase db) { 451d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 452d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PEOPLE + ";"); 453d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PEOPLE + " AS SELECT " + 4546cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContactsColumns.CONCRETE_ID 455d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.People._ID + ", " + 456d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 457d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NAME + ", " + 4585ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 459d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.DISPLAY_NAME + ", " + 460d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 461d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PHONETIC_NAME + " , " + 462d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 463d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NOTES + ", " + 4645ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 465d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TIMES_CONTACTED + ", " + 4665ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 467d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LAST_TIME_CONTACTED + ", " + 4685ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 469d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.CUSTOM_RINGTONE + ", " + 4705ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 471d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.SEND_TO_VOICEMAIL + ", " + 4725ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 473d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.STARRED + ", " + 474d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "organization." + Data._ID 475d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_ORGANIZATION_ID + ", " + 476d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "email." + Data._ID 477d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_EMAIL_ID + ", " + 478d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Data._ID 479d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_PHONE_ID + ", " + 480d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.NUMBER 481d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NUMBER + ", " + 482d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.TYPE 483d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TYPE + ", " + 484d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.LABEL 485d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LABEL + ", " + 486d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + PhoneColumns.NORMALIZED_NUMBER 48770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " AS " + People.NUMBER_KEY + ", " + 4886cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 4895ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.RAW_CONTACTS + PEOPLE_JOINS + 4905ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " WHERE " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 491d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 492d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 493d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.ORGANIZATIONS + ";"); 494d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.ORGANIZATIONS + " AS SELECT " + 495d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 496d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations._ID + ", " + 4975ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Data.RAW_CONTACT_ID 498d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.PERSON_ID + ", " + 499d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Data.IS_PRIMARY 500d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.ISPRIMARY + ", " + 501d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.COMPANY 502d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.COMPANY + ", " + 503d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TYPE 504d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TYPE + ", " + 505d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.LABEL 506d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.LABEL + ", " + 507d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TITLE 508d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TITLE + ", " + 5096cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 5105ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 511d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 51233b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Organization.CONTENT_ITEM_TYPE + "'" 5135ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 514d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 515d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 516d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.CONTACT_METHODS + ";"); 517d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.CONTACT_METHODS + " AS SELECT " + 518d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 519d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods._ID + ", " + 520d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 521d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.PERSON_ID + ", " + 522d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov CONTACT_METHOD_KIND_SQL 523d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.KIND + ", " + 524d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 525d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.ISPRIMARY + ", " + 526d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA1 527d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.TYPE + ", " + 528d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA2 529d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.DATA + ", " + 530d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA3 531d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.LABEL + ", " + 532d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA14 533d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.AUX_DATA + ", " + 534d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 535d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.NAME + ", " + 5365ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 537d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.DISPLAY_NAME + ", " + 538d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 539d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.PHONETIC_NAME + " , " + 540d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 541d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.NOTES + ", " + 5425ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 543d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.TIMES_CONTACTED + ", " + 5445ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 545d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.LAST_TIME_CONTACTED + ", " + 5465ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 547d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.CUSTOM_RINGTONE + ", " + 5485ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 549d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.SEND_TO_VOICEMAIL + ", " + 5505ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 551d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.STARRED + ", " + 5526cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 553d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 55433b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov " WHERE " + ContactMethods.KIND + " IS NOT NULL" 5555ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 556d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 557d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 558d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 559d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHONES + ";"); 560d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHONES + " AS SELECT " + 561d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 562d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones._ID + ", " + 563d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 564d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.PERSON_ID + ", " + 565d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 566d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.ISPRIMARY + ", " + 567d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.NUMBER 568d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER + ", " + 569d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.TYPE 570d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.TYPE + ", " + 571d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.LABEL 572d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.LABEL + ", " + 573d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PhoneColumns.CONCRETE_NORMALIZED_NUMBER 574d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER_KEY + ", " + 575d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "name." + StructuredName.DISPLAY_NAME 576d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NAME + ", " + 5775ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 578d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.DISPLAY_NAME + ", " + 579d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 580d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.PHONETIC_NAME + " , " + 581d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 582d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NOTES + ", " + 5835ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 584d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.TIMES_CONTACTED + ", " + 5855ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 586d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.LAST_TIME_CONTACTED + ", " + 5875ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 588d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.CUSTOM_RINGTONE + ", " + 5895ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 590d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.SEND_TO_VOICEMAIL + ", " + 5915ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 592d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.STARRED + ", " + 5936cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 594d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 595d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 59633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Phone.CONTENT_ITEM_TYPE + "'" 5975ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 598d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 599d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 600d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.EXTENSIONS + ";"); 601d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.EXTENSIONS + " AS SELECT " + 602d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 603d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions._ID + ", " + 604d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 605d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.PERSON_ID + ", " + 606d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.NAME 607d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.NAME + ", " + 608d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.VALUE 609d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.VALUE + ", " + 6106cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 6115ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 612d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 61333b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE + "'" 6145ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 615d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 616d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 617d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUPS + ";"); 618d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUPS + " AS SELECT " + 619d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupsColumns.CONCRETE_ID + " AS " + android.provider.Contacts.Groups._ID + ", " + 620d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE + " AS " + android.provider.Contacts.Groups.NAME + ", " + 621d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES + " AS " + android.provider.Contacts.Groups.NOTES + " , " + 622d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID + " AS " + android.provider.Contacts.Groups.SYSTEM_ID + 623d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.GROUPS + 624d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 625d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 626d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUP_MEMBERSHIP + ";"); 627d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUP_MEMBERSHIP + " AS SELECT " + 628d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 629d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership._ID + ", " + 630d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 631d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.PERSON_ID + ", " + 632d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupMembership.GROUP_ROW_ID 633d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.GROUP_ID + ", " + 634d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE 635d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NAME + ", " + 636d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES 637d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NOTES + " , " + 638d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID 639d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.SYSTEM_ID + ", " + 6406cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 6415ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_PACKAGES_MIMETYPES_RAW_CONTACTS_GROUPS + 642d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 64333b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + GroupMembership.CONTENT_ITEM_TYPE + "'" 6445ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 645d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 646c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 647c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHOTOS + ";"); 648c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHOTOS + " AS SELECT " + 649c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov DataColumns.CONCRETE_ID 650c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos._ID + ", " + 651d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 652c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.PERSON_ID + ", " + 653c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Tables.DATA + "." + Photo.PHOTO 654c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DATA + ", " + 655c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.EXISTS_ON_SERVER 656c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.EXISTS_ON_SERVER + ", " + 657c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.DOWNLOAD_REQUIRED 658c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DOWNLOAD_REQUIRED + ", " + 659c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.LOCAL_VERSION 660c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.LOCAL_VERSION + ", " + 661c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.SYNC_ERROR 662c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.SYNC_ERROR + ", " + 6636cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov RawContacts.IS_RESTRICTED + 664c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + LEGACY_PHOTO_JOIN + 665c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 66633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Photo.CONTENT_ITEM_TYPE + "'" 6675ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 668c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov ";"); 669d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov } 670d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 671f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Uri insert(Uri uri, ContentValues values) { 672f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 673f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long id = 0; 674f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 675f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: 6763cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertPeople(values); 6773cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 6783cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 6793cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 6803cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertOrganization(values); 681f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 682f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 6830f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: { 6845ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 6855ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 686e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 6870f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 688e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 6890f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case CONTACTMETHODS: { 6905ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, ContactMethods.PERSON_ID); 6915ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 692e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 6930f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 694e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 6950f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PHONES: { 6965ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 6970f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Phones.PERSON_ID); 6985ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertPhone(rawContactId, values); 6990f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7000f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7010f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 7020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: { 7035ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Extensions.PERSON_ID); 7055ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertExtension(rawContactId, values); 7060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 7090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 7100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov id = insertGroup(values); 711e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 712e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: { 7145ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7150f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.PERSON_ID); 7160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov long groupId = getRequiredValue(values, 7170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.GROUP_ID); 7185ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertGroupMembership(rawContactId, groupId); 7190f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7210f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 72270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE: { 72370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov id = insertPresence(values); 72470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 72570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov } 72670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 727f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 728f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 729f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 730f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 731f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (id < 0) { 732f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return null; 733f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 734f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 735f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Uri result = ContentUris.withAppendedId(uri, id); 736f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov onChange(result); 737f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return result; 738f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 739f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7400f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long getRequiredValue(ContentValues values, String column) { 7410f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov if (!values.containsKey(column)) { 7420f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov throw new RuntimeException("Required value: " + column); 743e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 744e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return values.getAsLong(column); 746e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 747e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7483cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertPeople(ContentValues values) { 7493cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 750f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7516cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyStringValue(mValues, RawContacts.CUSTOM_RINGTONE, 752f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.CUSTOM_RINGTONE); 7536cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.SEND_TO_VOICEMAIL, 754f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.SEND_TO_VOICEMAIL); 7556cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.LAST_TIME_CONTACTED, 756f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.LAST_TIME_CONTACTED); 7576cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.TIMES_CONTACTED, 758f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.TIMES_CONTACTED); 7596cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.STARRED, 760f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.STARRED); 7616cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov Uri contactUri = mContactsProvider.insert(RawContacts.CONTENT_URI, mValues); 7625ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = ContentUris.parseId(contactUri); 763f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 764f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.NAME) || values.containsKey(People.PHONETIC_NAME)) { 7653cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7665ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); 7673cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 7683cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, StructuredName.DISPLAY_NAME, 769f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov values, People.NAME); 770f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.PHONETIC_NAME)) { 771f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String phoneticName = values.getAsString(People.PHONETIC_NAME); 772f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov NameSplitter.Name parsedName = new NameSplitter.Name(); 773f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mPhoneticNameSplitter.split(parsedName, phoneticName); 7743cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_GIVEN_NAME, parsedName.getGivenNames()); 7753cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_MIDDLE_NAME, parsedName.getMiddleName()); 7763cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(StructuredName.PHONETIC_FAMILY_NAME, parsedName.getFamilyName()); 777f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 778f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7793cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mContactsProvider.insert(ContactsContract.Data.CONTENT_URI, mValues); 780f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 781f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 782f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.NOTES)) { 7833cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7845ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 7853cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 7863cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Note.NOTE, values, People.NOTES); 7873cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mContactsProvider.insert(Data.CONTENT_URI, mValues); 788f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 789f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 790f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO instant aggregation 7915ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov return rawContactId; 792f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 793f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7943cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertOrganization(ContentValues values) { 7953cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.clear(); 7963cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 7975ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.RAW_CONTACT_ID, 7983cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.PERSON_ID); 7993cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov mValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 8003cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8013cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 8023cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.ISPRIMARY); 8033cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8043cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.COMPANY, 8053cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.COMPANY); 8063cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8073cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 8083cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyLongValue(mValues, Organization.TYPE, 8093cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.TYPE); 8103cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8113cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.LABEL, 8123cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.LABEL); 8133cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.TITLE, 8143cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.TITLE); 8153cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8163cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 8173cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8183cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return ContentUris.parseId(uri); 8193cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 820f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 8215ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertPhone(long rawContactId, ContentValues values) { 822e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.clear(); 823e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8245ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 825e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 826e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 827e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 828e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.ISPRIMARY); 829e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 830e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.NUMBER, 831e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.NUMBER); 832e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 833e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 834e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Phone.TYPE, 835e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.TYPE); 836e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 837e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.LABEL, 838e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values, android.provider.Contacts.Phones.LABEL); 839e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 840e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 841e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 842e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 843e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 844e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8455ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertContactMethod(long rawContactId, ContentValues values) { 846e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Integer kind = values.getAsInteger(ContactMethods.KIND); 847e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov if (kind == null) { 848e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov throw new RuntimeException("Required value: " + ContactMethods.KIND); 849e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 850e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 851e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.clear(); 8525ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 853e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 854e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, values, ContactMethods.ISPRIMARY); 855e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 856e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov switch (kind) { 857e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_EMAIL: 858e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov copyCommonFields(values, Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.LABEL, 8590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Email.DATA, Data.DATA14); 860e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 861e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 862e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_IM: 863e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov copyCommonFields(values, Im.CONTENT_ITEM_TYPE, Im.TYPE, Im.LABEL, 8640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Email.DATA, Data.DATA14); 865e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 866e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 867e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case android.provider.Contacts.KIND_POSTAL: 86867dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey copyCommonFields(values, StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE, 86967dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey StructuredPostal.LABEL, StructuredPostal.FORMATTED_ADDRESS, Data.DATA14); 870e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 871e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 872e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 873e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 874e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 875e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 876e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 877e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private void copyCommonFields(ContentValues values, String mimeType, String typeColumn, 878e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov String labelColumn, String dataColumn, String auxDataColumn) { 879e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mValues.put(Data.MIMETYPE, mimeType); 880e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyLongValue(mValues, typeColumn, values, ContactMethods.TYPE); 881e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, labelColumn, values, ContactMethods.LABEL); 882e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, dataColumn, values, ContactMethods.DATA); 883e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov OpenHelper.copyStringValue(mValues, auxDataColumn, values, ContactMethods.AUX_DATA); 884e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 885e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8865ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertExtension(long rawContactId, ContentValues values) { 8870f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 8880f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8895ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 8900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE); 8910f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8920f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.NAME, 8930f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.NAME); 8940f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.VALUE, 8950f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.VALUE); 8960f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8970f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 8980f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 8990f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9000f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9010f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long insertGroup(ContentValues values) { 9020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 9030f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9040f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.TITLE, 9050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.NAME); 9060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.NOTES, 9070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.NOTES); 9080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.SYSTEM_ID, 9090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values, android.provider.Contacts.Groups.SYSTEM_ID); 9100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9110f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Groups.CONTENT_URI, mValues); 9120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 9130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9140f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9155ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertGroupMembership(long rawContactId, long groupId) { 9160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 9170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE); 9195ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(GroupMembership.RAW_CONTACT_ID, rawContactId); 9200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(GroupMembership.GROUP_ROW_ID, groupId); 9210f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 9220f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov Uri uri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 9230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 9240f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 9250f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 92670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov private long insertPresence(ContentValues values) { 92770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov mValues.clear(); 92870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 92970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence._ID, 93070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence._ID); 9315ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence.RAW_CONTACT_ID, 93270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PERSON_ID); 93370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_PROTOCOL, 93470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_PROTOCOL); 93570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_HANDLE, 93670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_HANDLE); 93770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.IM_ACCOUNT, 93870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.IM_ACCOUNT); 93970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyLongValue(mValues, Presence.PRESENCE_STATUS, 94070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PRESENCE_STATUS); 94170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov OpenHelper.copyStringValue(mValues, Presence.PRESENCE_CUSTOM_STATUS, 94270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values, android.provider.Contacts.Presence.PRESENCE_CUSTOM_STATUS); 94370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 94470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov return mContactsProvider.insertPresence(mValues); 94570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov } 94670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 947f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { 948f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 949c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count = 0; 950f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch(match) { 951f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE_UPDATE_CONTACT_TIME: 952f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov count = updateContactTime(uri, values); 953f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 954c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 955c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: { 9565ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 9575ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov return updatePhoto(rawContactId, values); 958c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 959c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 960c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PHOTOS: 961c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO 962c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 963c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 964c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PHOTOS_ID: 965c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO 966c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 967c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 968c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 969f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 970f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 971f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 972f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 973f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (count > 0) { 974f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext.getContentResolver().notifyChange(uri, null); 975f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 976f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return count; 977f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 978f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 979c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 980f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private int updateContactTime(Uri uri, ContentValues values) { 981f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 982f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO check sanctions 983f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 984f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long lastTimeContacted; 985f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.LAST_TIME_CONTACTED)) { 986f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = values.getAsLong(People.LAST_TIME_CONTACTED); 987f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 988f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = System.currentTimeMillis(); 989f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 990f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 9915ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 992d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov long contactId = mOpenHelper.getContactId(rawContactId); 993d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov if (contactId != 0) { 994d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov mContactsProvider.updateContactTime(contactId, lastTimeContacted); 995f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 996f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(1, lastTimeContacted); 9975ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(2, rawContactId); 998f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.execute(); 999f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1000f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return 1; 1001f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1002f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 10035ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private int updatePhoto(long rawContactId, ContentValues values) { 1004c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1005c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO check sanctions 1006c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1007c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count; 1008c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1009c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov long dataId = -1; 1010c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Cursor c = mContactsProvider.query(Data.CONTENT_URI, PhotoQuery.COLUMNS, 10115ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Data.RAW_CONTACT_ID + "=" + rawContactId + " AND " 1012c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + Data.MIMETYPE + "=" + mOpenHelper.getMimeTypeId(Photo.CONTENT_ITEM_TYPE), 1013c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov null, null); 1014c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov try { 1015c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (c.moveToFirst()) { 1016c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov dataId = c.getLong(PhotoQuery._ID); 1017c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1018c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } finally { 1019c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov c.close(); 1020c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1021c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1022c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1023c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov byte[] bytes = values.getAsByteArray(android.provider.Contacts.Photos.DATA); 1024c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Photo.PHOTO, bytes); 1025c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1026c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (dataId == -1) { 1027c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE); 10285ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 1029c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Uri dataUri = mContactsProvider.insert(Data.CONTENT_URI, mValues); 1030c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov dataId = ContentUris.parseId(dataUri); 1031c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov count = 1; 1032c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } else { 1033c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 1034c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov count = mContactsProvider.update(dataUri, mValues, null, null); 1035c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1036c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1037c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1038c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.LOCAL_VERSION, 1039c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.LOCAL_VERSION); 1040c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.DOWNLOAD_REQUIRED, 1041c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.DOWNLOAD_REQUIRED); 1042c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.EXISTS_ON_SERVER, 1043c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.EXISTS_ON_SERVER); 1044c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.SYNC_ERROR, 1045c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.SYNC_ERROR); 1046c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1047c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int updated = mContactsProvider.update(Data.CONTENT_URI, mValues, 1048c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Data.MIMETYPE + "='" + LegacyPhotoData.CONTENT_ITEM_TYPE + "'" 10495ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Data.RAW_CONTACT_ID + "=" + rawContactId 1050c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND " + LegacyPhotoData.PHOTO_DATA_ID + "=" + dataId, null); 1051c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (updated == 0) { 10525ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 1053c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, LegacyPhotoData.CONTENT_ITEM_TYPE); 1054c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(LegacyPhotoData.PHOTO_DATA_ID, dataId); 1055c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mContactsProvider.insert(Data.CONTENT_URI, mValues); 1056c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1057c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1058c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov return count; 1059c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1060c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 10613cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public int delete(Uri uri, String selection, String[] selectionArgs) { 10623cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov final int match = sUriMatcher.match(uri); 10633cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov int count = 0; 10643cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov switch (match) { 106533b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case PEOPLE_ID: 106633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov count = mContactsProvider.deleteRawContact(ContentUris.parseId(uri), false); 106733b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov break; 106833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 10693cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 1070e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1071e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov ORGANIZATION_MIME_TYPES); 1072e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1073e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1074e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 1075e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1076e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov CONTACT_METHOD_MIME_TYPES); 1077e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1078e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1079e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 1080e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1081e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov PHONE_MIME_TYPES); 10823cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 10833cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 10843cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov default: 10853cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 10863cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 10873cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 10883cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return count; 10893cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 10903cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 1091f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 1092c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String sortOrder, String limit) { 1093f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 1094f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 1095f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String groupBy = null; 1096f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1097f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 1098f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 1099f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: { 110070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1101f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1102f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1103f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1104f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1105f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE_ID: 110670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1107f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1108d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(People._ID + "="); 1109f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1110f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1111f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1112445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov case PEOPLE_FILTER: { 1113445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1114445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 1115445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov String filterParam = uri.getPathSegments().get(2); 1116445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.appendWhere(People._ID + " IN " 11175ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + mContactsProvider.getRawContactsByFilterAsNestedQuery(filterParam)); 1118445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov break; 1119445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov } 1120445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov 11213cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 1122d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS); 1123d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 1124d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 11253cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 11263cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 11273cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 1128d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS); 11293cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 1130e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1131d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Organizations._ID + "="); 1132e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1133e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1134e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1135e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS: 1136d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1137d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1138d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1139e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1140e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1141e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 1142d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1143e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1144e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1145d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1146e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1147e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1148e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1149e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: 1150d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1151e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1152e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1153d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1154e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1155e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1156e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1157e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1158e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS_ID: 1159d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS); 1160e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1161e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1162d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1163e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1164d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1165e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 1166e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1167e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1168e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1169e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES: 1170d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1171d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1172d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1173e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1174e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1175e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 1176d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1177e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1178e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1179d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1180e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1181e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1182e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1183e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES: 1184d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1185e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1186e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1187d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 1188e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1189e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1190e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1191e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES_ID: 1192d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.PHONES); 1193e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 1194e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1195d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 11963cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1197d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1198e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 11993cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 12003cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 12010f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: 1202d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 1203d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 1204d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 12050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS_ID: 1208d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1211d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 12120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12140f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12150f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS: 1216d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1219d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 12200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12210f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12220f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS_ID: 1224d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS); 12250f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 12260f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1227d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 12280f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1229d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 12300f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 12310f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12320f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12330f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 1234d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUPS); 12350f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 12360f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12370f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12380f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS_ID: 1239d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUPS); 12400f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 1241d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(android.provider.Contacts.Groups._ID + "="); 12420f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12430f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12440f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: 1246d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 1247d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 1248d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 12490f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12500f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12510f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP_ID: 1252d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12540f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1255d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 12560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12570f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12580f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP: 1260d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12610f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12620f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1263d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 12640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 12650f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12660f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 12670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP_ID: 1268d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP); 12690f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 12700f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1271d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 12720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1273d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 12740f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 12750f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 12760f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 1277c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: 1278c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.setTables(LegacyTables.PHOTOS); 1279c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.setProjectionMap(sPhotoProjectionMap); 1280c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mContactsProvider.applyDataRestrictionExceptions(qb); 1281c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Photos.PERSON_ID + "="); 1282c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1283c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov limit = "1"; 1284c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 1285c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 128670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE: 128770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(Tables.PRESENCE); 128870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setProjectionMap(sPresenceProjectionMap); 128970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(mContactsProvider.getContactsRestrictionExceptionAsNestedQuery( 129070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov android.provider.Contacts.Presence.PERSON_ID)); 129170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 129270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 129370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov case PRESENCE_ID: 129470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(Tables.PRESENCE); 129570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setProjectionMap(sPresenceProjectionMap); 129670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(mContactsProvider.getContactsRestrictionExceptionAsNestedQuery( 129770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov android.provider.Contacts.Presence.PERSON_ID)); 129870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Presence._ID + "="); 129970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 130070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov break; 130170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 1302c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov case SEARCH_SUGGESTIONS: 1303c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 1304c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // No legacy compatibility for search suggestions 1305c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov return mContactsProvider.handleSearchSuggestionsQuery(uri, limit); 1306c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 130733b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_PEOPLE: 130833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_GROUPS: 130933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov throw new UnsupportedOperationException(); 131033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 1311f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 1312f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new IllegalArgumentException("Unknown URL " + uri); 1313f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1314f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1315f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // Perform the query and set the notification uri 1316f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Cursor c = qb.query(db, projection, selection, selectionArgs, 1317f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov groupBy, null, sortOrder, limit); 1318f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (c != null) { 13196cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov c.setNotificationUri(mContext.getContentResolver(), RawContacts.CONTENT_URI); 1320f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1321e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov DatabaseUtils.dumpCursor(c); 1322f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return c; 1323f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1324f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1325f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov /** 1326f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Called when a change has been made. 1327f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 1328f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * @param uri the uri that the change was made to 1329f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov */ 1330f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private void onChange(Uri uri) { 1331f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext.getContentResolver().notifyChange(android.provider.Contacts.CONTENT_URI, null); 1332f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1333f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov} 1334