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