DataRowHandlerForOrganization.java revision f6d4922f664127d0455b45b1f7444c4553581282
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;
19f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
20f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.content.ContentValues;
21f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.Cursor;
22f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.DatabaseUtils;
23f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.database.sqlite.SQLiteDatabase;
24f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Organization;
25f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovimport android.provider.ContactsContract.Data;
26f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
27f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov/**
28f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov * Handler for organization data rows.
29f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov */
30f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikovpublic class DataRowHandlerForOrganization extends DataRowHandlerForCommonDataKind {
31f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
32f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public DataRowHandlerForOrganization(ContactsDatabaseHelper dbHelper,
33f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            ContactAggregator aggregator) {
34f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        super(dbHelper, aggregator,
35f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                Organization.CONTENT_ITEM_TYPE, Organization.TYPE, Organization.LABEL);
36f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
37f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
38f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
39f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId,
40f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            ContentValues values) {
41f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        String company = values.getAsString(Organization.COMPANY);
42f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        String title = values.getAsString(Organization.TITLE);
43f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
44f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long dataId = super.insert(db, txContext, rawContactId, values);
45f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
46f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        fixRawContactDisplayName(db, txContext, rawContactId);
47f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        mDbHelper.insertNameLookupForOrganization(rawContactId, dataId, company, title);
48f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        return dataId;
49f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
50f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
51f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
52f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values,
53f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            Cursor c, boolean callerIsSyncAdapter) {
54f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        if (!super.update(db, txContext, values, c, callerIsSyncAdapter)) {
55f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            return false;
56f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        }
57f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
58f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        boolean containsCompany = values.containsKey(Organization.COMPANY);
59f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        boolean containsTitle = values.containsKey(Organization.TITLE);
60f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        if (containsCompany || containsTitle) {
61f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            long dataId = c.getLong(DataUpdateQuery._ID);
62f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID);
63f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
64f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            String company;
65f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
66f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            if (containsCompany) {
67f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                company = values.getAsString(Organization.COMPANY);
68f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            } else {
69f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                mSelectionArgs1[0] = String.valueOf(dataId);
70f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                company = DatabaseUtils.stringForQuery(db,
71f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        "SELECT " + Organization.COMPANY +
72f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " FROM " + Tables.DATA +
73f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
74f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            }
75f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
76f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            String title;
77f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            if (containsTitle) {
78f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                title = values.getAsString(Organization.TITLE);
79f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            } else {
80f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                mSelectionArgs1[0] = String.valueOf(dataId);
81f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                title = DatabaseUtils.stringForQuery(db,
82f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        "SELECT " + Organization.TITLE +
83f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " FROM " + Tables.DATA +
84f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
85f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            }
86f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
87f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            mDbHelper.deleteNameLookup(dataId);
88f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            mDbHelper.insertNameLookupForOrganization(rawContactId, dataId, company, title);
89f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
90f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            fixRawContactDisplayName(db, txContext, rawContactId);
91f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        }
92f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        return true;
93f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
94f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
95f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
96f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) {
97f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long dataId = c.getLong(DataUpdateQuery._ID);
98f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID);
99f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
100f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        int count = super.delete(db, txContext, c);
101f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        fixRawContactDisplayName(db, txContext, rawContactId);
102f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        mDbHelper.deleteNameLookup(dataId);
103f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        return count;
104f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
105f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov
106f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    @Override
107f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    protected int getTypeRank(int type) {
108f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        switch (type) {
109f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_WORK: return 0;
110f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_CUSTOM: return 1;
111f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            case Organization.TYPE_OTHER: return 2;
112f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov            default: return 1000;
113f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov        }
114f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov    }
115f6d4922f664127d0455b45b1f7444c4553581282Dmitri Plotnikov}
116