public AddressBookResultHandler(Activity activity, ParsedResult result) {
    super(activity, result);
    AddressBookParsedResult addressResult = (AddressBookParsedResult) result;
    String[] addresses = addressResult.getAddresses();
    boolean hasAddress =
        addresses != null
            && addresses.length > 0
            && addresses[0] != null
            && !addresses[0].isEmpty();
    String[] phoneNumbers = addressResult.getPhoneNumbers();
    boolean hasPhoneNumber = phoneNumbers != null && phoneNumbers.length > 0;
    String[] emails = addressResult.getEmails();
    boolean hasEmailAddress = emails != null && emails.length > 0;

    fields = new boolean[MAX_BUTTON_COUNT];
    fields[0] = true; // Add contact is always available
    fields[1] = hasAddress;
    fields[2] = hasPhoneNumber;
    fields[3] = hasEmailAddress;

    buttonCount = 0;
    for (int x = 0; x < MAX_BUTTON_COUNT; x++) {
      if (fields[x]) {
        buttonCount++;
      }
    }
  }
 @Override
 public void handleButtonPress(int index) {
   AddressBookParsedResult addressResult = (AddressBookParsedResult) getResult();
   String[] addresses = addressResult.getAddresses();
   String address1 = addresses == null || addresses.length < 1 ? null : addresses[0];
   String[] addressTypes = addressResult.getAddressTypes();
   String address1Type = addressTypes == null || addressTypes.length < 1 ? null : addressTypes[0];
   int action = mapIndexToAction(index);
   switch (action) {
     case 0:
       addContact(
           addressResult.getNames(),
           addressResult.getNicknames(),
           addressResult.getPronunciation(),
           addressResult.getPhoneNumbers(),
           addressResult.getPhoneTypes(),
           addressResult.getEmails(),
           addressResult.getEmailTypes(),
           addressResult.getNote(),
           addressResult.getInstantMessenger(),
           address1,
           address1Type,
           addressResult.getOrg(),
           addressResult.getTitle(),
           addressResult.getURLs(),
           addressResult.getBirthday(),
           addressResult.getGeo());
       break;
     case 1:
       String[] names = addressResult.getNames();
       String title = names != null ? names[0] : null;
       searchMap(address1, title);
       break;
     case 2:
       dialPhone(addressResult.getPhoneNumbers()[0]);
       break;
     case 3:
       sendEmail(addressResult.getEmails()[0], null, null);
       break;
     default:
       break;
   }
 }
  // Overriden so we can hyphenate phone numbers, format birthdays, and bold the name.
  @Override
  public CharSequence getDisplayContents() {
    AddressBookParsedResult result = (AddressBookParsedResult) getResult();
    StringBuilder contents = new StringBuilder(100);
    ParsedResult.maybeAppend(result.getNames(), contents);
    int namesLength = contents.length();

    String pronunciation = result.getPronunciation();
    if (pronunciation != null && !pronunciation.isEmpty()) {
      contents.append("\n(");
      contents.append(pronunciation);
      contents.append(')');
    }

    ParsedResult.maybeAppend(result.getTitle(), contents);
    ParsedResult.maybeAppend(result.getOrg(), contents);
    ParsedResult.maybeAppend(result.getAddresses(), contents);
    String[] numbers = result.getPhoneNumbers();
    if (numbers != null) {
      for (String number : numbers) {
        if (number != null) {
          ParsedResult.maybeAppend(PhoneNumberUtils.formatNumber(number), contents);
        }
      }
    }
    ParsedResult.maybeAppend(result.getEmails(), contents);
    ParsedResult.maybeAppend(result.getURLs(), contents);

    String birthday = result.getBirthday();
    if (birthday != null && !birthday.isEmpty()) {
      Date date = parseDate(birthday);
      if (date != null) {
        ParsedResult.maybeAppend(
            DateFormat.getDateInstance(DateFormat.MEDIUM).format(date.getTime()), contents);
      }
    }
    ParsedResult.maybeAppend(result.getNote(), contents);

    if (namesLength > 0) {
      // Bold the full name to make it stand out a bit.
      Spannable styled = new SpannableString(contents.toString());
      styled.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, namesLength, 0);
      return styled;
    } else {
      return contents.toString();
    }
  }
 private void encodeQRCodeContents(AddressBookParsedResult contact) {
   ContactEncoder encoder = useVCard ? new VCardContactEncoder() : new MECARDContactEncoder();
   String[] encoded =
       encoder.encode(
           toIterable(contact.getNames()),
           contact.getOrg(),
           toIterable(contact.getAddresses()),
           toIterable(contact.getPhoneNumbers()),
           toIterable(contact.getEmails()),
           toIterable(contact.getURLs()),
           null);
   // Make sure we've encoded at least one field.
   if (encoded[1].length() > 0) {
     contents = encoded[0];
     displayContents = encoded[1];
     title = activity.getString(R.string.contents_text);
   }
 }