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