diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2015-03-14 02:25:43 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-03-14 02:25:43 -0700 |
commit | 30d151295b4fb5c9f004e1abf7089836b31f8e7e (patch) | |
tree | 897b45eb7d82f8ae3188cb7763dfd0d47c12a67a | |
parent | e4b789ca517d14d2eceae93ac9bb63df2bff1e7b (diff) | |
parent | 3cc449da6296be793bb6daec4f702f68b7c66a21 (diff) | |
download | android_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.java | 36 |
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 "); } |