diff options
Diffstat (limited to 'src/com/android/contacts/common/model/ContactLoader.java')
-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 bea72107..59ab292e 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; /** @@ -773,6 +775,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. @@ -780,11 +810,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 "); } |