LegacyApiSupport.java revision 044685c79fb8fb6e15479d0e68d60f8630f6be43
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 26caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikovimport android.accounts.Account; 27c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.app.SearchManager; 28f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.ContentUris; 29f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.ContentValues; 30f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.Context; 31f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.content.UriMatcher; 32f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.Cursor; 33e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.database.DatabaseUtils; 34f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteDatabase; 35044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikovimport android.database.sqlite.SQLiteDoneException; 36f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteQueryBuilder; 37f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.database.sqlite.SQLiteStatement; 38f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.net.Uri; 3967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikovimport android.provider.BaseColumns; 40f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract; 41e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.Contacts.ContactMethods; 4261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikovimport android.provider.Contacts.Extensions; 43f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.Contacts.People; 44e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.Data; 450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport android.provider.ContactsContract.Groups; 4670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikovimport android.provider.ContactsContract.Presence; 47c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.provider.ContactsContract.RawContacts; 48e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email; 490f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.GroupMembership; 50e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Im; 51f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Note; 523cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Organization; 53e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 54c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Photo; 55f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 5667dde51ab932dc84d95a203b113989b13437f13dJeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 57b61f0d658092919aa2bb201787cf3fcbe1d3d048Jeff Hamiltonimport android.util.Log; 58f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 59f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikovimport java.util.HashMap; 60622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkeyimport java.util.Locale; 61f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 62b61f0d658092919aa2bb201787cf3fcbe1d3d048Jeff Hamiltonpublic class LegacyApiSupport { 63f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 64caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov private static final String TAG = "ContactsProviderV1"; 65caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 666f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov private static final String NON_EXISTENT_ACCOUNT_TYPE = "android.INVALID_ACCOUNT_TYPE"; 6728153f2e3dda944e983f6dd0ab80aca63631ddfaJeff Hamilton private static final String NON_EXISTENT_ACCOUNT_NAME = "invalid"; 686f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov 69f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 70f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 71f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE = 1; 72f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE_ID = 2; 73f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final int PEOPLE_UPDATE_CONTACT_TIME = 3; 743cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final int ORGANIZATIONS = 4; 753cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final int ORGANIZATIONS_ID = 5; 76e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_CONTACTMETHODS = 6; 77e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_CONTACTMETHODS_ID = 7; 78e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int CONTACTMETHODS = 8; 79e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int CONTACTMETHODS_ID = 9; 80e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_PHONES = 10; 81e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PEOPLE_PHONES_ID = 11; 82e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PHONES = 12; 83e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final int PHONES_ID = 13; 840f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int EXTENSIONS = 14; 850f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int EXTENSIONS_ID = 15; 860f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_EXTENSIONS = 16; 870f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_EXTENSIONS_ID = 17; 880f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPS = 18; 890f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPS_ID = 19; 900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPMEMBERSHIP = 20; 910f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int GROUPMEMBERSHIP_ID = 21; 920f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_GROUPMEMBERSHIP = 22; 930f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final int PEOPLE_GROUPMEMBERSHIP_ID = 23; 94c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PEOPLE_PHOTO = 24; 95c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PHOTOS = 25; 96c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final int PHOTOS_ID = 26; 97445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov private static final int PEOPLE_FILTER = 29; 9833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov private static final int DELETED_PEOPLE = 30; 9933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov private static final int DELETED_GROUPS = 31; 100c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov private static final int SEARCH_SUGGESTIONS = 32; 101b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov private static final int SEARCH_SHORTCUT = 33; 102b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov private static final int PHONES_FILTER = 34; 1031b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final int LIVE_FOLDERS_PEOPLE = 35; 1041b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final int LIVE_FOLDERS_PEOPLE_GROUP_NAME = 36; 1051b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final int LIVE_FOLDERS_PEOPLE_WITH_PHONES = 37; 1061b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final int LIVE_FOLDERS_PEOPLE_FAVORITES = 38; 107bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov private static final int CONTACTMETHODS_EMAIL = 39; 108c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 109e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String PEOPLE_JOINS = 1105ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " LEFT OUTER JOIN data name ON (raw_contacts._id = name.raw_contact_id" 111e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = name.mimetype_id)" 112e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + StructuredName.CONTENT_ITEM_TYPE + "')" 1135ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data organization ON (raw_contacts._id = organization.raw_contact_id" 114e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = organization.mimetype_id)" 115e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Organization.CONTENT_ITEM_TYPE + "' AND organization.is_primary)" 1165ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data email ON (raw_contacts._id = email.raw_contact_id" 117e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = email.mimetype_id)" 118e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Email.CONTENT_ITEM_TYPE + "' AND email.is_primary)" 1195ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data note ON (raw_contacts._id = note.raw_contact_id" 120e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = note.mimetype_id)" 121e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Note.CONTENT_ITEM_TYPE + "')" 1225ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " LEFT OUTER JOIN data phone ON (raw_contacts._id = phone.raw_contact_id" 123e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = phone.mimetype_id)" 124e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "='" + Phone.CONTENT_ITEM_TYPE + "' AND phone.is_primary)"; 125e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 126d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String DATA_JOINS = 127d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " JOIN mimetypes ON (mimetypes._id = data.mimetype_id)" 1285ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " JOIN raw_contacts ON (raw_contacts._id = data.raw_contact_id)" 129d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + PEOPLE_JOINS; 130d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 13170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public static final String PRESENCE_JOINS = 13270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov " LEFT OUTER JOIN presence ON (" 13370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov + " presence.presence_id = (SELECT max(presence_id) FROM presence" 1345dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov + " WHERE people._id = presence_raw_contact_id))"; 13570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov 136e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String PHONETIC_NAME_SQL = "trim(trim(" 137e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_GIVEN_NAME + ",' ')||' '||" 138e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_MIDDLE_NAME + ",' '))||' '||" 139e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + "ifnull(name." + StructuredName.PHONETIC_FAMILY_NAME + ",' ')) "; 140e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 141e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String CONTACT_METHOD_KIND_SQL = 142d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "CAST ((CASE WHEN mimetype='" + Email.CONTENT_ITEM_TYPE + "'" 143e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_EMAIL 144e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 145e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " (CASE WHEN mimetype='" + Im.CONTENT_ITEM_TYPE +"'" 146e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_IM 147e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 14867dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey + " (CASE WHEN mimetype='" + StructuredPostal.CONTENT_ITEM_TYPE + "'" 149e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " THEN " + android.provider.Contacts.KIND_POSTAL 150e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " ELSE" 151e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " NULL" 152e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " END)" 153e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov + " END)" 154d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " END) AS INTEGER)"; 155f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 15697f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov private static final String IM_PROTOCOL_SQL = 15797f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov "(CASE WHEN " + Presence.PROTOCOL + "=" + Im.PROTOCOL_CUSTOM 15897f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " THEN 'custom:'||" + Presence.CUSTOM_PROTOCOL 15997f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " ELSE 'pre:'||" + Presence.PROTOCOL 16097f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " END)"; 16197f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov 16297f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov private static String CONTACT_METHOD_DATA_SQL = 16397f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov "(CASE WHEN " + Data.MIMETYPE + "='" + Im.CONTENT_ITEM_TYPE + "'" 16497f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " THEN (CASE WHEN " + Tables.DATA + "." + Im.PROTOCOL + "=" + Im.PROTOCOL_CUSTOM 16597f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " THEN 'custom:'||" + Tables.DATA + "." + Im.CUSTOM_PROTOCOL 16697f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " ELSE 'pre:'||" + Tables.DATA + "." + Im.PROTOCOL 16797f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " END)" 16897f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " ELSE " + DataColumns.CONCRETE_DATA2 16997f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov + " END)"; 17097f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov 1711b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final Uri LIVE_FOLDERS_CONTACTS_URI = Uri.withAppendedPath( 1721b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov ContactsContract.AUTHORITY_URI, "live_folders/contacts"); 1731b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 1741b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final Uri LIVE_FOLDERS_CONTACTS_WITH_PHONES_URI = Uri.withAppendedPath( 1751b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov ContactsContract.AUTHORITY_URI, "live_folders/contacts_with_phones"); 1761b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 1771b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov private static final Uri LIVE_FOLDERS_CONTACTS_FAVORITES_URI = Uri.withAppendedPath( 1781b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov ContactsContract.AUTHORITY_URI, "live_folders/favorites"); 17997f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov 180f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public interface LegacyTables { 181d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String PEOPLE = "view_v1_people"; 1825dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov public static final String PEOPLE_JOIN_PRESENCE = "view_v1_people people " + PRESENCE_JOINS; 183d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String GROUPS = "view_v1_groups"; 184d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String ORGANIZATIONS = "view_v1_organizations"; 185d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String CONTACT_METHODS = "view_v1_contact_methods"; 186d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String PHONES = "view_v1_phones"; 187d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String EXTENSIONS = "view_v1_extensions"; 188d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public static final String GROUP_MEMBERSHIP = "view_v1_group_membership"; 189c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String PHOTOS = "view_v1_photos"; 190f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 191f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 192e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] ORGANIZATION_MIME_TYPES = new String[] { 193e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Organization.CONTENT_ITEM_TYPE 194e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 195e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 196e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] CONTACT_METHOD_MIME_TYPES = new String[] { 197e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Email.CONTENT_ITEM_TYPE, 198e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Im.CONTENT_ITEM_TYPE, 19967dde51ab932dc84d95a203b113989b13437f13dJeff Sharkey StructuredPostal.CONTENT_ITEM_TYPE, 200e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 201e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 202e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final String[] PHONE_MIME_TYPES = new String[] { 203e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Phone.CONTENT_ITEM_TYPE 204e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov }; 205e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 206044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private static final String[] PHOTO_MIME_TYPES = new String[] { 207044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Photo.CONTENT_ITEM_TYPE 208044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov }; 209044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 210044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private static final String[] EXTENSION_MIME_TYPES = new String[] { 211044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE 212044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov }; 213044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 21467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private interface IdQuery { 21567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov String[] COLUMNS = { BaseColumns._ID }; 216c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 217c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int _ID = 0; 218c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 219c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 220c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov /** 221c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov * A custom data row that is used to store legacy photo data fields no 222c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov * longer directly supported by the API. 223c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov */ 224c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private interface LegacyPhotoData { 225c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo_v1_extras"; 226c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 227c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String PHOTO_DATA_ID = Data.DATA1; 228c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String LOCAL_VERSION = Data.DATA2; 229c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String DOWNLOAD_REQUIRED = Data.DATA3; 230c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String EXISTS_ON_SERVER = Data.DATA4; 231c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String SYNC_ERROR = Data.DATA5; 232c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 233c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 234c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public static final String LEGACY_PHOTO_JOIN = 2355ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " LEFT OUTER JOIN data legacy_photo ON (raw_contacts._id = legacy_photo.raw_contact_id" 236c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND (SELECT mimetype FROM mimetypes WHERE mimetypes._id = legacy_photo.mimetype_id)" 237c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + "='" + LegacyPhotoData.CONTENT_ITEM_TYPE + "'" 238c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND " + DataColumns.CONCRETE_ID + " = legacy_photo." + LegacyPhotoData.PHOTO_DATA_ID 239c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + ")"; 240c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 241f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final HashMap<String, String> sPeopleProjectionMap; 2423cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private static final HashMap<String, String> sOrganizationProjectionMap; 243e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final HashMap<String, String> sContactMethodProjectionMap; 244e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private static final HashMap<String, String> sPhoneProjectionMap; 2450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sExtensionProjectionMap; 2460f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sGroupProjectionMap; 2470f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private static final HashMap<String, String> sGroupMembershipProjectionMap; 248c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov private static final HashMap<String, String> sPhotoProjectionMap; 249fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 250f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov static { 251f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 252f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // Contacts URI matching table 253f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov UriMatcher matcher = sUriMatcher; 254f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 255f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String authority = android.provider.Contacts.AUTHORITY; 2560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "extensions", EXTENSIONS); 2570f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "extensions/#", EXTENSIONS_ID); 2580f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groups", GROUPS); 2590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groups/#", GROUPS_ID); 260f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/name/*/members", GROUP_NAME_MEMBERS); 261f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/name/*/members/filter/*", 262f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// GROUP_NAME_MEMBERS_FILTER); 263f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/system_id/*/members", GROUP_SYSTEM_ID_MEMBERS); 264f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groups/system_id/*/members/filter/*", 265f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// GROUP_SYSTEM_ID_MEMBERS_FILTER); 2660f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groupmembership", GROUPMEMBERSHIP); 2670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "groupmembership/#", GROUPMEMBERSHIP_ID); 268f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "groupmembershipraw", GROUPMEMBERSHIP_RAW); 269f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people", PEOPLE); 270f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/strequent", PEOPLE_STREQUENT); 271f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/strequent/filter/*", PEOPLE_STREQUENT_FILTER); 272445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov matcher.addURI(authority, "people/filter/*", PEOPLE_FILTER); 273f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/with_phones_filter/*", 274f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_WITH_PHONES_FILTER); 275f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/with_email_or_im_filter/*", 276f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_WITH_EMAIL_OR_IM_FILTER); 277f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people/#", PEOPLE_ID); 2780f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/extensions", PEOPLE_EXTENSIONS); 2790f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/extensions/#", PEOPLE_EXTENSIONS_ID); 280e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/phones", PEOPLE_PHONES); 281e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/phones/#", PEOPLE_PHONES_ID); 282f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/phones_with_presence", 283f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_PHONES_WITH_PRESENCE); 284c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "people/#/photo", PEOPLE_PHOTO); 285f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/photo/data", PEOPLE_PHOTO_DATA); 286e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/contact_methods", PEOPLE_CONTACTMETHODS); 287f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/contact_methods_with_presence", 288f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PEOPLE_CONTACTMETHODS_WITH_PRESENCE); 289e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "people/#/contact_methods/#", PEOPLE_CONTACTMETHODS_ID); 290f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/organizations", PEOPLE_ORGANIZATIONS); 291f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/#/organizations/#", PEOPLE_ORGANIZATIONS_ID); 2920f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/groupmembership", PEOPLE_GROUPMEMBERSHIP); 2930f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov matcher.addURI(authority, "people/#/groupmembership/#", PEOPLE_GROUPMEMBERSHIP_ID); 294f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/raw", PEOPLE_RAW); 295f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "people/owner", PEOPLE_OWNER); 296f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov matcher.addURI(authority, "people/#/update_contact_time", 297f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov PEOPLE_UPDATE_CONTACT_TIME); 29833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov matcher.addURI(authority, "deleted_people", DELETED_PEOPLE); 29933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov matcher.addURI(authority, "deleted_groups", DELETED_GROUPS); 300e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "phones", PHONES); 301f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones_with_presence", PHONES_WITH_PRESENCE); 302fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov matcher.addURI(authority, "phones/filter/*", PHONES_FILTER); 303f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones/filter_name/*", PHONES_FILTER_NAME); 304f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "phones/mobile_filter_name/*", 305f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// PHONES_MOBILE_FILTER_NAME); 306e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "phones/#", PHONES_ID); 307c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "photos", PHOTOS); 308c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov matcher.addURI(authority, "photos/#", PHOTOS_ID); 309e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "contact_methods", CONTACTMETHODS); 310bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov matcher.addURI(authority, "contact_methods/email", CONTACTMETHODS_EMAIL); 311f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "contact_methods/email/*", CONTACTMETHODS_EMAIL_FILTER); 312e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov matcher.addURI(authority, "contact_methods/#", CONTACTMETHODS_ID); 313f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "contact_methods/with_presence", 314f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// CONTACTMETHODS_WITH_PRESENCE); 3153cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov matcher.addURI(authority, "organizations", ORGANIZATIONS); 3163cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov matcher.addURI(authority, "organizations/#", ORGANIZATIONS_ID); 317f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "voice_dialer_timestamp", VOICE_DIALER_TIMESTAMP); 318c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY, 319c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov SEARCH_SUGGESTIONS); 320c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", 321c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov SEARCH_SUGGESTIONS); 322b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov matcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/#", 323b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov SEARCH_SHORTCUT); 324f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// matcher.addURI(authority, "settings", SETTINGS); 325f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov// 3261b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov matcher.addURI(authority, "live_folders/people", LIVE_FOLDERS_PEOPLE); 3271b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov matcher.addURI(authority, "live_folders/people/*", 3281b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov LIVE_FOLDERS_PEOPLE_GROUP_NAME); 3291b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov matcher.addURI(authority, "live_folders/people_with_phones", 3301b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov LIVE_FOLDERS_PEOPLE_WITH_PHONES); 3311b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov matcher.addURI(authority, "live_folders/favorites", 3321b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov LIVE_FOLDERS_PEOPLE_FAVORITES); 333f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 334f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 335e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov HashMap<String, String> peopleProjectionMap = new HashMap<String, String>(); 336d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.NAME, People.NAME); 337d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.DISPLAY_NAME, People.DISPLAY_NAME); 338d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.PHONETIC_NAME, People.PHONETIC_NAME); 339d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.NOTES, People.NOTES); 340d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.TIMES_CONTACTED, People.TIMES_CONTACTED); 341d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.LAST_TIME_CONTACTED, People.LAST_TIME_CONTACTED); 342d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.CUSTOM_RINGTONE, People.CUSTOM_RINGTONE); 343d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.SEND_TO_VOICEMAIL, People.SEND_TO_VOICEMAIL); 344d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov peopleProjectionMap.put(People.STARRED, People.STARRED); 345ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleProjectionMap.put(People.PRIMARY_ORGANIZATION_ID, People.PRIMARY_ORGANIZATION_ID); 346ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleProjectionMap.put(People.PRIMARY_EMAIL_ID, People.PRIMARY_EMAIL_ID); 347ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleProjectionMap.put(People.PRIMARY_PHONE_ID, People.PRIMARY_PHONE_ID); 348e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 349e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPeopleProjectionMap = new HashMap<String, String>(peopleProjectionMap); 3509155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sPeopleProjectionMap.put(People._ID, People._ID); 351d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.NUMBER, People.NUMBER); 352d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.TYPE, People.TYPE); 353d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.LABEL, People.LABEL); 354d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sPeopleProjectionMap.put(People.NUMBER_KEY, People.NUMBER_KEY); 3550126458fabecb6514bf6d368ae6a066a78856a91Dmitri Plotnikov sPeopleProjectionMap.put(People.IM_PROTOCOL, IM_PROTOCOL_SQL + " AS " + People.IM_PROTOCOL); 35670b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.IM_HANDLE, People.IM_HANDLE); 35770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.IM_ACCOUNT, People.IM_ACCOUNT); 35870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.PRESENCE_STATUS, People.PRESENCE_STATUS); 35970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov sPeopleProjectionMap.put(People.PRESENCE_CUSTOM_STATUS, People.PRESENCE_CUSTOM_STATUS); 3603cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 3613cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap = new HashMap<String, String>(); 3629155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations._ID, 3639155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov android.provider.Contacts.Organizations._ID); 3643cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.PERSON_ID, 365d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.PERSON_ID); 3663cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.ISPRIMARY, 367d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.ISPRIMARY); 3683cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.COMPANY, 369d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.COMPANY); 3703cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.TYPE, 371d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.TYPE); 3723cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.LABEL, 373d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.LABEL); 3743cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov sOrganizationProjectionMap.put(android.provider.Contacts.Organizations.TITLE, 375d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Organizations.TITLE); 376e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 377e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sContactMethodProjectionMap = new HashMap<String, String>(peopleProjectionMap); 3789155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods._ID, ContactMethods._ID); 379d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.PERSON_ID, ContactMethods.PERSON_ID); 380d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.KIND, ContactMethods.KIND); 381d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.ISPRIMARY, ContactMethods.ISPRIMARY); 382d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.TYPE, ContactMethods.TYPE); 383d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.DATA, ContactMethods.DATA); 384d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.LABEL, ContactMethods.LABEL); 385d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov sContactMethodProjectionMap.put(ContactMethods.AUX_DATA, ContactMethods.AUX_DATA); 386e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 387e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap = new HashMap<String, String>(peopleProjectionMap); 3889155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones._ID, 3899155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov android.provider.Contacts.Phones._ID); 390e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.PERSON_ID, 391d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.PERSON_ID); 392e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.ISPRIMARY, 393d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.ISPRIMARY); 394e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.NUMBER, 395d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.NUMBER); 396e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.TYPE, 397d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.TYPE); 398e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.LABEL, 399d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.LABEL); 400e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov sPhoneProjectionMap.put(android.provider.Contacts.Phones.NUMBER_KEY, 401d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Phones.NUMBER_KEY); 4020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 4030f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap = new HashMap<String, String>(); 4049155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions._ID, 4059155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov android.provider.Contacts.Extensions._ID); 4060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.PERSON_ID, 407d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.PERSON_ID); 4080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.NAME, 409d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.NAME); 4100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sExtensionProjectionMap.put(android.provider.Contacts.Extensions.VALUE, 411d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Extensions.VALUE); 4120f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 4130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap = new HashMap<String, String>(); 4140f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups._ID, 415d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups._ID); 4160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.NAME, 417d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.NAME); 4180f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.NOTES, 419d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.NOTES); 4200f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupProjectionMap.put(android.provider.Contacts.Groups.SYSTEM_ID, 421d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.Groups.SYSTEM_ID); 4220f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 4230f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap = new HashMap<String, String>(); 4249155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sGroupMembershipProjectionMap.put(android.provider.Contacts.GroupMembership._ID, 4259155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov android.provider.Contacts.GroupMembership._ID); 4260f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap.put(android.provider.Contacts.GroupMembership.PERSON_ID, 427d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.GroupMembership.PERSON_ID); 4280f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov sGroupMembershipProjectionMap.put(android.provider.Contacts.GroupMembership.GROUP_ID, 429d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov android.provider.Contacts.GroupMembership.GROUP_ID); 430c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 431c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap = new HashMap<String, String>(); 4329155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos._ID, 4339155470a5d8e7834ca742f66ede487e4f6e391eaDmitri Plotnikov android.provider.Contacts.Photos._ID); 434c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.PERSON_ID, 435c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.PERSON_ID); 436c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.DATA, 437c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.DATA); 438c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.LOCAL_VERSION, 439c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.LOCAL_VERSION); 440c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.DOWNLOAD_REQUIRED, 441c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.DOWNLOAD_REQUIRED); 442c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.EXISTS_ON_SERVER, 443c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.EXISTS_ON_SERVER); 444c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov sPhotoProjectionMap.put(android.provider.Contacts.Photos.SYNC_ERROR, 445c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov android.provider.Contacts.Photos.SYNC_ERROR); 446f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 447f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 448f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final Context mContext; 449f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final OpenHelper mOpenHelper; 450f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final ContactsProvider2 mContactsProvider; 451f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private final NameSplitter mPhoneticNameSplitter; 452a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov private final GlobalSearchSupport mGlobalSearchSupport; 453f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 454d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov /** Precompiled sql statement for incrementing times contacted for a contact */ 4553cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final SQLiteStatement mLastTimeContactedUpdate; 456044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private final SQLiteStatement mDataMimetypeQuery; 457044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private final SQLiteStatement mDataRawContactIdQuery; 4583cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 4593cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private final ContentValues mValues = new ContentValues(); 46067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private final ContentValues mValues2 = new ContentValues(); 46167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private final ContentValues mValues3 = new ContentValues(); 462caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov private Account mAccount; 463a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov 464044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private long mMimetypeEmail; 465044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private long mMimetypeIm; 466044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private long mMimetypePostal; 467044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 468f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public LegacyApiSupport(Context context, OpenHelper openHelper, 469a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov ContactsProvider2 contactsProvider, GlobalSearchSupport globalSearchSupport) { 470f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext = context; 471f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContactsProvider = contactsProvider; 472f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mOpenHelper = openHelper; 473a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov mGlobalSearchSupport = globalSearchSupport; 474f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 475622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey mPhoneticNameSplitter = new NameSplitter("", "", "", context 476622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey .getString(com.android.internal.R.string.common_name_conjunctions), Locale 477622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey .getDefault()); 478f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 479f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 4805ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate = db.compileStatement("UPDATE " + Tables.RAW_CONTACTS + " SET " 4816cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "=" 4826cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.TIMES_CONTACTED + "+1," 4836cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts.LAST_TIME_CONTACTED + "=? WHERE " 4846cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov + RawContacts._ID + "=?"); 485044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 486044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mDataMimetypeQuery = db.compileStatement( 487044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov "SELECT " + DataColumns.MIMETYPE_ID + 488044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov " FROM " + Tables.DATA + 489044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov " WHERE " + Data._ID + "=?"); 490044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 491044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mDataRawContactIdQuery = db.compileStatement( 492044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov "SELECT " + Data.RAW_CONTACT_ID + 493044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov " FROM " + Tables.DATA + 494044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov " WHERE " + Data._ID + "=?"); 495044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 496044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mMimetypeEmail = mOpenHelper.getMimeTypeId(Email.CONTENT_ITEM_TYPE); 497044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mMimetypeIm = mOpenHelper.getMimeTypeId(Im.CONTENT_ITEM_TYPE); 498044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mMimetypePostal = mOpenHelper.getMimeTypeId(StructuredPostal.CONTENT_ITEM_TYPE); 499f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 500f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 501caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov private void ensureDefaultAccount() { 502caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov if (mAccount == null) { 503caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov mAccount = mContactsProvider.getDefaultAccount(); 5046f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov if (mAccount == null) { 5056f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov 5066f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov // This fall-through account will not match any data in the database, which 5076f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov // is the expected behavior 50828153f2e3dda944e983f6dd0ab80aca63631ddfaJeff Hamilton mAccount = new Account(NON_EXISTENT_ACCOUNT_NAME, NON_EXISTENT_ACCOUNT_TYPE); 5096f7446a25ecb55ee213eaa7702837cdf32e68777Dmitri Plotnikov } 510caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov } 511caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov } 512d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 513b61f0d658092919aa2bb201787cf3fcbe1d3d048Jeff Hamilton public static void createDatabase(SQLiteDatabase db) { 514b61f0d658092919aa2bb201787cf3fcbe1d3d048Jeff Hamilton Log.i(TAG, "Bootstrapping database legacy support"); 515d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 516ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov String peopleColumns = "name." + StructuredName.DISPLAY_NAME 517d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NAME + ", " + 5185ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContactsColumns.DISPLAY_NAME 519d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.DISPLAY_NAME + ", " + 520d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PHONETIC_NAME_SQL 521d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PHONETIC_NAME + " , " + 522d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "note." + Note.NOTE 523d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NOTES + ", " + 524caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_NAME + ", " + 525caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_TYPE + ", " + 5265ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.TIMES_CONTACTED 527d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TIMES_CONTACTED + ", " + 5285ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.LAST_TIME_CONTACTED 529d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LAST_TIME_CONTACTED + ", " + 5305ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.CUSTOM_RINGTONE 531d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.CUSTOM_RINGTONE + ", " + 5325ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.SEND_TO_VOICEMAIL 533d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.SEND_TO_VOICEMAIL + ", " + 5345ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.STARRED 535d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.STARRED + ", " + 536d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "organization." + Data._ID 537d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_ORGANIZATION_ID + ", " + 538d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "email." + Data._ID 539d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_EMAIL_ID + ", " + 540d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Data._ID 541d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.PRIMARY_PHONE_ID + ", " + 542d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.NUMBER 543d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.NUMBER + ", " + 544d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.TYPE 545d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.TYPE + ", " + 546d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + Phone.LABEL 547d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + People.LABEL + ", " + 548d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov "phone." + PhoneColumns.NORMALIZED_NUMBER 549ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov + " AS " + People.NUMBER_KEY; 550ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov 551ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PEOPLE + ";"); 552ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PEOPLE + " AS SELECT " + 553ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov RawContactsColumns.CONCRETE_ID 554ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov + " AS " + android.provider.Contacts.People._ID + ", " + 555ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleColumns + 5565ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.RAW_CONTACTS + PEOPLE_JOINS + 557ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov " WHERE " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 558ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov " AND " + RawContacts.IS_RESTRICTED + "=0" + ";"); 559d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 560d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.ORGANIZATIONS + ";"); 561d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.ORGANIZATIONS + " AS SELECT " + 562d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 563d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations._ID + ", " + 5645ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov Data.RAW_CONTACT_ID 565d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.PERSON_ID + ", " + 566d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Data.IS_PRIMARY 567d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.ISPRIMARY + ", " + 568caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_NAME + ", " + 569caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_TYPE + ", " + 570d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.COMPANY 571d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.COMPANY + ", " + 572d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TYPE 573d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TYPE + ", " + 574d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.LABEL 575d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.LABEL + ", " + 576d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organization.TITLE 577caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + android.provider.Contacts.Organizations.TITLE + 5785ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 579d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 58033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Organization.CONTENT_ITEM_TYPE + "'" 581caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" 582caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + RawContacts.IS_RESTRICTED + "=0" + 583d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 584d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 585d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.CONTACT_METHODS + ";"); 586d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.CONTACT_METHODS + " AS SELECT " + 587d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 588d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods._ID + ", " + 589d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 590d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.PERSON_ID + ", " + 591d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov CONTACT_METHOD_KIND_SQL 592d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.KIND + ", " + 593d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 594d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.ISPRIMARY + ", " + 595d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA1 596d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.TYPE + ", " + 59797f9a162b7632481988bf8639b83f37dcb42b586Dmitri Plotnikov CONTACT_METHOD_DATA_SQL 598d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.DATA + ", " + 599d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA3 600d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.LABEL + ", " + 601d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_DATA14 602d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + ContactMethods.AUX_DATA + ", " + 603ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleColumns + 604d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 60533b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov " WHERE " + ContactMethods.KIND + " IS NOT NULL" 606caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" 607caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + RawContacts.IS_RESTRICTED + "=0" + 608d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 609d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 610d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 611d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHONES + ";"); 612d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHONES + " AS SELECT " + 613d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 614d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones._ID + ", " + 615d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 616d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.PERSON_ID + ", " + 617d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_IS_PRIMARY 618d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.ISPRIMARY + ", " + 619d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.NUMBER 620d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER + ", " + 621d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.TYPE 622d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.TYPE + ", " + 623d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Tables.DATA + "." + Phone.LABEL 624d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.LABEL + ", " + 625d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov PhoneColumns.CONCRETE_NORMALIZED_NUMBER 626d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Phones.NUMBER_KEY + ", " + 627ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov peopleColumns + 628d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + 629d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 63033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Phone.CONTENT_ITEM_TYPE + "'" 631caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" 632caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + RawContacts.IS_RESTRICTED + "=0" + 633d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 634d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 635d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.EXTENSIONS + ";"); 636d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.EXTENSIONS + " AS SELECT " + 637d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 638d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions._ID + ", " + 639d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 640d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.PERSON_ID + ", " + 641caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_NAME + ", " + 642caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_TYPE + ", " + 643d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.NAME 644d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.NAME + ", " + 645d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ExtensionsColumns.VALUE 646caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + android.provider.Contacts.Extensions.VALUE + 6475ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_MIMETYPE_RAW_CONTACTS + 648d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 64933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE + "'" 650caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" 651caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + RawContacts.IS_RESTRICTED + "=0" + 652d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 653d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 654d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUPS + ";"); 655d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUPS + " AS SELECT " + 656d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupsColumns.CONCRETE_ID + " AS " + android.provider.Contacts.Groups._ID + ", " + 657caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov Groups.ACCOUNT_NAME + ", " + 658caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov Groups.ACCOUNT_TYPE + ", " + 659d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE + " AS " + android.provider.Contacts.Groups.NAME + ", " + 660d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES + " AS " + android.provider.Contacts.Groups.NOTES + " , " + 661d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID + " AS " + android.provider.Contacts.Groups.SYSTEM_ID + 662d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " FROM " + Tables.GROUPS + 663d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 664d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 665d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.GROUP_MEMBERSHIP + ";"); 666d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.GROUP_MEMBERSHIP + " AS SELECT " + 667d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov DataColumns.CONCRETE_ID 668d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership._ID + ", " + 669d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 670d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.PERSON_ID + ", " + 671caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.ACCOUNT_NAME 672caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + RawContacts.ACCOUNT_NAME + ", " + 673caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov Tables.RAW_CONTACTS + "." + RawContacts.ACCOUNT_TYPE 674caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + RawContacts.ACCOUNT_TYPE + ", " + 675d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupMembership.GROUP_ROW_ID 676d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.GROUP_ID + ", " + 677d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.TITLE 678d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NAME + ", " + 679d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.NOTES 680d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.NOTES + " , " + 681d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Groups.SYSTEM_ID 682caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + android.provider.Contacts.GroupMembership.SYSTEM_ID + 6835ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov " FROM " + Tables.DATA_JOIN_PACKAGES_MIMETYPES_RAW_CONTACTS_GROUPS + 684d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 68533b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + GroupMembership.CONTENT_ITEM_TYPE + "'" 6865ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" + 687d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ";"); 688c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 689c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("DROP VIEW IF EXISTS " + LegacyTables.PHOTOS + ";"); 690c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov db.execSQL("CREATE VIEW " + LegacyTables.PHOTOS + " AS SELECT " + 691c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov DataColumns.CONCRETE_ID 692c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos._ID + ", " + 693d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov DataColumns.CONCRETE_RAW_CONTACT_ID 694c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.PERSON_ID + ", " + 695caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_NAME + ", " + 696caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov RawContacts.ACCOUNT_TYPE + ", " + 697c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Tables.DATA + "." + Photo.PHOTO 698c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DATA + ", " + 699c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.EXISTS_ON_SERVER 700c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.EXISTS_ON_SERVER + ", " + 701c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.DOWNLOAD_REQUIRED 702c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.DOWNLOAD_REQUIRED + ", " + 703c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.LOCAL_VERSION 704c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.LOCAL_VERSION + ", " + 705c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov "legacy_photo." + LegacyPhotoData.SYNC_ERROR 706caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AS " + android.provider.Contacts.Photos.SYNC_ERROR + 707c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " FROM " + Tables.DATA + DATA_JOINS + LEGACY_PHOTO_JOIN + 708c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov " WHERE " + MimetypesColumns.CONCRETE_MIMETYPE + "='" 70933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov + Photo.CONTENT_ITEM_TYPE + "'" 710caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + Tables.RAW_CONTACTS + "." + RawContacts.DELETED + "=0" 711caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov + " AND " + RawContacts.IS_RESTRICTED + "=0" + 712c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov ";"); 713d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov } 714d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov 715f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Uri insert(Uri uri, ContentValues values) { 71667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov ensureDefaultAccount(); 717f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 718f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long id = 0; 719f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 720f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: 7213cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertPeople(values); 7223cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 7233cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 7243cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 7253cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov id = insertOrganization(values); 726f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 727f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7280f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: { 7295ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 7305ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 731e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 7320f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 733e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7340f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case CONTACTMETHODS: { 7355ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, ContactMethods.PERSON_ID); 7365ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertContactMethod(rawContactId, values); 737e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 7380f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 739e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7400f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PHONES: { 7415ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7420f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Phones.PERSON_ID); 7435ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertPhone(rawContactId, values); 7440f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7460f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 74794743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton case PEOPLE_PHONES: { 74894743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 74994743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton id = insertPhone(rawContactId, values); 75094743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton break; 75194743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton } 75294743330ca80ad334340bef51b2a093242721bb0Jeff Hamilton 7530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: { 7545ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7550f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.Extensions.PERSON_ID); 7565ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertExtension(rawContactId, values); 7570f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7580f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 7600f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 7610f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov id = insertGroup(values); 762e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 763e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: { 7655ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = getRequiredValue(values, 7660f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.PERSON_ID); 7670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov long groupId = getRequiredValue(values, 7680f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov android.provider.Contacts.GroupMembership.GROUP_ID); 7695ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov id = insertGroupMembership(rawContactId, groupId); 7700f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 7710f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 7720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 773f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 774f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 775f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 776f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 777f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (id < 0) { 778f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return null; 779f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 780f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 781f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Uri result = ContentUris.withAppendedId(uri, id); 782f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov onChange(result); 783f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return result; 784f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 785f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 7860f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long getRequiredValue(ContentValues values, String column) { 7870f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov if (!values.containsKey(column)) { 7880f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov throw new RuntimeException("Required value: " + column); 789e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 790e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7910f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return values.getAsLong(column); 792e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 793e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 7943cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertPeople(ContentValues values) { 795044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parsePeopleValues(values); 796caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 79767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri contactUri = mContactsProvider.insertInTransaction(RawContacts.CONTENT_URI, mValues); 79867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long rawContactId = ContentUris.parseId(contactUri); 79967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 80067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (mValues2.size() != 0) { 80167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mValues2.put(Data.RAW_CONTACT_ID, rawContactId); 80267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues2); 80367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 80467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (mValues3.size() != 0) { 80567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mValues3.put(Data.RAW_CONTACT_ID, rawContactId); 80667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues3); 80767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 808f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 80967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return rawContactId; 81067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 81167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 8123cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov private long insertOrganization(ContentValues values) { 813044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseOrganizationValues(values); 8145ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.RAW_CONTACT_ID, 8153cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov values, android.provider.Contacts.Organizations.PERSON_ID); 8163cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 81767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 8183cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 8193cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return ContentUris.parseId(uri); 8203cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 821f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 8225ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertPhone(long rawContactId, ContentValues values) { 823044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parsePhoneValues(values); 8245ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 825e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 82667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 827e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 828e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 829e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 830e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8315ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertContactMethod(long rawContactId, ContentValues values) { 832e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov Integer kind = values.getAsInteger(ContactMethods.KIND); 833e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov if (kind == null) { 834e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov throw new RuntimeException("Required value: " + ContactMethods.KIND); 835e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 836e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 837044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseContactMethodValues(kind, values); 838e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 839044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 84067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 841e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov return ContentUris.parseId(uri); 842e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 843e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 8445ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertExtension(long rawContactId, ContentValues values) { 8450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 8460f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8475ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 8480f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, android.provider.Contacts.Extensions.CONTENT_ITEM_TYPE); 8490f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 850044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseExtensionValues(values); 8510f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 85267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 8530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 8540f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 8550f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov private long insertGroup(ContentValues values) { 857044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseGroupValues(values); 8580f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 859df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana mValues.put(Groups.ACCOUNT_NAME, mAccount.name); 860df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana mValues.put(Groups.ACCOUNT_TYPE, mAccount.type); 861caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 86267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Groups.CONTENT_URI, mValues); 8630f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 8640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 8650f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8665ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private long insertGroupMembership(long rawContactId, long groupId) { 8670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.clear(); 8680f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 8690f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE); 8705ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(GroupMembership.RAW_CONTACT_ID, rawContactId); 8710f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov mValues.put(GroupMembership.GROUP_ROW_ID, groupId); 8720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 87367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 8740f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov return ContentUris.parseId(uri); 8750f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov } 8760f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 877f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { 87867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov ensureDefaultAccount(); 87967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 88067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov int match = sUriMatcher.match(uri); 881c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count = 0; 882f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch(match) { 88367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov case PEOPLE_UPDATE_CONTACT_TIME: { 884f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov count = updateContactTime(uri, values); 885f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 88667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 887c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 888c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: { 8895ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 8905ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov return updatePhoto(rawContactId, values); 891c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 892c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 89367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov case -1: { 89467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 89567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 89667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 89767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov default: { 89867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov count = updateAll(uri, match, values, selection, selectionArgs); 89967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 90067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 90167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 90267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (count > 0) { 90367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContext.getContentResolver().notifyChange(uri, null); 90467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 90567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 90667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return count; 90767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 90867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 90967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private int updateAll(Uri uri, final int match, ContentValues values, String selection, 91067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov String[] selectionArgs) { 91167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Cursor c = query(uri, IdQuery.COLUMNS, selection, selectionArgs, null, null); 91267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (c == null) { 91367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return 0; 91467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 91567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 91667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov int count = 0; 91767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov try { 91867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov while (c.moveToNext()) { 91967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long id = c.getLong(IdQuery._ID); 92067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov count += update(match, id, values); 92167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 92267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } finally { 92367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov c.close(); 92467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 92567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 92667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return count; 92767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 92867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 92967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov public int update(int match, long id, ContentValues values) { 93067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov int count = 0; 93167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov switch(match) { 93267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov case PEOPLE: 93367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov case PEOPLE_ID: { 93467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov count = updatePeople(id, values); 93567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov break; 93667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 93767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 938044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case ORGANIZATIONS: 939044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case ORGANIZATIONS_ID: { 940044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updateOrganizations(id, values); 941044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 942044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 943044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 944044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHONES: 945044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHONES_ID: { 946044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updatePhones(id, values); 947044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 948044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 949044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 950044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case CONTACTMETHODS: 951044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case CONTACTMETHODS_ID: { 952044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updateContactMethods(id, values); 953044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 954044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 955044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 956044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case EXTENSIONS: 957044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case EXTENSIONS_ID: { 958044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updateExtensions(id, values); 959044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 960044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 961044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 962044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case GROUPS: 963044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case GROUPS_ID: { 964044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updateGroups(id, values); 965c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 966044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 967c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 968044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHOTOS: 969c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PHOTOS_ID: 970044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = updatePhotoByDataId(id, values); 971c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 97267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 973c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 97467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return count; 97567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 976c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 97767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private int updatePeople(long rawContactId, ContentValues values) { 978044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parsePeopleValues(values); 97967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 980044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov int count = mContactsProvider.update(RawContacts.CONTENT_URI, 981044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues, RawContacts._ID + "=" + rawContactId, null); 98267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 98367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (count == 0) { 98467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return 0; 985f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 986f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 98767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (mValues2.size() != 0) { 98867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri dataUri = findFirstDataRow(rawContactId, StructuredName.CONTENT_ITEM_TYPE); 98967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (dataUri != null) { 99067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.update(dataUri, mValues2, null, null); 99167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } else { 99267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mValues2.put(Data.RAW_CONTACT_ID, rawContactId); 99367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues2); 99467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 99567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 99667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 99767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (mValues3.size() != 0) { 99867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri dataUri = findFirstDataRow(rawContactId, Note.CONTENT_ITEM_TYPE); 99967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (dataUri != null) { 100067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.update(dataUri, mValues3, null, null); 100167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } else { 100267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mValues3.put(Data.RAW_CONTACT_ID, rawContactId); 100367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues3); 100467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 1005f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 100667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 1007f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return count; 1008f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1009f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1010044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updateOrganizations(long dataId, ContentValues values) { 1011044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseOrganizationValues(values); 1012044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1013044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1014044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data._ID + "=" + dataId, null); 1015044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1016044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1017044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updatePhones(long dataId, ContentValues values) { 1018044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parsePhoneValues(values); 1019044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1020044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1021044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data._ID + "=" + dataId, null); 1022044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1023044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1024044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updateContactMethods(long dataId, ContentValues values) { 1025044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov int kind; 1026044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1027044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mDataMimetypeQuery.bindLong(1, dataId); 1028044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long mimetype_id; 1029044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov try { 1030044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mimetype_id = mDataMimetypeQuery.simpleQueryForLong(); 1031044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } catch (SQLiteDoneException e) { 1032044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov // Data row not found 1033044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return 0; 1034044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1035044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1036044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (mimetype_id == mMimetypeEmail) { 1037044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov kind = android.provider.Contacts.KIND_EMAIL; 1038044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } else if (mimetype_id == mMimetypeIm) { 1039044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov kind = android.provider.Contacts.KIND_IM; 1040044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } else if (mimetype_id == mMimetypePostal) { 1041044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov kind = android.provider.Contacts.KIND_POSTAL; 1042044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } else { 1043044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1044044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov // Non-legacy kind: return "Not found" 1045044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return 0; 1046044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1047044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1048044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseContactMethodValues(kind, values); 1049044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1050044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1051044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data._ID + "=" + dataId, null); 1052044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1053044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1054044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updateExtensions(long dataId, ContentValues values) { 1055044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseExtensionValues(values); 1056044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1057044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1058044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data._ID + "=" + dataId, null); 1059044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1060044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1061044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updateGroups(long groupId, ContentValues values) { 1062044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov parseGroupValues(values); 1063044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1064044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return mContactsProvider.updateInTransaction(Groups.CONTENT_URI, mValues, 1065044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Groups._ID + "=" + groupId, null); 1066044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1067044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1068f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private int updateContactTime(Uri uri, ContentValues values) { 1069f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1070f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO check sanctions 1071f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1072f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov long lastTimeContacted; 1073f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (values.containsKey(People.LAST_TIME_CONTACTED)) { 1074f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = values.getAsLong(People.LAST_TIME_CONTACTED); 1075f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 1076f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov lastTimeContacted = System.currentTimeMillis(); 1077f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1078f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 10795ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); 1080d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov long contactId = mOpenHelper.getContactId(rawContactId); 1081d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov if (contactId != 0) { 1082d3fde755e73cd3912a488e7cb7d412d3c5f6ca94Dmitri Plotnikov mContactsProvider.updateContactTime(contactId, lastTimeContacted); 1083f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } else { 1084f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(1, lastTimeContacted); 10855ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mLastTimeContactedUpdate.bindLong(2, rawContactId); 1086f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mLastTimeContactedUpdate.execute(); 1087f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1088f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return 1; 1089f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1090f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 10915ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov private int updatePhoto(long rawContactId, ContentValues values) { 1092c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1093c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov // TODO check sanctions 1094c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1095c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov int count; 1096c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 109767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long dataId = findFirstDataId(rawContactId, Photo.CONTENT_ITEM_TYPE); 1098c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1099c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1100c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov byte[] bytes = values.getAsByteArray(android.provider.Contacts.Photos.DATA); 1101c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Photo.PHOTO, bytes); 1102c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1103c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (dataId == -1) { 1104c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE); 11055ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 110667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri dataUri = mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 1107c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov dataId = ContentUris.parseId(dataUri); 1108c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov count = 1; 1109c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } else { 1110c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 111167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov count = mContactsProvider.updateInTransaction(dataUri, mValues, null, null); 1112c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1113c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1114044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov updateLegacyPhotoData(rawContactId, dataId, values); 1115044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1116044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return count; 1117044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1118044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1119044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private int updatePhotoByDataId(long dataId, ContentValues values) { 1120044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1121044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mDataRawContactIdQuery.bindLong(1, dataId); 1122044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long rawContactId; 1123044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1124044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov try { 1125044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov rawContactId = mDataRawContactIdQuery.simpleQueryForLong(); 1126044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } catch (SQLiteDoneException e) { 1127044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov // Data row not found 1128044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return 0; 1129044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1130044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1131044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (values.containsKey(android.provider.Contacts.Photos.DATA)) { 1132044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov byte[] bytes = values.getAsByteArray(android.provider.Contacts.Photos.DATA); 1133044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1134044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Photo.PHOTO, bytes); 1135044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1136044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data._ID + "=" + dataId, null); 1137044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1138044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1139044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov updateLegacyPhotoData(rawContactId, dataId, values); 1140044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1141044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return 1; 1142044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1143044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1144044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void updateLegacyPhotoData(long rawContactId, long dataId, ContentValues values) { 1145c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.clear(); 1146c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.LOCAL_VERSION, 1147c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.LOCAL_VERSION); 1148c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.DOWNLOAD_REQUIRED, 1149c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.DOWNLOAD_REQUIRED); 1150c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.EXISTS_ON_SERVER, 1151c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.EXISTS_ON_SERVER); 1152c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov OpenHelper.copyStringValue(mValues, LegacyPhotoData.SYNC_ERROR, 1153c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values, android.provider.Contacts.Photos.SYNC_ERROR); 1154c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 115567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov int updated = mContactsProvider.updateInTransaction(Data.CONTENT_URI, mValues, 1156c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov Data.MIMETYPE + "='" + LegacyPhotoData.CONTENT_ITEM_TYPE + "'" 11575ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + " AND " + Data.RAW_CONTACT_ID + "=" + rawContactId 1158c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov + " AND " + LegacyPhotoData.PHOTO_DATA_ID + "=" + dataId, null); 1159c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov if (updated == 0) { 11605ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov mValues.put(Data.RAW_CONTACT_ID, rawContactId); 1161c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(Data.MIMETYPE, LegacyPhotoData.CONTENT_ITEM_TYPE); 1162c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov mValues.put(LegacyPhotoData.PHOTO_DATA_ID, dataId); 116367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mContactsProvider.insertInTransaction(Data.CONTENT_URI, mValues); 1164c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1165044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1166c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1167044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parsePeopleValues(ContentValues values) { 1168044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1169044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues2.clear(); 1170044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues3.clear(); 1171044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1172044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, RawContacts.CUSTOM_RINGTONE, 1173044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.CUSTOM_RINGTONE); 1174044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.SEND_TO_VOICEMAIL, 1175044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.SEND_TO_VOICEMAIL); 1176044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.LAST_TIME_CONTACTED, 1177044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.LAST_TIME_CONTACTED); 1178044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.TIMES_CONTACTED, 1179044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.TIMES_CONTACTED); 1180044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, RawContacts.STARRED, 1181044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.STARRED); 1182044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(RawContacts.ACCOUNT_NAME, mAccount.name); 1183044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(RawContacts.ACCOUNT_TYPE, mAccount.type); 1184044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1185044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (values.containsKey(People.NAME) || values.containsKey(People.PHONETIC_NAME)) { 1186044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 1187044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues2, StructuredName.DISPLAY_NAME, 1188044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, People.NAME); 1189044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (values.containsKey(People.PHONETIC_NAME)) { 1190044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov String phoneticName = values.getAsString(People.PHONETIC_NAME); 1191044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov NameSplitter.Name parsedName = new NameSplitter.Name(); 1192044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mPhoneticNameSplitter.split(parsedName, phoneticName); 1193044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues2.put(StructuredName.PHONETIC_GIVEN_NAME, parsedName.getGivenNames()); 1194044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues2.put(StructuredName.PHONETIC_MIDDLE_NAME, parsedName.getMiddleName()); 1195044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues2.put(StructuredName.PHONETIC_FAMILY_NAME, parsedName.getFamilyName()); 1196044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1197044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1198044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1199044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (values.containsKey(People.NOTES)) { 1200044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 1201044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues3, Note.NOTE, values, People.NOTES); 1202044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1203044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1204044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1205044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parseOrganizationValues(ContentValues values) { 1206044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1207044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1208044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 1209044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1210044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 1211044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Organizations.ISPRIMARY); 1212044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1213044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.COMPANY, 1214044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Organizations.COMPANY); 1215044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1216044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 1217044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Organization.TYPE, 1218044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Organizations.TYPE); 1219044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1220044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.LABEL, 1221044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Organizations.LABEL); 1222044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Organization.TITLE, 1223044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Organizations.TITLE); 1224044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1225044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1226044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parsePhoneValues(ContentValues values) { 1227044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1228044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1229044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 1230044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1231044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, 1232044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Phones.ISPRIMARY); 1233044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1234044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.NUMBER, 1235044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Phones.NUMBER); 1236044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1237044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov // TYPE values happen to remain the same between V1 and V2 - can just copy the value 1238044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Phone.TYPE, 1239044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Phones.TYPE); 1240044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1241044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Phone.LABEL, 1242044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Phones.LABEL); 1243044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1244044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1245044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parseContactMethodValues(int kind, ContentValues values) { 1246044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1247044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1248044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, Data.IS_PRIMARY, values, ContactMethods.ISPRIMARY); 1249044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1250044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov switch (kind) { 1251044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case android.provider.Contacts.KIND_EMAIL: { 1252044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov copyCommonFields(values, Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.LABEL, 1253044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Data.DATA14); 1254044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Email.DATA, values, ContactMethods.DATA); 1255044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1256044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1257044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1258044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case android.provider.Contacts.KIND_IM: { 1259044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov String protocol = values.getAsString(ContactMethods.DATA); 1260044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (protocol.startsWith("pre:")) { 1261044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Im.PROTOCOL, Integer.parseInt(protocol.substring(4))); 1262044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } else if (protocol.startsWith("custom:")) { 1263044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); 1264044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Im.CUSTOM_PROTOCOL, protocol.substring(7)); 1265044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1266044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1267044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov copyCommonFields(values, Im.CONTENT_ITEM_TYPE, Im.TYPE, Im.LABEL, Data.DATA14); 1268044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1269044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1270044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1271044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case android.provider.Contacts.KIND_POSTAL: { 1272044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov copyCommonFields(values, StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE, 1273044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov StructuredPostal.LABEL, Data.DATA14); 1274044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, StructuredPostal.FORMATTED_ADDRESS, values, 1275044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.DATA); 1276044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1277044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1278044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1279044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1280044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1281044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void copyCommonFields(ContentValues values, String mimeType, String typeColumn, 1282044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov String labelColumn, String auxDataColumn) { 1283044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.put(Data.MIMETYPE, mimeType); 1284044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyLongValue(mValues, typeColumn, values, ContactMethods.TYPE); 1285044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, labelColumn, values, ContactMethods.LABEL); 1286044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, auxDataColumn, values, ContactMethods.AUX_DATA); 1287044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1288044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1289044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parseGroupValues(ContentValues values) { 1290044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1291044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1292044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.TITLE, 1293044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Groups.NAME); 1294044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.NOTES, 1295044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Groups.NOTES); 1296044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, Groups.SYSTEM_ID, 1297044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.Groups.SYSTEM_ID); 1298044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1299044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1300044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void parseExtensionValues(ContentValues values) { 1301044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.NAME, 1302044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.NAME); 1303044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov OpenHelper.copyStringValue(mValues, ExtensionsColumns.VALUE, 1304044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values, android.provider.Contacts.People.Extensions.VALUE); 1305c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov } 1306c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 130767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private Uri findFirstDataRow(long rawContactId, String contentItemType) { 130867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long dataId = findFirstDataId(rawContactId, contentItemType); 130967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (dataId == -1) { 131067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return null; 131167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 131267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 131367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 131467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 131567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 131667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private long findFirstDataId(long rawContactId, String mimeType) { 131767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long dataId = -1; 131867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Cursor c = mContactsProvider.query(Data.CONTENT_URI, IdQuery.COLUMNS, 131967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Data.RAW_CONTACT_ID + "=" + rawContactId + " AND " 132067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov + Data.MIMETYPE + "='" + mimeType + "'", 132167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov null, null); 132267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov try { 132367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov if (c.moveToFirst()) { 132467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov dataId = c.getLong(IdQuery._ID); 132567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 132667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } finally { 132767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov c.close(); 132867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 132967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov return dataId; 133067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 133167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 1332044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 13333cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public int delete(Uri uri, String selection, String[] selectionArgs) { 1334044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Cursor c = query(uri, IdQuery.COLUMNS, selection, selectionArgs, null, null); 1335044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov if (c == null) { 1336044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return 0; 1337044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1338044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1339044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov int count = 0; 1340044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov try { 1341044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov while (c.moveToNext()) { 1342044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long id = c.getLong(IdQuery._ID); 1343044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count += delete(uri, id); 1344044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1345044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } finally { 1346044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov c.close(); 1347044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1348044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1349044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov return count; 1350044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 1351044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1352044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public int delete(Uri uri, long id) { 13533cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov final int match = sUriMatcher.match(uri); 13543cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov int count = 0; 13553cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov switch (match) { 1356044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PEOPLE: 135733b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case PEOPLE_ID: 135833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov count = mContactsProvider.deleteRawContact(ContentUris.parseId(uri), false); 135933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov break; 136033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 1361044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PEOPLE_PHOTO: 1362044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.clear(); 1363044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mValues.putNull(android.provider.Contacts.Photos.DATA); 1364044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov updatePhoto(id, mValues); 1365044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1366044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1367044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case ORGANIZATIONS: 13683cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 1369e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1370e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov ORGANIZATION_MIME_TYPES); 1371e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1372e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1373044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case CONTACTMETHODS: 1374e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 1375e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1376e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov CONTACT_METHOD_MIME_TYPES); 1377e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1378e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1379044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1380044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHONES: 1381e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 1382e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1383e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov PHONE_MIME_TYPES); 13843cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 13853cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 1386044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case EXTENSIONS: 1387044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case EXTENSIONS_ID: 1388044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1389044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov EXTENSION_MIME_TYPES); 1390044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1391044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1392044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHOTOS: 1393044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHOTOS_ID: 1394044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov count = mContactsProvider.deleteData(ContentUris.parseId(uri), 1395044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov PHOTO_MIME_TYPES); 1396044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1397044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1398044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 13993cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov default: 14003cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov throw new UnsupportedOperationException("Unknown uri: " + uri); 14013cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 14023cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 14033cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov return count; 14043cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov } 14053cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 1406f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 1407c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String sortOrder, String limit) { 1408caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov ensureDefaultAccount(); 1409caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 1410f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 1411f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 1412f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov String groupBy = null; 1413f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1414f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final int match = sUriMatcher.match(uri); 1415f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov switch (match) { 1416f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE: { 141770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1418f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 141967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1420f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1421f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1422f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1423f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov case PEOPLE_ID: 142470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1425f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 142667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1427caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov qb.appendWhere(" AND " + People._ID + "="); 1428f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1429f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov break; 1430f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1431445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov case PEOPLE_FILTER: { 1432445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setTables(LegacyTables.PEOPLE_JOIN_PRESENCE); 1433445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov qb.setProjectionMap(sPeopleProjectionMap); 143467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1435445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov String filterParam = uri.getPathSegments().get(2); 1436caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov qb.appendWhere(" AND " + People._ID + " IN " 14375ef0401c311c62e53bde415b99cbb0ff83b0a9a2Dmitri Plotnikov + mContactsProvider.getRawContactsByFilterAsNestedQuery(filterParam)); 1438445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov break; 1439445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov } 1440445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov 14413cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS: 14425dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS + " organizations"); 1443d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 144467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 14453cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 14463cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 14473cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov case ORGANIZATIONS_ID: 14485dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.ORGANIZATIONS + " organizations"); 14493cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.setProjectionMap(sOrganizationProjectionMap); 145067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1451d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Organizations._ID + "="); 1452e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1453e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1454e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1455e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS: 14565dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS + " contact_methods"); 1457d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 145867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1459e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1460e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1461e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case CONTACTMETHODS_ID: 14625dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS + " contact_methods"); 1463e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 146467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1465d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1466e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1467e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1468e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1469bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov case CONTACTMETHODS_EMAIL: 1470bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS + " contact_methods"); 1471bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 1472bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov applyRawContactsAccount(qb); 1473bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + "=" 1474bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov + android.provider.Contacts.KIND_EMAIL); 1475bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov break; 1476bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov 1477e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS: 14785dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS + " contact_methods"); 1479e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 148067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1481d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1482e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1483e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1484e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1485e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1486e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_CONTACTMETHODS_ID: 14875dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.CONTACT_METHODS + " contact_methods"); 1488e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sContactMethodProjectionMap); 148967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1490d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.PERSON_ID + "="); 1491e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1492d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + ContactMethods._ID + "="); 1493e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 1494e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(" AND " + ContactMethods.KIND + " IS NOT NULL"); 1495e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1496e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1497e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES: 14985dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHONES + " phones"); 1499d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 150067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1501e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1502e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1503e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PHONES_ID: 15045dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHONES + " phones"); 1505e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 150667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1507d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1508e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1509e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1510e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1511fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov case PHONES_FILTER: 15125dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHONES + " phones"); 1513fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 151467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1515fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov if (uri.getPathSegments().size() > 2) { 1516fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov String filterParam = uri.getLastPathSegment(); 1517e3eb7ef438010c893c429f3031dcc7298171865dDmitri Plotnikov qb.appendWhere(" AND person ="); 1518e3eb7ef438010c893c429f3031dcc7298171865dDmitri Plotnikov qb.appendWhere(mOpenHelper.buildPhoneLookupAsNestedQuery(filterParam)); 1519fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov } 1520fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov break; 1521fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 1522e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES: 15235dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHONES + " phones"); 1524e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 152567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1526d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 1527e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1528e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov break; 1529e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 1530e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov case PEOPLE_PHONES_ID: 15315dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHONES + " phones"); 1532e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.setProjectionMap(sPhoneProjectionMap); 153367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1534d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones.PERSON_ID + "="); 15353cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1536d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Phones._ID + "="); 1537e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 15383cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov break; 15393cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov 15400f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS: 15415dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS + " extensions"); 1542d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 154367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 15440f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15450f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15460f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case EXTENSIONS_ID: 15475dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS + " extensions"); 15480f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 154967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1550d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 15510f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 15520f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15530f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15540f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS: 15555dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS + " extensions"); 15560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 155767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1558d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 15590f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 15600f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15610f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15620f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_EXTENSIONS_ID: 15635dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.EXTENSIONS + " extensions"); 15640f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sExtensionProjectionMap); 156567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1566d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions.PERSON_ID + "="); 15670f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1568d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Extensions._ID + "="); 15690f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 15700f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15710f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15720f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS: 15735dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUPS + " groups"); 15740f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 157567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyGroupAccount(qb); 15760f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15770f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15780f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPS_ID: 15795dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUPS + " groups"); 15800f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupProjectionMap); 158167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyGroupAccount(qb); 1582caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Groups._ID + "="); 15830f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 15840f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15850f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15860f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP: 15875dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP + " groupmembership"); 1588d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 158967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 15900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15910f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 15920f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case GROUPMEMBERSHIP_ID: 15935dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP + " groupmembership"); 15940f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 159567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1596d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 15970f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 15980f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 15990f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 16000f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP: 16015dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP + " groupmembership"); 16020f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 160367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1604d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 16050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 16060f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 16070f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 16080f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov case PEOPLE_GROUPMEMBERSHIP_ID: 16095dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.GROUP_MEMBERSHIP + " groupmembership"); 16100f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.setProjectionMap(sGroupMembershipProjectionMap); 161167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1612d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership.PERSON_ID + "="); 16130f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1614d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.GroupMembership._ID + "="); 16150f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(3)); 16160f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov break; 16170f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov 1618c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov case PEOPLE_PHOTO: 16195dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov qb.setTables(LegacyTables.PHOTOS + " photos"); 1620c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.setProjectionMap(sPhotoProjectionMap); 162167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov applyRawContactsAccount(qb); 1622c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Photos.PERSON_ID + "="); 1623c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1624c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov limit = "1"; 1625c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov break; 1626c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov 1627044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHOTOS: 1628044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.setTables(LegacyTables.PHOTOS + " photos"); 1629044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.setProjectionMap(sPhotoProjectionMap); 1630044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov applyRawContactsAccount(qb); 1631044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1632044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1633044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov case PHOTOS_ID: 1634044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.setTables(LegacyTables.PHOTOS + " photos"); 1635044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.setProjectionMap(sPhotoProjectionMap); 1636044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov applyRawContactsAccount(qb); 1637044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.appendWhere(" AND " + android.provider.Contacts.Photos._ID + "="); 1638044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov qb.appendWhere(uri.getPathSegments().get(1)); 1639044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov break; 1640044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 1641c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov case SEARCH_SUGGESTIONS: 1642c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 1643c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // No legacy compatibility for search suggestions 1644a908fb5f39aa2021662a6cc317cc7e4db2d8bfb0Dmitri Plotnikov return mGlobalSearchSupport.handleSearchSuggestionsQuery(db, uri, limit); 1645c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 1646b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov case SEARCH_SHORTCUT: { 1647b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov long contactId = ContentUris.parseId(uri); 1648b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov return mGlobalSearchSupport.handleSearchShortcutRefresh(db, contactId, projection); 1649b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov } 1650b3f909fee75cb384fc381ec5ce70dd001669f945Dmitri Plotnikov 16511b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case LIVE_FOLDERS_PEOPLE: 16521b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov return mContactsProvider.query(LIVE_FOLDERS_CONTACTS_URI, 16531b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov projection, selection, selectionArgs, sortOrder); 16541b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 16551b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case LIVE_FOLDERS_PEOPLE_WITH_PHONES: 16561b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov return mContactsProvider.query(LIVE_FOLDERS_CONTACTS_WITH_PHONES_URI, 16571b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov projection, selection, selectionArgs, sortOrder); 16581b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 16591b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case LIVE_FOLDERS_PEOPLE_FAVORITES: 16601b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov return mContactsProvider.query(LIVE_FOLDERS_CONTACTS_FAVORITES_URI, 16611b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov projection, selection, selectionArgs, sortOrder); 16621b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 16631b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case LIVE_FOLDERS_PEOPLE_GROUP_NAME: 16641b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov return mContactsProvider.query(Uri.withAppendedPath(LIVE_FOLDERS_CONTACTS_URI, 16651b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov Uri.encode(uri.getLastPathSegment())), 16661b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov projection, selection, selectionArgs, sortOrder); 16671b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov 166833b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_PEOPLE: 166933b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov case DELETED_GROUPS: 167033b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov throw new UnsupportedOperationException(); 167133b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov 1672f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov default: 1673f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov throw new IllegalArgumentException("Unknown URL " + uri); 1674f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1675f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 1676f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // Perform the query and set the notification uri 1677f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov final Cursor c = qb.query(db, projection, selection, selectionArgs, 1678f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov groupBy, null, sortOrder, limit); 1679f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov if (c != null) { 16803fe48cf2c81f6e89b78e919661e2b0b828a2144eDmitri Plotnikov c.setNotificationUri(mContext.getContentResolver(), 16813fe48cf2c81f6e89b78e919661e2b0b828a2144eDmitri Plotnikov android.provider.Contacts.CONTENT_URI); 1682f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1683f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return c; 1684f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 1685f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 168667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private void applyRawContactsAccount(SQLiteQueryBuilder qb) { 1687caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov StringBuilder sb = new StringBuilder(); 168867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov appendRawContactsAccount(sb); 168967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov qb.appendWhere(sb.toString()); 169067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 169167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 169267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private void appendRawContactsAccount(StringBuilder sb) { 1693caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov sb.append(RawContacts.ACCOUNT_NAME + "="); 1694df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana DatabaseUtils.appendEscapedSQLString(sb, mAccount.name); 1695caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov sb.append(" AND " + RawContacts.ACCOUNT_TYPE + "="); 1696df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana DatabaseUtils.appendEscapedSQLString(sb, mAccount.type); 1697caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov } 1698caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 169967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private void applyGroupAccount(SQLiteQueryBuilder qb) { 1700caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov StringBuilder sb = new StringBuilder(); 170167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov appendGroupAccount(sb); 170267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov qb.appendWhere(sb.toString()); 170367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 170467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 170567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private void appendGroupAccount(StringBuilder sb) { 1706caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov sb.append(Groups.ACCOUNT_NAME + "="); 1707df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana DatabaseUtils.appendEscapedSQLString(sb, mAccount.name); 1708caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov sb.append(" AND " + Groups.ACCOUNT_TYPE + "="); 1709df9fd6b239de5829b04cb413e4dfa3e6da649c38Fred Quintana DatabaseUtils.appendEscapedSQLString(sb, mAccount.type); 1710caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov } 1711caa1cf4ef062f163ac5e370cebc0e47b5ae7460eDmitri Plotnikov 1712f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov /** 1713f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * Called when a change has been made. 1714f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * 1715f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov * @param uri the uri that the change was made to 1716f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov */ 1717f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private void onChange(Uri uri) { 1718f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov mContext.getContentResolver().notifyChange(android.provider.Contacts.CONTENT_URI, null); 1719f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov } 172061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 172161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov public String getType(Uri uri) { 172261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov int match = sUriMatcher.match(uri); 172361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov switch (match) { 172461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case EXTENSIONS: 172561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_EXTENSIONS: 172661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return Extensions.CONTENT_TYPE; 172761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case EXTENSIONS_ID: 172861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_EXTENSIONS_ID: 172961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return Extensions.CONTENT_ITEM_TYPE; 173061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE: 173161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/person"; 173261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_ID: 173361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/person"; 173461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_PHONES: 173561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/phone"; 173661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_PHONES_ID: 173761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/phone"; 173861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_CONTACTMETHODS: 173961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/contact-methods"; 174061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_CONTACTMETHODS_ID: 174161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return getContactMethodType(uri); 174261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PHONES: 174361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/phone"; 174461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PHONES_ID: 174561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/phone"; 174661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PHONES_FILTER: 174761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/phone"; 174861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PHOTOS_ID: 174961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/photo"; 175061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PHOTOS: 175161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/photo"; 175261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case PEOPLE_PHOTO: 175361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/photo"; 175461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case CONTACTMETHODS: 175561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/contact-methods"; 175661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case CONTACTMETHODS_ID: 175761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return getContactMethodType(uri); 175861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case ORGANIZATIONS: 175961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.dir/organizations"; 176061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case ORGANIZATIONS_ID: 176161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return "vnd.android.cursor.item/organization"; 176261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case SEARCH_SUGGESTIONS: 176361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return SearchManager.SUGGEST_MIME_TYPE; 176461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov case SEARCH_SHORTCUT: 176561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return SearchManager.SHORTCUT_MIME_TYPE; 176661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov default: 176761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov throw new IllegalArgumentException("Unknown URI"); 176861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 176961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 177061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 177161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov private String getContactMethodType(Uri url) { 177261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov String mime = null; 177361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 177461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov Cursor c = query(url, new String[] {ContactMethods.KIND}, null, null, null, null); 177561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov if (c != null) { 177661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov try { 177761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov if (c.moveToFirst()) { 177861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov int kind = c.getInt(0); 177961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov switch (kind) { 17801b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case android.provider.Contacts.KIND_EMAIL: 178161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov mime = "vnd.android.cursor.item/email"; 178261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov break; 178361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 17841b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case android.provider.Contacts.KIND_IM: 178561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov mime = "vnd.android.cursor.item/jabber-im"; 178661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov break; 178761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 17881b7a7947242bb3b8caaed871775e62d486144c9fDmitri Plotnikov case android.provider.Contacts.KIND_POSTAL: 178961efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov mime = "vnd.android.cursor.item/postal-address"; 179061efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov break; 179161efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 179261efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 179361efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } finally { 179461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov c.close(); 179561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 179661efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 179761efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov return mime; 179861efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov } 1799f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov} 1800