Style-related changes
[zxing.git] / android / src / com / google / zxing / client / android / result / AddressBookResultHandler.java
index 16df105..004abd5 100644 (file)
@@ -37,7 +37,13 @@ import java.util.Date;
  * @author dswitkin@google.com (Daniel Switkin)
  */
 public final class AddressBookResultHandler extends ResultHandler {
-  private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
+
+  private static final DateFormat[] DATE_FORMATS = {
+    new SimpleDateFormat("yyyyMMdd"),
+    new SimpleDateFormat("yyyyMMdd'T'HHmmss"),
+    new SimpleDateFormat("yyyy-MM-dd"),
+    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"),
+  };
 
   private final boolean[] fields;
   private int buttonCount;
@@ -108,18 +114,20 @@ public final class AddressBookResultHandler extends ResultHandler {
   @Override
   public void handleButtonPress(int index) {
     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]);
@@ -132,6 +140,19 @@ public final class AddressBookResultHandler extends ResultHandler {
     }
   }
 
+  private static Date parseDate(String s) {
+    for (DateFormat currentFomat : DATE_FORMATS) {
+      synchronized (currentFomat) {
+        currentFomat.setLenient(false);
+        Date result = currentFomat.parse(s, new ParsePosition(0));
+        if (result != null) {
+          return result;
+        }
+      }
+    }
+    return null;
+  }
+
   // Overriden so we can hyphenate phone numbers, format birthdays, and bold the name.
   @Override
   public CharSequence getDisplayContents() {
@@ -149,7 +170,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) {
@@ -161,11 +182,10 @@ public final class AddressBookResultHandler extends ResultHandler {
 
     String birthday = result.getBirthday();
     if (birthday != null && birthday.length() > 0) {
-      Date date;
-      synchronized (DATE_FORMAT) {
-        date = DATE_FORMAT.parse(birthday, new ParsePosition(0));
+      Date date = parseDate(birthday);
+      if (date != null) {
+        ParsedResult.maybeAppend(DateFormat.getDateInstance().format(date.getTime()), contents);
       }
-      ParsedResult.maybeAppend(DateFormat.getDateInstance().format(date.getTime()), contents);
     }
     ParsedResult.maybeAppend(result.getNote(), contents);