diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java index b46ad4141..9c4cac6a6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java @@ -25,7 +25,9 @@ import android.widget.Toast; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Calendar; import java.util.Enumeration; +import java.util.GregorianCalendar; import java.util.Hashtable; import java.util.List; @@ -173,9 +175,19 @@ public class CalendarReceiver extends BroadcastReceiver { CalendarEventSpec calendarEventSpec = new CalendarEventSpec(); calendarEventSpec.id = i; calendarEventSpec.title = calendarEvent.getTitle(); + calendarEventSpec.allDay = calendarEvent.isAllDay(); calendarEventSpec.timestamp = calendarEvent.getBeginSeconds(); //calendarEventSpec.durationInSeconds = calendarEvent.getDurationSeconds(); //FIXME: leads to problems right now + if (calendarEvent.isAllDay()) { + //force the all day events to begin at midnight and last a whole day + Calendar c = GregorianCalendar.getInstance(); + c.setTimeInMillis(calendarEvent.getBegin()); + c.set(Calendar.HOUR, 0); + calendarEventSpec.timestamp = (int) (c.getTimeInMillis() / 1000); + //calendarEventSpec.durationInSeconds = 24 * 60 *60; //TODO: commented because it is commented above + } calendarEventSpec.description = calendarEvent.getDescription(); + calendarEventSpec.location = calendarEvent.getLocation(); calendarEventSpec.type = CalendarEventSpec.TYPE_UNKNOWN; if (syncState == EventState.NEEDS_UPDATE) { GBApplication.deviceService().onDeleteCalendarEvent(CalendarEventSpec.TYPE_UNKNOWN, i); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEventSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEventSpec.java index eb1130785..d3035ba29 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEventSpec.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEventSpec.java @@ -27,4 +27,6 @@ public class CalendarEventSpec { public int durationInSeconds; public String title; public String description; + public String location; + public boolean allDay; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEvents.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEvents.java index 8172dc138..7be8ee64b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEvents.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/CalendarEvents.java @@ -21,7 +21,6 @@ import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; -import android.provider.CalendarContract; import android.provider.CalendarContract.Instances; import java.util.ArrayList; @@ -48,7 +47,8 @@ public class CalendarEvents { Instances.TITLE, Instances.DESCRIPTION, Instances.EVENT_LOCATION, - Instances.CALENDAR_DISPLAY_NAME + Instances.CALENDAR_DISPLAY_NAME, + Instances.ALL_DAY }; private static final int lookahead_days = 7; @@ -63,16 +63,16 @@ public class CalendarEvents { private boolean fetchSystemEvents(Context mContext) { Calendar cal = GregorianCalendar.getInstance(); - Long dtStart = cal.getTime().getTime(); + Long dtStart = cal.getTimeInMillis(); cal.add(Calendar.DATE, lookahead_days); - Long dtEnd = cal.getTime().getTime(); + Long dtEnd = cal.getTimeInMillis(); - Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI.buildUpon(); + Uri.Builder eventsUriBuilder = Instances.CONTENT_URI.buildUpon(); ContentUris.appendId(eventsUriBuilder, dtStart); ContentUris.appendId(eventsUriBuilder, dtEnd); Uri eventsUri = eventsUriBuilder.build(); - try (Cursor evtCursor = mContext.getContentResolver().query(eventsUri, EVENT_INSTANCE_PROJECTION, null, null, CalendarContract.Instances.BEGIN + " ASC")) { + try (Cursor evtCursor = mContext.getContentResolver().query(eventsUri, EVENT_INSTANCE_PROJECTION, null, null, Instances.BEGIN + " ASC")) { if (evtCursor == null || evtCursor.getCount() == 0) { return false; } @@ -84,7 +84,8 @@ public class CalendarEvents { evtCursor.getString(4), evtCursor.getString(5), evtCursor.getString(6), - evtCursor.getString(7) + evtCursor.getString(7), + !evtCursor.getString(8).equals("0") ); calendarEventList.add(calEvent); } @@ -100,8 +101,9 @@ public class CalendarEvents { private String description; private String location; private String calName; + private boolean allDay; - public CalendarEvent(long begin, long end, long id, String title, String description, String location, String calName) { + public CalendarEvent(long begin, long end, long id, String title, String description, String location, String calName, boolean allDay) { this.begin = begin; this.end = end; this.id = id; @@ -109,6 +111,7 @@ public class CalendarEvents { this.description = description; this.location = location; this.calName = calName; + this.allDay = allDay; } public long getBegin() { @@ -156,6 +159,10 @@ public class CalendarEvents { return calName; } + public boolean isAllDay() { + return allDay; + } + @Override public boolean equals(Object other) { if (other instanceof CalendarEvent) { @@ -166,7 +173,8 @@ public class CalendarEvents { Objects.equals(this.getLocation(), e.getLocation()) && Objects.equals(this.getDescription(), e.getDescription()) && (this.getEnd() == e.getEnd()) && - Objects.equals(this.getCalName(), e.getCalName()); + Objects.equals(this.getCalName(), e.getCalName()) && + (this.isAllDay() == e.isAllDay()); } else { return false; } @@ -175,12 +183,13 @@ public class CalendarEvents { @Override public int hashCode() { int result = (int) id; - result = 31 * result + title.hashCode(); + result = 31 * result + Objects.hash(title); result = 31 * result + Long.valueOf(begin).hashCode(); - result = 31 * result + location.hashCode(); - result = 31 * result + description.hashCode(); + result = 31 * result + Objects.hash(location); + result = 31 * result + Objects.hash(description); result = 31 * result + Long.valueOf(end).hashCode(); - result = 31 * result + calName.hashCode(); + result = 31 * result + Objects.hash(calName); + result = 31 * result + Boolean.valueOf(allDay).hashCode(); return result; } }