Home | History | Annotate | Download | only in contacts
      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.Email;
     23 
     24 import com.android.providers.contacts.SearchIndexManager.IndexBuilder;
     25 import com.android.providers.contacts.aggregation.ContactAggregator;
     26 
     27 /**
     28  * Handler for email address data rows.
     29  */
     30 public class DataRowHandlerForEmail extends DataRowHandlerForCommonDataKind {
     31 
     32     public DataRowHandlerForEmail(
     33             Context context, ContactsDatabaseHelper dbHelper, ContactAggregator aggregator) {
     34         super(context, dbHelper, aggregator, Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.LABEL);
     35     }
     36 
     37     @Override
     38     public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId,
     39             ContentValues values) {
     40         String email = values.getAsString(Email.DATA);
     41 
     42         long dataId = super.insert(db, txContext, rawContactId, values);
     43 
     44         fixRawContactDisplayName(db, txContext, rawContactId);
     45         String address = mDbHelper.insertNameLookupForEmail(rawContactId, dataId, email);
     46         if (address != null) {
     47             triggerAggregation(txContext, rawContactId);
     48         }
     49         return dataId;
     50     }
     51 
     52     @Override
     53     public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values,
     54             Cursor c, boolean callerIsSyncAdapter) {
     55         if (!super.update(db, txContext, values, c, callerIsSyncAdapter)) {
     56             return false;
     57         }
     58 
     59         if (values.containsKey(Email.DATA)) {
     60             long dataId = c.getLong(DataUpdateQuery._ID);
     61             long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID);
     62 
     63             String address = values.getAsString(Email.DATA);
     64             mDbHelper.deleteNameLookup(dataId);
     65             mDbHelper.insertNameLookupForEmail(rawContactId, dataId, address);
     66             fixRawContactDisplayName(db, txContext, rawContactId);
     67             triggerAggregation(txContext, rawContactId);
     68         }
     69 
     70         return true;
     71     }
     72 
     73     @Override
     74     public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) {
     75         long dataId = c.getLong(DataDeleteQuery._ID);
     76         long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID);
     77 
     78         int count = super.delete(db, txContext, c);
     79 
     80         mDbHelper.deleteNameLookup(dataId);
     81         fixRawContactDisplayName(db, txContext, rawContactId);
     82         triggerAggregation(txContext, rawContactId);
     83         return count;
     84     }
     85 
     86     @Override
     87     protected int getTypeRank(int type) {
     88         switch (type) {
     89             case Email.TYPE_HOME: return 0;
     90             case Email.TYPE_WORK: return 1;
     91             case Email.TYPE_CUSTOM: return 2;
     92             case Email.TYPE_OTHER: return 3;
     93             default: return 1000;
     94         }
     95     }
     96 
     97     @Override
     98     public boolean containsSearchableColumns(ContentValues values) {
     99         return values.containsKey(Email.ADDRESS);
    100     }
    101 
    102     @Override
    103     public void appendSearchableData(IndexBuilder builder) {
    104         builder.appendContentFromColumn(Email.ADDRESS);
    105     }
    106 }
    107