Move dependencies in prep for PhoneNumberInteraction move.
Committing this change first which is a pre-factor to moving
PhoneNumberInteraction into Dialer completely.
Bug: 6993891
Change-Id: I8a8f2d2d54b1aa8268e8ac9bd7d97d165a3e55c2
diff --git a/src/com/android/contacts/Collapser.java b/src/com/android/contacts/Collapser.java
deleted file mode 100644
index 3b2f2a9..0000000
--- a/src/com/android/contacts/Collapser.java
+++ /dev/null
@@ -1,79 +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;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Class used for collapsing data items into groups of similar items. The data items that should be
- * collapsible should implement the Collapsible interface. The class also contains a utility
- * function that takes an ArrayList of items and returns a list of the same items collapsed into
- * groups.
- */
-public final class Collapser {
-
- /*
- * This utility class cannot be instantiated.
- */
- private Collapser() {}
-
- /*
- * Interface implemented by data types that can be collapsed into groups of similar data. This
- * can be used for example to collapse similar contact data items into a single item.
- */
- public interface Collapsible<T> {
- public boolean collapseWith(T t);
- public boolean shouldCollapseWith(T t);
- }
-
- /**
- * Collapses a list of Collapsible items into a list of collapsed items. Items are collapsed
- * if {@link Collapsible#shouldCollapseWith(Object)} returns true, and are collapsed
- * through the {@Link Collapsible#collapseWith(Object)} function implemented by the data item.
- *
- * @param list List of Objects of type <T extends Collapsible<T>> to be collapsed.
- */
- public static <T extends Collapsible<T>> void collapseList(List<T> list) {
-
- int listSize = list.size();
-
- for (int i = 0; i < listSize; i++) {
- T iItem = list.get(i);
- if (iItem != null) {
- for (int j = i + 1; j < listSize; j++) {
- T jItem = list.get(j);
- if (jItem != null) {
- if (iItem.shouldCollapseWith(jItem)) {
- iItem.collapseWith(jItem);
- list.set(j, null);
- }
- }
- }
- }
- }
-
- // Remove the null items
- Iterator<T> itr = list.iterator();
- while (itr.hasNext()) {
- if (itr.next() == null) {
- itr.remove();
- }
- }
-
- }
-}
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index c756752..f1a5a72 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -46,6 +46,7 @@
import android.util.Log;
import android.widget.Toast;
+import com.android.contacts.common.database.ContactUpdateUtils;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.RawContactDelta;
import com.android.contacts.model.RawContactDeltaList;
@@ -903,13 +904,7 @@
return;
}
- // Update the primary values in the data record.
- ContentValues values = new ContentValues(1);
- values.put(Data.IS_SUPER_PRIMARY, 1);
- values.put(Data.IS_PRIMARY, 1);
-
- getContentResolver().update(ContentUris.withAppendedId(Data.CONTENT_URI, dataId),
- values, null, null);
+ ContactUpdateUtils.setSuperPrimary(this, dataId);
}
/**
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index 90900ce..f3ac147 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -25,7 +25,7 @@
import android.os.Bundle;
import android.view.View;
-import com.android.contacts.activities.TransactionSafeActivity;
+import com.android.contacts.common.activity.TransactionSafeActivity;
import com.android.contacts.test.InjectedServices;
/**
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 196e353..b6e4772 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -23,7 +23,6 @@
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.DisplayPhoto;
import android.provider.ContactsContract.QuickContact;
import android.telephony.PhoneNumberUtils;
@@ -106,63 +105,6 @@
}
/**
- * Returns true if two data with mimetypes which represent values in contact entries are
- * considered equal for collapsing in the GUI. For caller-id, use
- * {@link PhoneNumberUtils#compare(Context, String, String)} instead
- */
- public static final boolean shouldCollapse(CharSequence mimetype1, CharSequence data1,
- CharSequence mimetype2, CharSequence data2) {
- // different mimetypes? don't collapse
- if (!TextUtils.equals(mimetype1, mimetype2)) return false;
-
- // exact same string? good, bail out early
- if (TextUtils.equals(data1, data2)) return true;
-
- // so if either is null, these two must be different
- if (data1 == null || data2 == null) return false;
-
- // if this is not about phone numbers, we know this is not a match (of course, some
- // mimetypes could have more sophisticated matching is the future, e.g. addresses)
- if (!TextUtils.equals(Phone.CONTENT_ITEM_TYPE, mimetype1)) return false;
-
- return shouldCollapsePhoneNumbers(data1.toString(), data2.toString());
- }
-
- private static final boolean shouldCollapsePhoneNumbers(
- String number1WithLetters, String number2WithLetters) {
- final String number1 = PhoneNumberUtils.convertKeypadLettersToDigits(number1WithLetters);
- final String number2 = PhoneNumberUtils.convertKeypadLettersToDigits(number2WithLetters);
-
- int index1 = 0;
- int index2 = 0;
- for (;;) {
- // Skip formatting characters.
- while (index1 < number1.length() &&
- !PhoneNumberUtils.isNonSeparator(number1.charAt(index1))) {
- index1++;
- }
- while (index2 < number2.length() &&
- !PhoneNumberUtils.isNonSeparator(number2.charAt(index2))) {
- index2++;
- }
- // If both have finished, match. If only one has finished, not match.
- final boolean number1End = (index1 == number1.length());
- final boolean number2End = (index2 == number2.length());
- if (number1End) {
- return number2End;
- }
- if (number2End) return false;
-
- // If the non-formatting characters are different, not match.
- if (number1.charAt(index1) != number2.charAt(index2)) return false;
-
- // Go to the next characters.
- index1++;
- index2++;
- }
- }
-
- /**
* Returns true if two {@link Intent}s are both null, or have the same action.
*/
public static final boolean areIntentActionEqual(Intent a, Intent b) {
diff --git a/src/com/android/contacts/activities/TransactionSafeActivity.java b/src/com/android/contacts/activities/TransactionSafeActivity.java
deleted file mode 100644
index b177665..0000000
--- a/src/com/android/contacts/activities/TransactionSafeActivity.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2011 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.activities;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-/**
- * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
- * not.
- */
-public abstract class TransactionSafeActivity extends Activity {
-
- private boolean mIsSafeToCommitTransactions;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mIsSafeToCommitTransactions = true;
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mIsSafeToCommitTransactions = true;
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mIsSafeToCommitTransactions = true;
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mIsSafeToCommitTransactions = false;
- }
-
- /**
- * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
- * whether {@link Activity#onSaveInstanceState} has been called or not.
- *
- * Make sure that the current activity calls into
- * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
- * so the flag is properly set.
- */
- public boolean isSafeToCommitTransactions() {
- return mIsSafeToCommitTransactions;
- }
-}
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 592db44..35ca00b 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -68,9 +68,6 @@
import android.widget.ListView;
import android.widget.TextView;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.Collapser;
-import com.android.contacts.Collapser.Collapsible;
import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsUtils;
@@ -78,8 +75,12 @@
import com.android.contacts.R;
import com.android.contacts.TypePrecedence;
import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
+import com.android.contacts.common.CallUtil;
import com.android.contacts.common.ClipboardUtils;
+import com.android.contacts.common.Collapser;
+import com.android.contacts.common.Collapser.Collapsible;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.MoreContactUtils;
import com.android.contacts.editor.SelectAccountDialogFragment;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.Contact;
@@ -1338,7 +1339,7 @@
return false;
}
- if (!ContactsUtils.shouldCollapse(mimetype, data, entry.mimetype, entry.data)) {
+ if (!MoreContactUtils.shouldCollapse(mimetype, data, entry.mimetype, entry.data)) {
return false;
}
diff --git a/src/com/android/contacts/interactions/PhoneNumberInteraction.java b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
index 12ab431..7ecd5d8 100644
--- a/src/com/android/contacts/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
@@ -46,17 +46,17 @@
import android.widget.ListAdapter;
import android.widget.TextView;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.Collapser;
-import com.android.contacts.Collapser.Collapsible;
import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.activities.TransactionSafeActivity;
+import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.Collapser;
+import com.android.contacts.common.Collapser.Collapsible;
+import com.android.contacts.common.MoreContactUtils;
+import com.android.contacts.common.activity.TransactionSafeActivity;
+import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountType.StringInflater;
import com.android.contacts.model.dataitem.DataKind;
-import com.android.contacts.model.AccountTypeManager;
import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
@@ -135,7 +135,7 @@
@Override
public boolean shouldCollapseWith(PhoneItem phoneItem) {
- return ContactsUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE, phoneNumber,
+ return MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE, phoneNumber,
Phone.CONTENT_ITEM_TYPE, phoneItem.phoneNumber);
}
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index 08fbce4..fa23286 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -20,7 +20,7 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import com.android.contacts.Collapser;
+import com.android.contacts.common.Collapser;
/**
* Abstract definition of an action that could be performed, along with
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index e2bcc8f..3cf3adf 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -31,6 +31,7 @@
import com.android.contacts.common.CallUtil;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
+import com.android.contacts.common.MoreContactUtils;
import com.android.contacts.model.account.AccountType.EditType;
import com.android.contacts.model.dataitem.DataItem;
import com.android.contacts.model.dataitem.DataKind;
@@ -309,7 +310,7 @@
return false;
}
DataAction that = (DataAction)t;
- if (!ContactsUtils.shouldCollapse(mMimeType, mBody, that.mMimeType, that.mBody)) {
+ if (!MoreContactUtils.shouldCollapse(mMimeType, mBody, that.mMimeType, that.mBody)) {
return false;
}
if (!TextUtils.equals(mMimeType, that.mMimeType)
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 72d8521..0d9f3de 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -56,7 +56,7 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.android.contacts.Collapser;
+import com.android.contacts.common.Collapser;
import com.android.contacts.R;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.Contact;