From 2a39db57dd0a0c0852aaa40b445230895b5d4ade Mon Sep 17 00:00:00 2001 From: Evan Bacon Date: Mon, 6 Jan 2020 20:59:42 -0800 Subject: [PATCH] Prevent invalid dates from throwing an error on Android fix #4757 --- .../java/expo/modules/contacts/Contact.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java index 3b7f74c5b89c1..c9d791a1db679 100644 --- a/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java +++ b/packages/expo-contacts/android/src/main/java/expo/modules/contacts/Contact.java @@ -384,34 +384,38 @@ public Bundle toMap(Set fieldSet) throws ParseException { SimpleDateFormat datePattern = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); SimpleDateFormat noYearPattern = new SimpleDateFormat("--MM-dd", Locale.getDefault()); - ArrayList datesArray = new ArrayList(); - for (BaseModel item : dates) { - Bundle details = new Bundle(); - String dateString = item.getData(); - String label = item.getLabel(); - - hasYear = !dateString.startsWith("--"); - - if (hasYear) { - calendar.setTime(datePattern.parse(dateString)); - } else { - calendar.setTime(noYearPattern.parse(dateString)); - } - - if (hasYear) { - details.putInt("year", calendar.get(Calendar.YEAR)); - } - details.putInt("month", calendar.get(Calendar.MONTH)); - details.putInt("day", calendar.get(Calendar.DAY_OF_MONTH)); - // TODO: Evan: The type is only supported in 26+ - details.putString("format", "gregorian"); - if (showBirthday && label != null && label.equals("birthday")) { - contact.putBundle("birthday", details); - } else { - details.putString("label", label); - datesArray.add(details); + ArrayList datesArray = new ArrayList(); + try { + for (BaseModel item : dates) { + Bundle details = new Bundle(); + String dateString = item.getData(); + String label = item.getLabel(); + + hasYear = !dateString.startsWith("--"); + + if (hasYear) { + calendar.setTime(datePattern.parse(dateString)); + } else { + calendar.setTime(noYearPattern.parse(dateString)); + } + + if (hasYear) { + details.putInt("year", calendar.get(Calendar.YEAR)); + } + details.putInt("month", calendar.get(Calendar.MONTH)); + details.putInt("day", calendar.get(Calendar.DAY_OF_MONTH)); + // TODO: Evan: The type is only supported in 26+ + details.putString("format", "gregorian"); + if (showBirthday && label != null && label.equals("birthday")) { + contact.putBundle("birthday", details); + } else { + details.putString("label", label); + datesArray.add(details); + } } + } catch (Exception e) { } + if (showDates && datesArray.size() > 0) { contact.putParcelableArrayList("dates", datesArray); }