Fix calendar availability
Bug: 6933598
Change-Id: Id481982de9bdc07dbc06722b69e788372ebf1c57
diff --git a/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
index c21be00..44a0ca0 100644
--- a/src/com/android/exchange/adapter/CalendarSyncAdapter.java
+++ b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
@@ -605,6 +605,9 @@
// Enforce CalendarProvider required properties
setTimeRelatedValues(cv, startTime, endTime, allDayEvent);
+ // Set user's availability
+ cv.put(Events.AVAILABILITY, CalendarUtilities.availabilityFromBusyStatus(busyStatus));
+
// If we haven't added the organizer to attendees, do it now
if (!organizerAdded) {
addOrganizerToAttendees(ops, eventId, organizerName, organizerEmail);
@@ -1712,24 +1715,9 @@
s.end(); // Attendees
}
- // Get busy status from Attendees table
- long eventId = entityValues.getAsLong(Events._ID);
- int busyStatus = CalendarUtilities.BUSY_STATUS_TENTATIVE;
- Cursor c = mService.mContentResolver.query(
- asSyncAdapter(Attendees.CONTENT_URI, mEmailAddress,
- Eas.EXCHANGE_ACCOUNT_MANAGER_TYPE),
- ATTENDEE_STATUS_PROJECTION, EVENT_AND_EMAIL,
- new String[] {Long.toString(eventId), mEmailAddress}, null);
- if (c != null) {
- try {
- if (c.moveToFirst()) {
- busyStatus = CalendarUtilities.busyStatusFromAttendeeStatus(
- c.getInt(ATTENDEE_STATUS_COLUMN_STATUS));
- }
- } finally {
- c.close();
- }
- }
+ // Get busy status from availability
+ int availability = entityValues.getAsInteger(Events.AVAILABILITY);
+ int busyStatus = CalendarUtilities.busyStatusFromAvailability(availability);
s.data(Tags.CALENDAR_BUSY_STATUS, Integer.toString(busyStatus));
// Meeting status, 0 = appointment, 1 = meeting, 3 = attendee
diff --git a/src/com/android/exchange/utility/CalendarUtilities.java b/src/com/android/exchange/utility/CalendarUtilities.java
index c416e9b..a3da002 100644
--- a/src/com/android/exchange/utility/CalendarUtilities.java
+++ b/src/com/android/exchange/utility/CalendarUtilities.java
@@ -1515,6 +1515,50 @@
return busyStatus;
}
+ /** Get a busy status from event availability
+ * The default here is TENTATIVE
+ * @param availability from CalendarProvider2
+ * @return the corresponding value of busy status
+ */
+ static public int busyStatusFromAvailability(int availability) {
+ int busyStatus;
+ switch (availability) {
+ case Events.AVAILABILITY_BUSY:
+ busyStatus = BUSY_STATUS_BUSY;
+ break;
+ case Events.AVAILABILITY_FREE:
+ busyStatus = BUSY_STATUS_FREE;
+ break;
+ case Events.AVAILABILITY_TENTATIVE:
+ default:
+ busyStatus = BUSY_STATUS_TENTATIVE;
+ break;
+ }
+ return busyStatus;
+ }
+
+ /** Get an event availability from busy status
+ * The default here is TENTATIVE
+ * @param busyStatus from CalendarProvider2
+ * @return the corresponding availability value
+ */
+ static public int availabilityFromBusyStatus(int busyStatus) {
+ int availability;
+ switch (busyStatus) {
+ case BUSY_STATUS_BUSY:
+ availability = Events.AVAILABILITY_BUSY;
+ break;
+ case BUSY_STATUS_FREE:
+ availability = Events.AVAILABILITY_FREE;
+ break;
+ case BUSY_STATUS_TENTATIVE:
+ default:
+ availability = Events.AVAILABILITY_TENTATIVE;
+ break;
+ }
+ return availability;
+ }
+
static public String buildMessageTextFromEntityValues(Context context,
ContentValues entityValues, StringBuilder sb) {
if (sb == null) {