summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2015-03-14 02:25:43 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-03-14 02:25:43 -0700
commit30d151295b4fb5c9f004e1abf7089836b31f8e7e (patch)
tree897b45eb7d82f8ae3188cb7763dfd0d47c12a67a
parente4b789ca517d14d2eceae93ac9bb63df2bff1e7b (diff)
parent3cc449da6296be793bb6daec4f702f68b7c66a21 (diff)
downloadandroid_packages_apps_ContactsCommon-30d151295b4fb5c9f004e1abf7089836b31f8e7e.tar.gz
android_packages_apps_ContactsCommon-30d151295b4fb5c9f004e1abf7089836b31f8e7e.tar.bz2
android_packages_apps_ContactsCommon-30d151295b4fb5c9f004e1abf7089836b31f8e7e.zip
Merge "Fix too many variables SQLiteException"
-rw-r--r--src/com/android/contacts/common/model/ContactLoader.java36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/com/android/contacts/common/model/ContactLoader.java b/src/com/android/contacts/common/model/ContactLoader.java
index eba825b1..998fb2d9 100644
--- a/src/com/android/contacts/common/model/ContactLoader.java
+++ b/src/com/android/contacts/common/model/ContactLoader.java
@@ -63,9 +63,11 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
/**
@@ -758,6 +760,34 @@ public class ContactLoader extends AsyncTaskLoader<Contact> {
}
}
+ static private class AccountKey {
+ private final String mAccountName;
+ private final String mAccountType;
+ private final String mDataSet;
+
+ public AccountKey(String accountName, String accountType, String dataSet) {
+ mAccountName = accountName;
+ mAccountType = accountType;
+ mDataSet = dataSet;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mAccountName, mAccountType, mDataSet);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof AccountKey)) {
+ return false;
+ }
+ final AccountKey other = (AccountKey) obj;
+ return Objects.equals(mAccountName, other.mAccountName)
+ && Objects.equals(mAccountType, other.mAccountType)
+ && Objects.equals(mDataSet, other.mDataSet);
+ }
+ }
+
/**
* Loads groups meta-data for all groups associated with all constituent raw contacts'
* accounts.
@@ -765,11 +795,15 @@ public class ContactLoader extends AsyncTaskLoader<Contact> {
private void loadGroupMetaData(Contact result) {
StringBuilder selection = new StringBuilder();
ArrayList<String> selectionArgs = new ArrayList<String>();
+ final HashSet<AccountKey> accountsSeen = new HashSet<>();
for (RawContact rawContact : result.getRawContacts()) {
final String accountName = rawContact.getAccountName();
final String accountType = rawContact.getAccountTypeString();
final String dataSet = rawContact.getDataSet();
- if (accountName != null && accountType != null) {
+ final AccountKey accountKey = new AccountKey(accountName, accountType, dataSet);
+ if (accountName != null && accountType != null &&
+ !accountsSeen.contains(accountKey)) {
+ accountsSeen.add(accountKey);
if (selection.length() != 0) {
selection.append(" OR ");
}