Issue 295 and Issue 294, treat ADR as wholly different addresses, not 2 lines of...
[zxing.git] / android / src / com / google / zxing / client / android / result / AddressBookResultHandler.java
index 37a96f6..83c74fd 100644 (file)
 
 package com.google.zxing.client.android.result;
 
+import com.google.zxing.client.android.R;
+import com.google.zxing.client.result.AddressBookParsedResult;
+import com.google.zxing.client.result.ParsedResult;
+
 import android.app.Activity;
 import android.telephony.PhoneNumberUtils;
-import android.text.SpannableString;
 import android.text.Spannable;
+import android.text.SpannableString;
 import android.text.style.StyleSpan;
-import com.google.zxing.client.android.R;
-import com.google.zxing.client.result.AddressBookParsedResult;
-import com.google.zxing.client.result.ParsedResult;
 
 import java.text.DateFormat;
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+/**
+ * Handles address book entries.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
 public final class AddressBookResultHandler extends ResultHandler {
-
   private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
 
-  private final boolean[] mFields;
-  private final int mButtonCount;
+  private final boolean[] fields;
+  private int buttonCount;
 
   // This takes all the work out of figuring out which buttons/actions should be in which
   // positions, based on which fields are present in this barcode.
   private int mapIndexToAction(int index) {
-    if (index < mButtonCount) {
+    if (index < buttonCount) {
       int count = -1;
       for (int x = 0; x < MAX_BUTTON_COUNT; x++) {
-        if (mFields[x]) {
+        if (fields[x]) {
           count++;
         }
         if (count == index) {
@@ -57,30 +62,30 @@ public final class AddressBookResultHandler extends ResultHandler {
   public AddressBookResultHandler(Activity activity, ParsedResult result) {
     super(activity, result);
     AddressBookParsedResult addressResult = (AddressBookParsedResult) result;
-    String address = addressResult.getAddress();
-    boolean hasAddress = address != null && address.length() > 0;
+    String[] addresses = addressResult.getAddresses();
+    boolean hasAddress = addresses != null && addresses.length > 0 && addresses[0].length() > 0;
     String[] phoneNumbers = addressResult.getPhoneNumbers();
     boolean hasPhoneNumber = phoneNumbers != null && phoneNumbers.length > 0;
     String[] emails = addressResult.getEmails();
     boolean hasEmailAddress = emails != null && emails.length > 0;
 
-    mFields = new boolean[MAX_BUTTON_COUNT];
-    mFields[0] = true; // Add contact is always available
-    mFields[1] = hasAddress;
-    mFields[2] = hasPhoneNumber;
-    mFields[3] = hasEmailAddress;
+    fields = new boolean[MAX_BUTTON_COUNT];
+    fields[0] = true; // Add contact is always available
+    fields[1] = hasAddress;
+    fields[2] = hasPhoneNumber;
+    fields[3] = hasEmailAddress;
 
-    mButtonCount = 0;
+    buttonCount = 0;
     for (int x = 0; x < MAX_BUTTON_COUNT; x++) {
-      if (mFields[x]) {
-        mButtonCount++;
+      if (fields[x]) {
+        buttonCount++;
       }
     }
   }
 
   @Override
   public int getButtonCount() {
-    return mButtonCount;
+    return buttonCount;
   }
 
   @Override
@@ -102,19 +107,21 @@ public final class AddressBookResultHandler extends ResultHandler {
 
   @Override
   public void handleButtonPress(int index) {
-    AddressBookParsedResult addressResult = (AddressBookParsedResult) mResult;
+    AddressBookParsedResult addressResult = (AddressBookParsedResult) getResult();
+    String[] addresses = addressResult.getAddresses();
+    String address1 = addresses == null || addresses.length < 1 ? null : addresses[0];
     int action = mapIndexToAction(index);
     switch (action) {
       case 0:
         addContact(addressResult.getNames(), addressResult.getPhoneNumbers(),
             addressResult.getEmails(), addressResult.getNote(),
-            addressResult.getAddress(), addressResult.getOrg(),
+            address1, addressResult.getOrg(),
             addressResult.getTitle());
         break;
       case 1:
         String[] names = addressResult.getNames();
         String title = names != null ? names[0] : null;
-        searchMap(addressResult.getAddress(), title);
+        searchMap(address1, title);
         break;
       case 2:
         dialPhone(addressResult.getPhoneNumbers()[0]);
@@ -130,7 +137,7 @@ public final class AddressBookResultHandler extends ResultHandler {
   // Overriden so we can hyphenate phone numbers, format birthdays, and bold the name.
   @Override
   public CharSequence getDisplayContents() {
-    AddressBookParsedResult result = (AddressBookParsedResult) mResult;
+    AddressBookParsedResult result = (AddressBookParsedResult) getResult();
     StringBuffer contents = new StringBuffer();
     ParsedResult.maybeAppend(result.getNames(), contents);
     int namesLength = contents.length();
@@ -144,7 +151,7 @@ public final class AddressBookResultHandler extends ResultHandler {
 
     ParsedResult.maybeAppend(result.getTitle(), contents);
     ParsedResult.maybeAppend(result.getOrg(), contents);
-    ParsedResult.maybeAppend(result.getAddress(), contents);
+    ParsedResult.maybeAppend(result.getAddresses(), contents);
     String[] numbers = result.getPhoneNumbers();
     if (numbers != null) {
       for (String number : numbers) {
@@ -178,5 +185,4 @@ public final class AddressBookResultHandler extends ResultHandler {
   public int getDisplayTitle() {
     return R.string.result_address_book;
   }
-
 }