// Remove a contact from the ContactsCache based on the number or email address private void remove(Contact contact) { synchronized (ContactsCache.this) { String number = contact.getNumber(); final boolean isNotRegularPhoneNumber = contact.isMe() || MessageUtils.isEmailAddress(number) || MessageUtils.isAlias(number); final String key = isNotRegularPhoneNumber ? number : key(number, sStaticKeyBuffer); ArrayList<Contact> candidates = mContactsHash.get(key); if (candidates != null) { int length = candidates.size(); for (int i = 0; i < length; i++) { Contact c = candidates.get(i); if (isNotRegularPhoneNumber) { if (number.equals(c.mNumber)) { candidates.remove(i); break; } } else { if (PhoneNumberUtils.compare(number, c.mNumber)) { candidates.remove(i); break; } } } if (candidates.size() == 0) { mContactsHash.remove(key); } } } }