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