• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
16 package com.android.providers.contacts;
17 
18 import android.content.ContentValues;
19 import android.content.Context;
20 import android.database.Cursor;
21 import android.database.DatabaseUtils;
22 import android.database.sqlite.SQLiteDatabase;
23 import android.provider.ContactsContract.CommonDataKinds.Organization;
24 import android.provider.ContactsContract.Data;
25 import com.android.providers.contacts.ContactsDatabaseHelper.Tables;
26 import com.android.providers.contacts.SearchIndexManager.IndexBuilder;
27 import com.android.providers.contacts.aggregation.AbstractContactAggregator;
28 
29 /**
30  * Handler for organization data rows.
31  */
32 public class DataRowHandlerForOrganization extends DataRowHandlerForCommonDataKind {
33 
DataRowHandlerForOrganization(Context context, ContactsDatabaseHelper dbHelper, AbstractContactAggregator aggregator)34     public DataRowHandlerForOrganization(Context context, ContactsDatabaseHelper dbHelper,
35             AbstractContactAggregator aggregator) {
36         super(context, dbHelper, aggregator,
37                 Organization.CONTENT_ITEM_TYPE, Organization.TYPE, Organization.LABEL);
38     }
39 
40     @Override
insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId, ContentValues values)41     public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId,
42             ContentValues values) {
43         String company = values.getAsString(Organization.COMPANY);
44         String title = values.getAsString(Organization.TITLE);
45 
46         long dataId = super.insert(db, txContext, rawContactId, values);
47 
48         fixRawContactDisplayName(db, txContext, rawContactId);
49         return dataId;
50     }
51 
52     @Override
update(SQLiteDatabase db, TransactionContext txContext, ContentValues values, Cursor c, boolean callerIsSyncAdapter, boolean callerIsMetadataSyncAdapter)53     public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values,
54             Cursor c, boolean callerIsSyncAdapter, boolean callerIsMetadataSyncAdapter) {
55         if (!super.update(db, txContext, values, c, callerIsSyncAdapter, callerIsMetadataSyncAdapter)) {
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             fixRawContactDisplayName(db, txContext, rawContactId);
90         }
91         return true;
92     }
93 
94     @Override
delete(SQLiteDatabase db, TransactionContext txContext, Cursor c)95     public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) {
96         long dataId = c.getLong(DataUpdateQuery._ID);
97         long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID);
98 
99         int count = super.delete(db, txContext, c);
100         fixRawContactDisplayName(db, txContext, rawContactId);
101         mDbHelper.deleteNameLookup(dataId);
102         return count;
103     }
104 
105     @Override
getTypeRank(int type)106     protected int getTypeRank(int type) {
107         switch (type) {
108             case Organization.TYPE_WORK: return 0;
109             case Organization.TYPE_CUSTOM: return 1;
110             case Organization.TYPE_OTHER: return 2;
111             default: return 1000;
112         }
113     }
114 
115     @Override
containsSearchableColumns(ContentValues values)116     public boolean containsSearchableColumns(ContentValues values) {
117         return values.containsKey(Organization.COMPANY)
118                 || values.containsKey(Organization.DEPARTMENT)
119                 || values.containsKey(Organization.JOB_DESCRIPTION)
120                 || values.containsKey(Organization.OFFICE_LOCATION)
121                 || values.containsKey(Organization.PHONETIC_NAME)
122                 || values.containsKey(Organization.SYMBOL)
123                 || values.containsKey(Organization.TITLE);
124     }
125 
126     @Override
appendSearchableData(IndexBuilder builder)127     public void appendSearchableData(IndexBuilder builder) {
128         builder.appendNameFromColumn(Organization.TITLE);
129         builder.appendNameFromColumn(Organization.COMPANY);
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