diff options
author | Dmitri Plotnikov <dplotnikov@google.com> | 2010-12-01 09:20:18 -0800 |
---|---|---|
committer | Dmitri Plotnikov <dplotnikov@google.com> | 2010-12-01 09:20:18 -0800 |
commit | f6d4922f664127d0455b45b1f7444c4553581282 (patch) | |
tree | 4c91d53413e74adad937b5b59d9f3c6541cfa8dc /src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java | |
parent | 5df7e46835c4f103b05407660b4769edd515760f (diff) | |
download | packages_providers_ContactsProvider-f6d4922f664127d0455b45b1f7444c4553581282.zip packages_providers_ContactsProvider-f6d4922f664127d0455b45b1f7444c4553581282.tar.gz packages_providers_ContactsProvider-f6d4922f664127d0455b45b1f7444c4553581282.tar.bz2 |
Extracting DataRowHandler classes to the top level
Change-Id: Ica84da28a01a9c1b3c19967ab8cb154d796812c2
Diffstat (limited to 'src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java')
-rw-r--r-- | src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java b/src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java new file mode 100644 index 0000000..af60e48 --- /dev/null +++ b/src/com/android/providers/contacts/DataRowHandlerForStructuredPostal.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License + */ +package com.android.providers.contacts; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; +import android.text.TextUtils; + +/** + * Handler for postal address data rows. + */ +public class DataRowHandlerForStructuredPostal extends DataRowHandler { + + /** + * Specific list of structured fields. + */ + private final String[] STRUCTURED_FIELDS = new String[] { + StructuredPostal.STREET, + StructuredPostal.POBOX, + StructuredPostal.NEIGHBORHOOD, + StructuredPostal.CITY, + StructuredPostal.REGION, + StructuredPostal.POSTCODE, + StructuredPostal.COUNTRY, + }; + + private final PostalSplitter mSplitter; + + public DataRowHandlerForStructuredPostal(ContactsDatabaseHelper dbHelper, + ContactAggregator aggregator, PostalSplitter splitter) { + super(dbHelper, aggregator, StructuredPostal.CONTENT_ITEM_TYPE); + mSplitter = splitter; + } + + @Override + public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId, + ContentValues values) { + fixStructuredPostalComponents(values, values); + return super.insert(db, txContext, rawContactId, values); + } + + @Override + public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values, + Cursor c, boolean callerIsSyncAdapter) { + final long dataId = c.getLong(DataUpdateQuery._ID); + final ContentValues augmented = getAugmentedValues(db, dataId, values); + if (augmented == null) { // No change + return false; + } + + fixStructuredPostalComponents(augmented, values); + super.update(db, txContext, values, c, callerIsSyncAdapter); + return true; + } + + /** + * Prepares the given {@link StructuredPostal} row, building + * {@link StructuredPostal#FORMATTED_ADDRESS} to match the structured + * values when missing. When structured components are missing, the + * unstructured value is assigned to {@link StructuredPostal#STREET}. + */ + private void fixStructuredPostalComponents(ContentValues augmented, ContentValues update) { + final String unstruct = update.getAsString(StructuredPostal.FORMATTED_ADDRESS); + + final boolean touchedUnstruct = !TextUtils.isEmpty(unstruct); + final boolean touchedStruct = !areAllEmpty(update, STRUCTURED_FIELDS); + + final PostalSplitter.Postal postal = new PostalSplitter.Postal(); + + if (touchedUnstruct && !touchedStruct) { + mSplitter.split(postal, unstruct); + postal.toValues(update); + } else if (!touchedUnstruct + && (touchedStruct || areAnySpecified(update, STRUCTURED_FIELDS))) { + // See comment in + postal.fromValues(augmented); + final String joined = mSplitter.join(postal); + update.put(StructuredPostal.FORMATTED_ADDRESS, joined); + } + } +} |