Fix bug w/ all day events (hr, min, sec need to be zero in DTSTART)

* For some reason, the recurrence expansion system requires hr, min, and sec
  to be zero for DTSTART when allDay=1
* Force hr, min, and sec to zero for all day events

Bug: 2427658
Change-Id: Ief6b5b571fa6bc6947bcbc9cda02ab2c04f27549
diff --git a/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
index 41b6a66..7a8e826 100644
--- a/src/com/android/exchange/adapter/CalendarSyncAdapter.java
+++ b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
@@ -52,6 +52,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.GregorianCalendar;
 import java.util.StringTokenizer;
 import java.util.TimeZone;
 
@@ -360,10 +361,17 @@
                 cv.put(Events.DTEND, endTime);
                 cv.put(Events.LAST_DATE, endTime);
             }
-
             // Set the DURATION using rfc2445
+            // For all day events, make sure hour, minute, and second are zero for DTSTART
             if (allDayEvent != 0) {
                 cv.put(Events.DURATION, "P1D");
+                GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+                cal.setTimeInMillis(startTime);
+                cal.set(GregorianCalendar.HOUR_OF_DAY, 0);
+                cal.set(GregorianCalendar.MINUTE, 0);
+                cal.set(GregorianCalendar.SECOND, 0);
+                cv.put(Events.DTSTART, cal.getTimeInMillis());
+                cv.put(Events.ORIGINAL_INSTANCE_TIME, cal.getTimeInMillis());
             } else {
                 cv.put(Events.DURATION, "P" + ((endTime - startTime) / MINUTES) + "M");
             }