public List<Suggestion> getSuggestions() {
    ArrayList<Suggestion> list = Lists.newArrayList();
    if (mDataCursor != null) {
      Suggestion suggestion = null;
      long currentContactId = -1;
      mDataCursor.moveToPosition(-1);
      while (mDataCursor.moveToNext()) {
        long contactId = mDataCursor.getLong(DataQuery.CONTACT_ID);
        if (contactId != currentContactId) {
          suggestion = new Suggestion();
          suggestion.contactId = contactId;
          suggestion.name = mDataCursor.getString(DataQuery.DISPLAY_NAME);
          suggestion.lookupKey = mDataCursor.getString(DataQuery.LOOKUP_KEY);
          suggestion.rawContacts = Lists.newArrayList();
          list.add(suggestion);
          currentContactId = contactId;
        }

        long rawContactId = mDataCursor.getLong(DataQuery.RAW_CONTACT_ID);
        if (!containsRawContact(suggestion, rawContactId)) {
          RawContact rawContact = new RawContact();
          rawContact.rawContactId = rawContactId;
          rawContact.accountName = mDataCursor.getString(DataQuery.ACCOUNT_NAME);
          rawContact.accountType = mDataCursor.getString(DataQuery.ACCOUNT_TYPE);
          rawContact.dataSet = mDataCursor.getString(DataQuery.DATA_SET);
          suggestion.rawContacts.add(rawContact);
        }

        String mimetype = mDataCursor.getString(DataQuery.MIMETYPE);
        if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) {
          String data = mDataCursor.getString(DataQuery.DATA1);
          int superprimary = mDataCursor.getInt(DataQuery.IS_SUPERPRIMARY);
          if (!TextUtils.isEmpty(data) && (superprimary != 0 || suggestion.phoneNumber == null)) {
            suggestion.phoneNumber = data;
          }
        } else if (Email.CONTENT_ITEM_TYPE.equals(mimetype)) {
          String data = mDataCursor.getString(DataQuery.DATA1);
          int superprimary = mDataCursor.getInt(DataQuery.IS_SUPERPRIMARY);
          if (!TextUtils.isEmpty(data) && (superprimary != 0 || suggestion.emailAddress == null)) {
            suggestion.emailAddress = data;
          }
        } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimetype)) {
          String data = mDataCursor.getString(DataQuery.DATA1);
          if (!TextUtils.isEmpty(data)) {
            suggestion.nickname = data;
          }
        } else if (Photo.CONTENT_ITEM_TYPE.equals(mimetype)) {
          long dataId = mDataCursor.getLong(DataQuery.ID);
          long photoId = mDataCursor.getLong(DataQuery.PHOTO_ID);
          if (dataId == photoId && !mDataCursor.isNull(DataQuery.PHOTO)) {
            suggestion.photo = mDataCursor.getBlob(DataQuery.PHOTO);
          }
        }
      }
    }
    return list;
  }