diff options
-rw-r--r-- | src/com/android/contacts/activities/ContactBrowserActivity.java | 33 | ||||
-rw-r--r-- | src/com/android/contacts/model/EntityDeltaList.java (renamed from src/com/android/contacts/model/EntitySet.java) | 45 | ||||
-rw-r--r-- | src/com/android/contacts/model/EntityDiff.java | 148 | ||||
-rw-r--r-- | src/com/android/contacts/model/EntityModifier.java | 4 | ||||
-rw-r--r-- | src/com/android/contacts/views/editor/ContactEditorFragment.java | 47 | ||||
-rw-r--r-- | tests/src/com/android/contacts/EntityDeltaListTests.java (renamed from tests/src/com/android/contacts/EntitySetTests.java) | 92 | ||||
-rw-r--r-- | tests/src/com/android/contacts/EntityModifierTests.java | 56 |
7 files changed, 146 insertions, 279 deletions
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java index 569545610..9167a06fd 100644 --- a/src/com/android/contacts/activities/ContactBrowserActivity.java +++ b/src/com/android/contacts/activities/ContactBrowserActivity.java @@ -299,7 +299,7 @@ public class ContactBrowserActivity extends Activity } // No editor here - closeEditorFragment(); + closeEditorFragment(true); if (contactLookupUri != null) { // Already showing? Nothing to do @@ -350,8 +350,14 @@ public class ContactBrowserActivity extends Activity } } - private void closeEditorFragment() { + /** + * Closes the editor, if it is currently open + * @param save Whether the changes should be saved. This should always be true, unless + * this is called from a Revert/Undo button + */ + private void closeEditorFragment(boolean save) { if (mEditorFragment != null) { + if (save) mEditorFragment.save(); mEditorFragment.setListener(null); mEditorFragment = null; } @@ -369,6 +375,14 @@ public class ContactBrowserActivity extends Activity } } + @Override + protected void onPause() { + super.onPause(); + + // if anything was left unsaved, save it now + closeEditorFragment(true); + } + /** * Creates the list fragment for the specified mode. */ @@ -519,22 +533,29 @@ public class ContactBrowserActivity extends Activity private class EditorFragmentListener implements ContactEditorFragment.Listener { @Override public void closeAfterDelete() { - Toast.makeText(ContactBrowserActivity.this, "closeAfterDelete", Toast.LENGTH_LONG).show(); + Toast.makeText(ContactBrowserActivity.this, "closeAfterDelete", + Toast.LENGTH_LONG).show(); } @Override public void closeAfterRevert() { - Toast.makeText(ContactBrowserActivity.this, "closeAfterRevert", Toast.LENGTH_LONG).show(); + final Uri uri = mEditorFragment.getUri(); + closeEditorFragment(false); + setupContactDetailFragment(uri); } @Override public void closeAfterSaving(int resultCode, Intent resultIntent) { - Toast.makeText(ContactBrowserActivity.this, "closeAfterSaving", Toast.LENGTH_LONG).show(); + // it is already saved, so no need to save again here + final Uri uri = mEditorFragment.getUri(); + closeEditorFragment(false); + setupContactDetailFragment(uri); } @Override public void closeAfterSplit() { - Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit", Toast.LENGTH_LONG).show(); + Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit", + Toast.LENGTH_LONG).show(); } @Override diff --git a/src/com/android/contacts/model/EntitySet.java b/src/com/android/contacts/model/EntityDeltaList.java index 0f4d68d95..4323e9a06 100644 --- a/src/com/android/contacts/model/EntitySet.java +++ b/src/com/android/contacts/model/EntityDeltaList.java @@ -38,30 +38,30 @@ import java.util.Iterator; /** * Container for multiple {@link EntityDelta} objects, usually when editing * together as an entire aggregate. Provides convenience methods for parceling - * and applying another {@link EntitySet} over it. + * and applying another {@link EntityDeltaList} over it. */ -public class EntitySet extends ArrayList<EntityDelta> implements Parcelable { +public class EntityDeltaList extends ArrayList<EntityDelta> implements Parcelable { private boolean mSplitRawContacts; - private EntitySet() { + private EntityDeltaList() { } /** - * Create an {@link EntitySet} that contains the given {@link EntityDelta}, + * Create an {@link EntityDeltaList} that contains the given {@link EntityDelta}, * usually when inserting a new {@link Contacts} entry. */ - public static EntitySet fromSingle(EntityDelta delta) { - final EntitySet state = new EntitySet(); + public static EntityDeltaList fromSingle(EntityDelta delta) { + final EntityDeltaList state = new EntityDeltaList(); state.add(delta); return state; } /** - * Create an {@link EntitySet} based on {@link Contacts} specified by the + * Create an {@link EntityDeltaList} based on {@link Contacts} specified by the * given query parameters. This closes the {@link EntityIterator} when * finished, so it doesn't subscribe to updates. */ - public static EntitySet fromQuery(ContentResolver resolver, String selection, + public static EntityDeltaList fromQuery(ContentResolver resolver, String selection, String[] selectionArgs, String sortOrder) { final EntityIterator iterator = RawContacts.newEntityIterator(resolver.query( RawContactsEntity.CONTENT_URI, null, selection, selectionArgs, @@ -74,10 +74,11 @@ public class EntitySet extends ArrayList<EntityDelta> implements Parcelable { } /** - * Create an {@link EntitySet} that contains the entities of the Iterator as before values. + * Create an {@link EntityDeltaList} that contains the entities of the Iterator as before + * values. */ - public static EntitySet fromIterator(Iterator<Entity> iterator) { - final EntitySet state = new EntitySet(); + public static EntityDeltaList fromIterator(Iterator<Entity> iterator) { + final EntityDeltaList state = new EntityDeltaList(); // Perform background query to pull contact details while (iterator.hasNext()) { // Read all contacts into local deltas to prepare for edits @@ -89,12 +90,12 @@ public class EntitySet extends ArrayList<EntityDelta> implements Parcelable { } /** - * Merge the "after" values from the given {@link EntitySet}, discarding any + * Merge the "after" values from the given {@link EntityDeltaList}, discarding any * previous "after" states. This is typically used when re-parenting user - * edits onto an updated {@link EntitySet}. + * edits onto an updated {@link EntityDeltaList}. */ - public static EntitySet mergeAfter(EntitySet local, EntitySet remote) { - if (local == null) local = new EntitySet(); + public static EntityDeltaList mergeAfter(EntityDeltaList local, EntityDeltaList remote) { + if (local == null) local = new EntityDeltaList(); // For each entity in the remote set, try matching over existing for (EntityDelta remoteEntity : remote) { @@ -161,7 +162,8 @@ public class EntitySet extends ArrayList<EntityDelta> implements Parcelable { } else { // Additional insert case, so point at first insert final Builder builder = beginKeepTogether(); - builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, firstInsertRow); + builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, + firstInsertRow); builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch); diff.add(builder.build()); } @@ -331,15 +333,16 @@ public class EntitySet extends ArrayList<EntityDelta> implements Parcelable { } } - public static final Parcelable.Creator<EntitySet> CREATOR = new Parcelable.Creator<EntitySet>() { - public EntitySet createFromParcel(Parcel in) { - final EntitySet state = new EntitySet(); + public static final Parcelable.Creator<EntityDeltaList> CREATOR = + new Parcelable.Creator<EntityDeltaList>() { + public EntityDeltaList createFromParcel(Parcel in) { + final EntityDeltaList state = new EntityDeltaList(); state.readFromParcel(in); return state; } - public EntitySet[] newArray(int size) { - return new EntitySet[size]; + public EntityDeltaList[] newArray(int size) { + return new EntityDeltaList[size]; } }; } diff --git a/src/com/android/contacts/model/EntityDiff.java b/src/com/android/contacts/model/EntityDiff.java deleted file mode 100644 index ea465679c..000000000 --- a/src/com/android/contacts/model/EntityDiff.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2009 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.contacts.model; - -import android.content.ContentProviderOperation; -import android.content.ContentValues; -import android.content.Entity; -import android.content.ContentProviderOperation.Builder; -import android.content.Entity.NamedContentValues; -import android.net.Uri; -import android.provider.BaseColumns; - -import java.util.ArrayList; -import java.util.HashMap; - - -/** - * Describes a set of {@link ContentProviderOperation} that need to be - * executed to transform a database from one {@link Entity} to another. - */ -@Deprecated -public class EntityDiff extends ArrayList<ContentProviderOperation> { - private EntityDiff() { - } - - /** - * Build the set of {@link ContentProviderOperation} needed to translate - * from "before" to "after". Tries its best to keep operations to - * minimal number required. Assumes that all {@link ContentValues} are - * keyed using {@link BaseColumns#_ID} values. - */ - public static EntityDiff buildDiff(Entity before, Entity after, Uri targetUri, - String childForeignKey) { - final EntityDiff diff = new EntityDiff(); - - Builder builder; - ContentValues values; - - if (before == null) { - // Before doesn't exist, so insert "after" values - builder = ContentProviderOperation.newInsert(targetUri); - builder.withValues(after.getEntityValues()); - diff.add(builder.build()); - - for (NamedContentValues child : after.getSubValues()) { - // Add builder with reference to original _id when needed - builder = ContentProviderOperation.newInsert(child.uri); - builder.withValues(child.values); - if (childForeignKey != null) { - builder.withValueBackReference(childForeignKey, 0); - } - diff.add(builder.build()); - } - - } else if (after == null) { - // After doesn't exist, so delete "before" values - for (NamedContentValues child : before.getSubValues()) { - builder = ContentProviderOperation.newDelete(child.uri); - builder.withSelection(getSelectIdClause(child.values), null); - diff.add(builder.build()); - } - - builder = ContentProviderOperation.newDelete(targetUri); - builder.withSelection(getSelectIdClause(before.getEntityValues()), null); - diff.add(builder.build()); - - } else { - // Somewhere between, so update any changed values - values = after.getEntityValues(); - if (!before.getEntityValues().equals(values)) { - // Top-level values changed, so update - builder = ContentProviderOperation.newUpdate(targetUri); - builder.withSelection(getSelectIdClause(values), null); - builder.withValues(values); - diff.add(builder.build()); - } - - // Build lookup maps for children on both sides - final HashMap<String, NamedContentValues> beforeChildren = buildChildrenMap(before); - final HashMap<String, NamedContentValues> afterChildren = buildChildrenMap(after); - - // Walk through "before" children looking for deletes and updates - for (NamedContentValues beforeChild : beforeChildren.values()) { - final String key = buildChildKey(beforeChild); - final NamedContentValues afterChild = afterChildren.get(key); - - if (afterChild == null) { - // After child doesn't exist, so delete "before" child - builder = ContentProviderOperation.newDelete(beforeChild.uri); - builder.withSelection(getSelectIdClause(beforeChild.values), null); - diff.add(builder.build()); - } else if (!beforeChild.values.equals(afterChild.values)) { - // After child still exists, and is different, so update - values = afterChild.values; - builder = ContentProviderOperation.newUpdate(afterChild.uri); - builder.withSelection(getSelectIdClause(values), null); - builder.withValues(values); - diff.add(builder.build()); - } - - // Remove the now-handled "after" child - afterChildren.remove(key); - } - - // Walk through remaining "after" children, which are inserts - for (NamedContentValues afterChild : afterChildren.values()) { - builder = ContentProviderOperation.newInsert(afterChild.uri); - builder.withValues(afterChild.values); - diff.add(builder.build()); - } - } - - return diff; - } - - private static String buildChildKey(NamedContentValues child) { - return child.uri.toString() + child.values.getAsString(BaseColumns._ID); - } - - private static String getSelectIdClause(ContentValues values) { - return BaseColumns._ID + "=" + values.getAsLong(BaseColumns._ID); - } - - private static HashMap<String, NamedContentValues> buildChildrenMap(Entity entity) { - final ArrayList<NamedContentValues> children = entity.getSubValues(); - final HashMap<String, NamedContentValues> childrenMap = new HashMap<String, NamedContentValues>( - children.size()); - for (NamedContentValues child : children) { - final String key = buildChildKey(child); - childrenMap.put(key, child); - } - return childrenMap; - } -} diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java index 2e6899eee..37267ec68 100644 --- a/src/com/android/contacts/model/EntityModifier.java +++ b/src/com/android/contacts/model/EntityModifier.java @@ -348,11 +348,11 @@ public class EntityModifier { /** * Processing to trim any empty {@link ValuesDelta} and {@link EntityDelta} - * from the given {@link EntitySet}, assuming the given {@link Sources} + * from the given {@link EntityDeltaList}, assuming the given {@link Sources} * dictates the structure for various fields. This method ignores rows not * described by the {@link ContactsSource}. */ - public static void trimEmpty(EntitySet set, Sources sources) { + public static void trimEmpty(EntityDeltaList set, Sources sources) { for (EntityDelta state : set) { final String accountType = state.getValues().getAsString(RawContacts.ACCOUNT_TYPE); final ContactsSource source = sources.getInflatedSource(accountType, diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java index acde05c69..695e989db 100644 --- a/src/com/android/contacts/views/editor/ContactEditorFragment.java +++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java @@ -22,7 +22,7 @@ import com.android.contacts.model.ContactsSource; import com.android.contacts.model.Editor; import com.android.contacts.model.EntityDelta; import com.android.contacts.model.EntityModifier; -import com.android.contacts.model.EntitySet; +import com.android.contacts.model.EntityDeltaList; import com.android.contacts.model.GoogleSource; import com.android.contacts.model.Sources; import com.android.contacts.model.ContactsSource.EditType; @@ -40,7 +40,6 @@ import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.LoaderManagingFragment; -import android.app.ProgressDialog; import android.content.ActivityNotFoundException; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; @@ -84,20 +83,12 @@ import android.widget.TextView; import android.widget.Toast; import java.io.File; -import java.lang.ref.WeakReference; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; -//Here are the open TODOs for the Fragment transition -//TODO How to save data? Service? -//TODO Do account-list lookup always in a thread -//TODO Cleanup state handling (orientation changes etc). -//TODO Cleanup the load function. It can currenlty also do insert, which is awkward -//TODO Watch for background changes...How? - public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader.Result> { private static final String TAG = "ContactEditorFragment"; @@ -144,7 +135,7 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. private long mContactIdForJoin; private LinearLayout mContent; - private EntitySet mState; + private EntityDeltaList mState; private ViewIdGenerator mViewIdGenerator; @@ -228,7 +219,7 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. mViewIdGenerator = new ViewIdGenerator(); } else { // Read modifications from instance - mState = savedState.<EntitySet> getParcelable(KEY_EDIT_STATE); + mState = savedState.<EntityDeltaList> getParcelable(KEY_EDIT_STATE); mRawContactIdRequestingPhoto = savedState.getLong( KEY_RAW_CONTACT_ID_REQUESTING_PHOTO); mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR); @@ -260,7 +251,7 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. } public void setData(ContactLoader.Result data) { - mState = EntitySet.fromIterator(data.getEntities().iterator()); + mState = EntityDeltaList.fromIterator(data.getEntities().iterator()); // TODO: Merge in Intent parameters can only be done on the first load. // The behaviour for subsequent loads is probably broken, so fix this final boolean hasExtras = mIntentExtras != null && mIntentExtras.size() > 0; @@ -327,7 +318,7 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. if (mState == null) { // Create state if none exists yet - mState = EntitySet.fromSingle(insert); + mState = EntityDeltaList.fromSingle(insert); } else { // Add contact onto end of existing state mState.add(insert); @@ -775,6 +766,14 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. return true; } + /** + * Asynchonously saves the changes made by the user. This can be called even if nothing + * has changed + */ + public void save() { + doSaveAction(SAVE_MODE_DEFAULT); + } + private boolean doRevertAction() { if (mListener != null) mListener.closeAfterRevert(); @@ -1173,14 +1172,13 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. * persisting in cases where the system wants to reclaim our process. */ public static class PersistTask extends - WeakAsyncTask<EntitySet, Void, Integer, ContactEditorFragment> { + WeakAsyncTask<EntityDeltaList, Void, Integer, ContactEditorFragment> { private static final int PERSIST_TRIES = 3; private static final int RESULT_UNCHANGED = 0; private static final int RESULT_SUCCESS = 1; private static final int RESULT_FAILURE = 2; - private WeakReference<ProgressDialog> mProgress; private final Context mContext; private int mSaveMode; @@ -1195,9 +1193,6 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. /** {@inheritDoc} */ @Override protected void onPreExecute(ContactEditorFragment target) { - mProgress = new WeakReference<ProgressDialog>(ProgressDialog.show(mContext, null, - mContext.getText(R.string.savingContact))); - // Before starting this task, start an empty service to protect our // process from being reclaimed by the system. mContext.startService(new Intent(mContext, EmptyService.class)); @@ -1205,10 +1200,10 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. /** {@inheritDoc} */ @Override - protected Integer doInBackground(ContactEditorFragment target, EntitySet... params) { + protected Integer doInBackground(ContactEditorFragment target, EntityDeltaList... params) { final ContentResolver resolver = mContext.getContentResolver(); - EntitySet state = params[0]; + EntityDeltaList state = params[0]; // Trim any empty fields, and RawContacts, before persisting final Sources sources = Sources.getInstance(mContext); @@ -1246,16 +1241,16 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. } catch (OperationApplicationException e) { // Version consistency failed, re-parent change and try again Log.w(TAG, "Version consistency failed, re-parenting: " + e.toString()); - final EntitySet newState = EntitySet.fromQuery(resolver, + final EntityDeltaList newState = EntityDeltaList.fromQuery(resolver, target.mQuerySelection, target.mQuerySelectionArgs, null); - state = EntitySet.mergeAfter(newState, state); + state = EntityDeltaList.mergeAfter(newState, state); } } return result; } - private long getRawContactId(EntitySet state, + private long getRawContactId(EntityDeltaList state, final ArrayList<ContentProviderOperation> diff, final ContentProviderResult[] results) { long rawContactId = state.findRawContactId(); @@ -1279,16 +1274,12 @@ public class ContactEditorFragment extends LoaderManagingFragment<ContactLoader. /** {@inheritDoc} */ @Override protected void onPostExecute(ContactEditorFragment target, Integer result) { - final ProgressDialog progress = mProgress.get(); - if (result == RESULT_SUCCESS && mSaveMode != SAVE_MODE_JOIN) { Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT).show(); } else if (result == RESULT_FAILURE) { Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show(); } - if (progress != null) progress.dismiss(); - // Stop the service that was protecting us mContext.stopService(new Intent(mContext, EmptyService.class)); diff --git a/tests/src/com/android/contacts/EntitySetTests.java b/tests/src/com/android/contacts/EntityDeltaListTests.java index edfca6d0d..efd843fb3 100644 --- a/tests/src/com/android/contacts/EntitySetTests.java +++ b/tests/src/com/android/contacts/EntityDeltaListTests.java @@ -25,7 +25,7 @@ import com.android.contacts.EntityModifierTests.MockContactsSource; import com.android.contacts.model.ContactsSource; import com.android.contacts.model.EntityDelta; import com.android.contacts.model.EntityModifier; -import com.android.contacts.model.EntitySet; +import com.android.contacts.model.EntityDeltaList; import com.android.contacts.model.EntityDelta.ValuesDelta; import com.google.android.collect.Lists; @@ -46,12 +46,12 @@ import java.lang.reflect.Field; import java.util.ArrayList; /** - * Tests for {@link EntitySet} which focus on "diff" operations that should + * Tests for {@link EntityDeltaList} which focus on "diff" operations that should * create {@link AggregationExceptions} in certain cases. */ @LargeTest -public class EntitySetTests extends AndroidTestCase { - public static final String TAG = "EntitySetTests"; +public class EntityDeltaListTests extends AndroidTestCase { + public static final String TAG = "EntityDeltaListTests"; private static final long CONTACT_FIRST = 1; private static final long CONTACT_SECOND = 2; @@ -71,7 +71,7 @@ public class EntitySetTests extends AndroidTestCase { public static final String TEST_PHONE = "555-1212"; public static final String TEST_ACCOUNT = "org.example.test"; - public EntitySetTests() { + public EntityDeltaListTests() { super(); } @@ -112,8 +112,8 @@ public class EntitySetTests extends AndroidTestCase { return new EntityDelta(values); } - static EntitySet buildSet(EntityDelta... deltas) { - final EntitySet set = EntitySet.fromSingle(deltas[0]); + static EntityDeltaList buildSet(EntityDelta... deltas) { + final EntityDeltaList set = EntityDeltaList.fromSingle(deltas[0]); for (int i = 1; i < deltas.length; i++) { set.add(deltas[i]); } @@ -166,12 +166,12 @@ public class EntitySetTests extends AndroidTestCase { return values; } - static void insertPhone(EntitySet set, long rawContactId, ContentValues values) { + static void insertPhone(EntityDeltaList set, long rawContactId, ContentValues values) { final EntityDelta match = set.getByRawContactId(rawContactId); match.addEntry(ValuesDelta.fromAfter(values)); } - static ValuesDelta getPhone(EntitySet set, long rawContactId, long dataId) { + static ValuesDelta getPhone(EntityDeltaList set, long rawContactId, long dataId) { final EntityDelta match = set.getByRawContactId(rawContactId); return match.getEntry(dataId); } @@ -183,7 +183,7 @@ public class EntitySetTests extends AndroidTestCase { assertDiffPattern(diff, pattern); } - static void assertDiffPattern(EntitySet set, ContentProviderOperation... pattern) { + static void assertDiffPattern(EntityDeltaList set, ContentProviderOperation... pattern) { assertDiffPattern(set.buildDiff(), pattern); } @@ -283,7 +283,7 @@ public class EntitySetTests extends AndroidTestCase { return null; } - static Long getVersion(EntitySet set, Long rawContactId) { + static Long getVersion(EntityDeltaList set, Long rawContactId) { return set.getByRawContactId(rawContactId).getValues().getAsLong(RawContacts.VERSION); } @@ -304,7 +304,7 @@ public class EntitySetTests extends AndroidTestCase { public void testInsert() { final EntityDelta insert = getInsert(); - final EntitySet set = buildSet(insert); + final EntityDeltaList set = buildSet(insert); // Inserting single shouldn't create rules final ArrayList<ContentProviderOperation> diff = set.buildDiff(); @@ -315,7 +315,7 @@ public class EntitySetTests extends AndroidTestCase { public void testUpdateUpdate() { final EntityDelta updateFirst = getUpdate(CONTACT_FIRST); final EntityDelta updateSecond = getUpdate(CONTACT_SECOND); - final EntitySet set = buildSet(updateFirst, updateSecond); + final EntityDeltaList set = buildSet(updateFirst, updateSecond); // Updating two existing shouldn't create rules final ArrayList<ContentProviderOperation> diff = set.buildDiff(); @@ -326,7 +326,7 @@ public class EntitySetTests extends AndroidTestCase { public void testUpdateInsert() { final EntityDelta update = getUpdate(CONTACT_FIRST); final EntityDelta insert = getInsert(); - final EntitySet set = buildSet(update, insert); + final EntityDeltaList set = buildSet(update, insert); // New insert should only create one rule final ArrayList<ContentProviderOperation> diff = set.buildDiff(); @@ -338,7 +338,7 @@ public class EntitySetTests extends AndroidTestCase { final EntityDelta insertFirst = getInsert(); final EntityDelta update = getUpdate(CONTACT_FIRST); final EntityDelta insertSecond = getInsert(); - final EntitySet set = buildSet(insertFirst, update, insertSecond); + final EntityDeltaList set = buildSet(insertFirst, update, insertSecond); // Two inserts should create two rules to bind against single existing final ArrayList<ContentProviderOperation> diff = set.buildDiff(); @@ -350,7 +350,7 @@ public class EntitySetTests extends AndroidTestCase { final EntityDelta insertFirst = getInsert(); final EntityDelta insertSecond = getInsert(); final EntityDelta insertThird = getInsert(); - final EntitySet set = buildSet(insertFirst, insertSecond, insertThird); + final EntityDeltaList set = buildSet(insertFirst, insertSecond, insertThird); // Three new inserts should create only two binding rules final ArrayList<ContentProviderOperation> diff = set.buildDiff(); @@ -359,20 +359,20 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeDataRemoteInsert() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN))); // Merge in second version, verify they match - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertEquals("Unexpected change when merging", second, merged); } public void testMergeDataLocalUpdateRemoteInsert() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN))); // Change the local number to trigger update @@ -386,7 +386,7 @@ public class EntitySetTests extends AndroidTestCase { buildUpdateAggregationDefault()); // Merge in the second version, verify diff matches - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildUpdateAggregationSuspended(), @@ -395,9 +395,9 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeDataLocalUpdateRemoteDelete() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_GREEN))); // Change the local number to trigger update @@ -412,7 +412,7 @@ public class EntitySetTests extends AndroidTestCase { // Merge in the second version, verify that our update changed to // insert, since RED was deleted on remote side - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildUpdateAggregationSuspended(), @@ -421,9 +421,9 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeDataLocalDeleteRemoteUpdate() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED, TEST_PHONE))); // Delete phone locally @@ -437,7 +437,7 @@ public class EntitySetTests extends AndroidTestCase { buildUpdateAggregationDefault()); // Merge in the second version, verify that our delete remains - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildUpdateAggregationSuspended(), @@ -446,9 +446,9 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeDataLocalInsertRemoteInsert() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN))); // Insert new phone locally @@ -461,7 +461,7 @@ public class EntitySetTests extends AndroidTestCase { buildUpdateAggregationDefault()); // Merge in the second version, verify that our insert remains - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildUpdateAggregationSuspended(), @@ -470,9 +470,9 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeRawContactLocalInsertRemoteInsert() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)), buildBeforeEntity(CONTACT_MARY, VER_SECOND, buildPhone(PHONE_RED))); @@ -490,7 +490,7 @@ public class EntitySetTests extends AndroidTestCase { buildUpdateAggregationKeepTogether(CONTACT_BOB)); // Merge in the second version, verify that our insert remains - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildAssertVersion(VER_SECOND), @@ -501,10 +501,10 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeRawContactLocalDeleteRemoteDelete() { - final EntitySet first = buildSet( + final EntityDeltaList first = buildSet( buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)), buildBeforeEntity(CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet( + final EntityDeltaList second = buildSet( buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED))); // Remove contact locally @@ -515,15 +515,15 @@ public class EntitySetTests extends AndroidTestCase { buildDelete(RawContacts.CONTENT_URI)); // Merge in the second version, verify that our delete isn't needed - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged); } public void testMergeRawContactLocalUpdateRemoteDelete() { - final EntitySet first = buildSet( + final EntityDeltaList first = buildSet( buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)), buildBeforeEntity(CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet( + final EntityDeltaList second = buildSet( buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED))); // Perform local update @@ -542,7 +542,7 @@ public class EntitySetTests extends AndroidTestCase { contactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED); // Merge and verify that update turned into insert - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged, buildAssertVersion(VER_SECOND), buildOper(RawContacts.CONTENT_URI, TYPE_INSERT, contactInsert), @@ -552,22 +552,22 @@ public class EntitySetTests extends AndroidTestCase { } public void testMergeUsesNewVersion() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED))); assertEquals((Long)VER_FIRST, getVersion(first, CONTACT_BOB)); assertEquals((Long)VER_SECOND, getVersion(second, CONTACT_BOB)); - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertEquals((Long)VER_SECOND, getVersion(merged, CONTACT_BOB)); } public void testMergeAfterEnsureAndTrim() { - final EntitySet first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, + final EntityDeltaList first = buildSet(buildBeforeEntity(CONTACT_BOB, VER_FIRST, buildEmail(EMAIL_YELLOW))); - final EntitySet second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, + final EntityDeltaList second = buildSet(buildBeforeEntity(CONTACT_BOB, VER_SECOND, buildEmail(EMAIL_YELLOW))); // Ensure we have at least one phone @@ -588,7 +588,7 @@ public class EntitySetTests extends AndroidTestCase { assertDiffPattern(first); // Now re-parent the change, which should remain no-op - final EntitySet merged = EntitySet.mergeAfter(second, first); + final EntityDeltaList merged = EntityDeltaList.mergeAfter(second, first); assertDiffPattern(merged); } } diff --git a/tests/src/com/android/contacts/EntityModifierTests.java b/tests/src/com/android/contacts/EntityModifierTests.java index 18877a301..af3681529 100644 --- a/tests/src/com/android/contacts/EntityModifierTests.java +++ b/tests/src/com/android/contacts/EntityModifierTests.java @@ -23,7 +23,7 @@ import static android.content.ContentProviderOperation.TYPE_UPDATE; import com.android.contacts.model.ContactsSource; import com.android.contacts.model.EntityDelta; import com.android.contacts.model.EntityModifier; -import com.android.contacts.model.EntitySet; +import com.android.contacts.model.EntityDeltaList; import com.android.contacts.model.Sources; import com.android.contacts.model.ContactsSource.DataKind; import com.android.contacts.model.ContactsSource.EditType; @@ -376,23 +376,23 @@ public class EntityModifierTests extends AndroidTestCase { final EditType typeHome = EntityModifier.getType(kindPhone, Phone.TYPE_HOME); // Test row that has type values, but values are spaces - final EntityDelta state = EntitySetTests.buildBeforeEntity(TEST_ID, VER_FIRST); + final EntityDelta state = EntityDeltaListTests.buildBeforeEntity(TEST_ID, VER_FIRST); final ValuesDelta values = EntityModifier.insertChild(state, kindPhone, typeHome); values.put(Phone.NUMBER, " "); // Build diff, expecting insert for data row and update enforcement - EntitySetTests.assertDiffPattern(state, - EntitySetTests.buildAssertVersion(VER_FIRST), - EntitySetTests.buildUpdateAggregationSuspended(), - EntitySetTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, - EntitySetTests.buildDataInsert(values, TEST_ID)), - EntitySetTests.buildUpdateAggregationDefault()); + EntityDeltaListTests.assertDiffPattern(state, + EntityDeltaListTests.buildAssertVersion(VER_FIRST), + EntityDeltaListTests.buildUpdateAggregationSuspended(), + EntityDeltaListTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, + EntityDeltaListTests.buildDataInsert(values, TEST_ID)), + EntityDeltaListTests.buildUpdateAggregationDefault()); // Trim empty rows and try again, expecting delete of overall contact EntityModifier.trimEmpty(state, source); - EntitySetTests.assertDiffPattern(state, - EntitySetTests.buildAssertVersion(VER_FIRST), - EntitySetTests.buildDelete(RawContacts.CONTENT_URI)); + EntityDeltaListTests.assertDiffPattern(state, + EntityDeltaListTests.buildAssertVersion(VER_FIRST), + EntityDeltaListTests.buildDelete(RawContacts.CONTENT_URI)); } public void testTrimLeaveValid() { @@ -401,26 +401,26 @@ public class EntityModifierTests extends AndroidTestCase { final EditType typeHome = EntityModifier.getType(kindPhone, Phone.TYPE_HOME); // Test row that has type values with valid number - final EntityDelta state = EntitySetTests.buildBeforeEntity(TEST_ID, VER_FIRST); + final EntityDelta state = EntityDeltaListTests.buildBeforeEntity(TEST_ID, VER_FIRST); final ValuesDelta values = EntityModifier.insertChild(state, kindPhone, typeHome); values.put(Phone.NUMBER, TEST_PHONE); // Build diff, expecting insert for data row and update enforcement - EntitySetTests.assertDiffPattern(state, - EntitySetTests.buildAssertVersion(VER_FIRST), - EntitySetTests.buildUpdateAggregationSuspended(), - EntitySetTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, - EntitySetTests.buildDataInsert(values, TEST_ID)), - EntitySetTests.buildUpdateAggregationDefault()); + EntityDeltaListTests.assertDiffPattern(state, + EntityDeltaListTests.buildAssertVersion(VER_FIRST), + EntityDeltaListTests.buildUpdateAggregationSuspended(), + EntityDeltaListTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, + EntityDeltaListTests.buildDataInsert(values, TEST_ID)), + EntityDeltaListTests.buildUpdateAggregationDefault()); // Trim empty rows and try again, expecting no differences EntityModifier.trimEmpty(state, source); - EntitySetTests.assertDiffPattern(state, - EntitySetTests.buildAssertVersion(VER_FIRST), - EntitySetTests.buildUpdateAggregationSuspended(), - EntitySetTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, - EntitySetTests.buildDataInsert(values, TEST_ID)), - EntitySetTests.buildUpdateAggregationDefault()); + EntityDeltaListTests.assertDiffPattern(state, + EntityDeltaListTests.buildAssertVersion(VER_FIRST), + EntityDeltaListTests.buildUpdateAggregationSuspended(), + EntityDeltaListTests.buildOper(Data.CONTENT_URI, TYPE_INSERT, + EntityDeltaListTests.buildDataInsert(values, TEST_ID)), + EntityDeltaListTests.buildUpdateAggregationDefault()); } public void testTrimEmptyUntouched() { @@ -507,7 +507,7 @@ public class EntityModifierTests extends AndroidTestCase { // Try creating a contact without any child entries final EntityDelta state = getEntity(null); - final EntitySet set = EntitySet.fromSingle(state); + final EntityDeltaList set = EntityDeltaList.fromSingle(state); // Build diff, expecting single insert final ArrayList<ContentProviderOperation> diff = Lists.newArrayList(); @@ -535,7 +535,7 @@ public class EntityModifierTests extends AndroidTestCase { // Try creating a contact with single empty entry final EntityDelta state = getEntity(null); final ValuesDelta values = EntityModifier.insertChild(state, kindPhone, typeHome); - final EntitySet set = EntitySet.fromSingle(state); + final EntityDeltaList set = EntityDeltaList.fromSingle(state); // Build diff, expecting two insert operations final ArrayList<ContentProviderOperation> diff = Lists.newArrayList(); @@ -579,7 +579,7 @@ public class EntityModifierTests extends AndroidTestCase { second.put(Phone.NUMBER, TEST_PHONE); final EntityDelta state = getEntity(TEST_ID, first, second); - final EntitySet set = EntitySet.fromSingle(state); + final EntityDeltaList set = EntityDeltaList.fromSingle(state); // Build diff, expecting no changes final ArrayList<ContentProviderOperation> diff = Lists.newArrayList(); @@ -644,7 +644,7 @@ public class EntityModifierTests extends AndroidTestCase { first.put(Phone.NUMBER, TEST_PHONE); final EntityDelta state = getEntity(TEST_ID, first); - final EntitySet set = EntitySet.fromSingle(state); + final EntityDeltaList set = EntityDeltaList.fromSingle(state); // Build diff, expecting no changes final ArrayList<ContentProviderOperation> diff = Lists.newArrayList(); |