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 com.android.providers.contacts.ContactsDatabaseHelper.Tables;
19f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikovimport com.android.providers.contacts.SearchIndexManager.IndexBuilder;
20f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
21f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.content.ContentValues;
226d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikovimport android.content.Context;
23f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.Cursor;
24f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.DatabaseUtils;
25f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.sqlite.SQLiteDatabase;
26f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Organization;
27f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.provider.ContactsContract.Data;
28f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
29f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov/**
30f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Handler for organization data rows.
31f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov */
32f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovpublic class DataRowHandlerForOrganization extends DataRowHandlerForCommonDataKind {
33f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
346d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikov    public DataRowHandlerForOrganization(Context context, ContactsDatabaseHelper dbHelper,
35f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            ContactAggregator aggregator) {
366d9702cec82fd27a1c3093c64df9dcc22744899aDmitri Plotnikov        super(context, dbHelper, aggregator,
37f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                Organization.CONTENT_ITEM_TYPE, Organization.TYPE, Organization.LABEL);
38f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
39f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
40f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
41f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId,
42f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            ContentValues values) {
43f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        String company = values.getAsString(Organization.COMPANY);
44f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        String title = values.getAsString(Organization.TITLE);
45f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
46f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long dataId = super.insert(db, txContext, rawContactId, values);
47f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
48f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        fixRawContactDisplayName(db, txContext, rawContactId);
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        boolean containsCompany = values.containsKey(Organization.COMPANY);
60f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        boolean containsTitle = values.containsKey(Organization.TITLE);
61f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        if (containsCompany || containsTitle) {
62f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            long dataId = c.getLong(DataUpdateQuery._ID);
63f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID);
64f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
65f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            String company;
66f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
67f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            if (containsCompany) {
68f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                company = values.getAsString(Organization.COMPANY);
69f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            } else {
70f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                mSelectionArgs1[0] = String.valueOf(dataId);
71f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                company = DatabaseUtils.stringForQuery(db,
72f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        "SELECT " + Organization.COMPANY +
73f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " FROM " + Tables.DATA +
74f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
75f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            }
76f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
77f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            String title;
78f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            if (containsTitle) {
79f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                title = values.getAsString(Organization.TITLE);
80f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            } else {
81f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                mSelectionArgs1[0] = String.valueOf(dataId);
82f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                title = DatabaseUtils.stringForQuery(db,
83f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        "SELECT " + Organization.TITLE +
84f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " FROM " + Tables.DATA +
85f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
86f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            }
87f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
88f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            mDbHelper.deleteNameLookup(dataId);
89f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            fixRawContactDisplayName(db, txContext, rawContactId);
90f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        }
91f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        return true;
92f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
93f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
94f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
95f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) {
96f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long dataId = c.getLong(DataUpdateQuery._ID);
97f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID);
98f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
99f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        int count = super.delete(db, txContext, c);
100f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        fixRawContactDisplayName(db, txContext, rawContactId);
101f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        mDbHelper.deleteNameLookup(dataId);
102f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        return count;
103f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
104f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
105f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
106f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    protected int getTypeRank(int type) {
107f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        switch (type) {
108f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_WORK: return 0;
109f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_CUSTOM: return 1;
110f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_OTHER: return 2;
111f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            default: return 1000;
112f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        }
113f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
114f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov
115f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    @Override
116f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    public boolean containsSearchableColumns(ContentValues values) {
117f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        return values.containsKey(Organization.COMPANY)
118f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.DEPARTMENT)
119f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.JOB_DESCRIPTION)
120f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.OFFICE_LOCATION)
121f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.PHONETIC_NAME)
122f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.SYMBOL)
123f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                || values.containsKey(Organization.TITLE);
124f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    }
125f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov
126f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    @Override
127f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    public void appendSearchableData(IndexBuilder builder) {
128f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.TITLE);
129f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.COMPANY, IndexBuilder.SEPARATOR_COMMA);
130f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.PHONETIC_NAME,
131f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov                IndexBuilder.SEPARATOR_PARENTHESES);
132f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.SYMBOL, IndexBuilder.SEPARATOR_PARENTHESES);
133f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.DEPARTMENT, IndexBuilder.SEPARATOR_SLASH);
134f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.OFFICE_LOCATION, IndexBuilder.SEPARATOR_SLASH);
135f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov        builder.appendContentFromColumn(Organization.JOB_DESCRIPTION, IndexBuilder.SEPARATOR_SLASH);
136f262d56495ac4ea30d31bd050efb116bd4bb4235Dmitri Plotnikov    }
137f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov}
138