/**
   * Get all contacts for a given number
   *
   * @param number
   * @return All contacts with that number.
   */
  public Collection<Contact> contactsByNumber(String number) {
    if (!contactsReadModuleInstalled()) return null;

    number = ContactNumber.cleanNumber(number);
    if (!ContactNumber.isNumber(number)) return null;

    Uri uri = Uri.withAppendedPath(MAXS_PHONE_LOOKUP_CONTENT_FILTER_URI, Uri.encode(number));
    final String[] projection = new String[] {PhoneLookup.LOOKUP_KEY, DISPLAY_NAME};
    Cursor c = mContentResolver.query(uri, projection, null, null, null);

    Map<String, Contact> contactMap = new HashMap<String, Contact>();
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
      String displayName = c.getString(c.getColumnIndexOrThrow(DISPLAY_NAME));
      String lookupKey = c.getString(c.getColumnIndexOrThrow(PhoneLookup.LOOKUP_KEY));

      Contact contact = contactMap.get(lookupKey);
      if (contact == null) {
        contact = new Contact(displayName, lookupKey);
        contactMap.put(lookupKey, contact);
        lookupContactNumbersFor(contact);
      }
    }
    c.close();

    return contactMap.values();
  }
  /**
   * Magical method that tries to find contacts based on a given String.
   *
   * <p>Only returns null if the contacts module is not installed or on error.
   *
   * @param info
   * @return A collection of matching contacts.
   */
  public Collection<Contact> lookupContacts(String info) {
    if (!contactsReadModuleInstalled()) return null;

    String cleanNumber = ContactNumber.cleanNumber(info);
    if (ContactNumber.isNumber(cleanNumber)) return contactsByNumber(cleanNumber);

    Collection<Contact> contacts = contactsByNickname(info);
    if (contacts != null && contacts.size() > 0) return contacts;

    return contactsByName(info);
  }