merge in jb-release history after reset to jb-dev
diff --git a/README b/README
new file mode 100644
index 0000000..bfb9a28
--- /dev/null
+++ b/README
@@ -0,0 +1,5 @@
+To build and run tests:
+
+mmm -j20 frameworks/opt/calendar
+adb install -r $OUT/data/app/CalendarCommonTests.apk
+adb shell am instrument -w com.android.calendarcommon.tests/android.test.InstrumentationTestRunner
diff --git a/src/com/android/calendarcommon/EventRecurrence.java b/src/com/android/calendarcommon/EventRecurrence.java
index cf2b410..ac03e45 100644
--- a/src/com/android/calendarcommon/EventRecurrence.java
+++ b/src/com/android/calendarcommon/EventRecurrence.java
@@ -598,6 +598,10 @@
             parts = recur.split(";");
         }
         for (String part : parts) {
+            // allow empty part (e.g., double semicolon ";;")
+            if (TextUtils.isEmpty(part)) {
+                continue;
+            }
             int equalIndex = part.indexOf('=');
             if (equalIndex <= 0) {
                 /* no '=' or no LHS */
diff --git a/tests/src/com/android/calendarcommon/EventRecurrenceTest.java b/tests/src/com/android/calendarcommon/EventRecurrenceTest.java
index a058adf..efd5f1c 100644
--- a/tests/src/com/android/calendarcommon/EventRecurrenceTest.java
+++ b/tests/src/com/android/calendarcommon/EventRecurrenceTest.java
@@ -843,6 +843,11 @@
         "INTERVAL=4;FREQ=YEARLY",
         "FREQ=DAILY;X-WHATEVER=blah",
         //"freq=daily;wkst=su",                               // mixed case currently not allowed
+        "FREQ=WEEKLY;INTERVAL=2;BYDAY=Mo;;UNTIL=20120327T000000Z", // double simicolon should be allowed
+        "FREQ=MONTHLY;BYDAY=1Mo",
+        "FREQ=MONTHLY;BYDAY=2Mo,2We,4Mo,4We",
+        "FREQ=MONTHLY;WKST=SU;BYMONTHDAY=25;UNTIL=20110524",
+        "FREQ=WEEKLY;BYDAY=MO;WKST=SU;UNTIL=20111218T010000Z"
     };
 
     /** The parser must reject these. */