1f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov/* 2f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 3f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * 4f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * use this file except in compliance with the License. You may obtain a copy of 6f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * the License at 7f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * 8f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * 10f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * License for the specific language governing permissions and limitations under 14f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * the License 15f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov */ 16f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovpackage com.android.providers.contacts; 17f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 18f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.content.ContentValues; 196d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikovimport android.content.Context; 20f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.Cursor; 21f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.sqlite.SQLiteDatabase; 22f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email; 23f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 2438210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.android.providers.contacts.SearchIndexManager.IndexBuilder; 2538210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.android.providers.contacts.aggregation.ContactAggregator; 2638210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki 27f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov/** 28f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Handler for email address data rows. 29f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov */ 30f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovpublic class DataRowHandlerForEmail extends DataRowHandlerForCommonDataKind { 31f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 326d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikov public DataRowHandlerForEmail( 336d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikov Context context, ContactsDatabaseHelper dbHelper, ContactAggregator aggregator) { 346d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikov super(context, dbHelper, aggregator, Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.LABEL); 35f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 36f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 37f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov @Override 38f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId, 39f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov ContentValues values) { 40f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov String email = values.getAsString(Email.DATA); 41f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 42f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov long dataId = super.insert(db, txContext, rawContactId, values); 43f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 44f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov fixRawContactDisplayName(db, txContext, rawContactId); 45f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov String address = mDbHelper.insertNameLookupForEmail(rawContactId, dataId, email); 46f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov if (address != null) { 47bd9abbb6b03b4ec1e28ad3fa2fcba5d1eb8609eaDmitri Plotnikov triggerAggregation(txContext, rawContactId); 48f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 49f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov return dataId; 50f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 51f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 52f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov @Override 53f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values, 54f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov Cursor c, boolean callerIsSyncAdapter) { 55f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov if (!super.update(db, txContext, values, c, callerIsSyncAdapter)) { 56f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov return false; 57f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 58f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 59f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov if (values.containsKey(Email.DATA)) { 60f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov long dataId = c.getLong(DataUpdateQuery._ID); 61f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID); 62f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 63f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov String address = values.getAsString(Email.DATA); 64f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov mDbHelper.deleteNameLookup(dataId); 65f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov mDbHelper.insertNameLookupForEmail(rawContactId, dataId, address); 66f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov fixRawContactDisplayName(db, txContext, rawContactId); 67bd9abbb6b03b4ec1e28ad3fa2fcba5d1eb8609eaDmitri Plotnikov triggerAggregation(txContext, rawContactId); 68f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 69f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 70f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov return true; 71f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 72f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 73f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov @Override 74f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) { 75f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov long dataId = c.getLong(DataDeleteQuery._ID); 76f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID); 77f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 78f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov int count = super.delete(db, txContext, c); 79f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 80f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov mDbHelper.deleteNameLookup(dataId); 81f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov fixRawContactDisplayName(db, txContext, rawContactId); 82bd9abbb6b03b4ec1e28ad3fa2fcba5d1eb8609eaDmitri Plotnikov triggerAggregation(txContext, rawContactId); 83f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov return count; 84f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 85f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov 86f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov @Override 87f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov protected int getTypeRank(int type) { 88f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov switch (type) { 89f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov case Email.TYPE_HOME: return 0; 90f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov case Email.TYPE_WORK: return 1; 91f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov case Email.TYPE_CUSTOM: return 2; 92f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov case Email.TYPE_OTHER: return 3; 93f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov default: return 1000; 94f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 95f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov } 96eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov 97eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov @Override 98eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov public boolean containsSearchableColumns(ContentValues values) { 99eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov return values.containsKey(Email.ADDRESS); 100eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov } 101eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov 102eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov @Override 103eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov public void appendSearchableData(IndexBuilder builder) { 104eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov builder.appendContentFromColumn(Email.ADDRESS); 105eeeed5669d98897501bf2b18c88579c7effd0955Dmitri Plotnikov } 106f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov} 107