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) {