1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License 15 */ 16 package com.android.providers.contacts; 17 18 import android.content.ContentValues; 19 import android.content.Context; 20 import android.database.Cursor; 21 import android.database.sqlite.SQLiteDatabase; 22 import android.provider.ContactsContract.CommonDataKinds.Nickname; 23 import android.text.TextUtils; 24 import com.android.providers.contacts.SearchIndexManager.IndexBuilder; 25 import com.android.providers.contacts.aggregation.AbstractContactAggregator; 26 27 /** 28 * Handler for nickname data rows. 29 */ 30 public class DataRowHandlerForNickname extends DataRowHandlerForCommonDataKind { 31 32 public DataRowHandlerForNickname(Context context, ContactsDatabaseHelper dbHelper, 33 AbstractContactAggregator aggregator) { 34 super(context, dbHelper, aggregator, Nickname.CONTENT_ITEM_TYPE, Nickname.TYPE, 35 Nickname.LABEL); 36 } 37 38 @Override 39 public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId, 40 ContentValues values) { 41 String nickname = values.getAsString(Nickname.NAME); 42 43 long dataId = super.insert(db, txContext, rawContactId, values); 44 45 if (!TextUtils.isEmpty(nickname)) { 46 fixRawContactDisplayName(db, txContext, rawContactId); 47 mDbHelper.insertNameLookupForNickname(rawContactId, dataId, nickname); 48 triggerAggregation(txContext, rawContactId); 49 } 50 return dataId; 51 } 52 53 @Override 54 public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values, 55 Cursor c, boolean callerIsSyncAdapter, boolean callerIsMetadataSyncAdapter) { 56 long dataId = c.getLong(DataUpdateQuery._ID); 57 long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID); 58 59 if (!super.update(db, txContext, values, c, callerIsSyncAdapter, callerIsMetadataSyncAdapter)) { 60 return false; 61 } 62 63 if (values.containsKey(Nickname.NAME)) { 64 String nickname = values.getAsString(Nickname.NAME); 65 mDbHelper.deleteNameLookup(dataId); 66 mDbHelper.insertNameLookupForNickname(rawContactId, dataId, nickname); 67 fixRawContactDisplayName(db, txContext, rawContactId); 68 triggerAggregation(txContext, rawContactId); 69 } 70 71 return true; 72 } 73 74 @Override 75 public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) { 76 long dataId = c.getLong(DataDeleteQuery._ID); 77 long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID); 78 79 int count = super.delete(db, txContext, c); 80 81 mDbHelper.deleteNameLookup(dataId); 82 fixRawContactDisplayName(db, txContext, rawContactId); 83 triggerAggregation(txContext, rawContactId); 84 return count; 85 } 86 87 @Override 88 public boolean containsSearchableColumns(ContentValues values) { 89 return values.containsKey(Nickname.NAME); 90 } 91 92 @Override 93 public void appendSearchableData(IndexBuilder builder) { 94 builder.appendNameFromColumn(Nickname.NAME); 95 builder.appendContentFromColumn(Nickname.NAME); 96 } 97 } 98