diff --git a/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/src/com/android/exchange/adapter/CalendarSyncAdapter.java index 11821c959..2be5a9dd3 100644 --- a/src/com/android/exchange/adapter/CalendarSyncAdapter.java +++ b/src/com/android/exchange/adapter/CalendarSyncAdapter.java @@ -108,6 +108,8 @@ public class CalendarSyncAdapter extends AbstractSyncAdapter { try { if (c.moveToFirst()) { mCalendarId = c.getLong(CALENDAR_SELECTION_ID); + } else { + mCalendarId = CalendarUtilities.createCalendar(mService, mAccount, mMailbox); } } finally { c.close(); diff --git a/src/com/android/exchange/adapter/FolderSyncParser.java b/src/com/android/exchange/adapter/FolderSyncParser.java index a5b9e07f8..50ecea6cb 100644 --- a/src/com/android/exchange/adapter/FolderSyncParser.java +++ b/src/com/android/exchange/adapter/FolderSyncParser.java @@ -17,7 +17,6 @@ package com.android.exchange.adapter; -import com.android.email.Email; import com.android.email.provider.AttachmentProvider; import com.android.email.provider.EmailContent; import com.android.email.provider.EmailProvider; @@ -34,10 +33,7 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.OperationApplicationException; import android.database.Cursor; -import android.net.Uri; import android.os.RemoteException; -import android.provider.Calendar.Calendars; -import android.text.format.Time; import java.io.IOException; import java.io.InputStream; @@ -244,28 +240,6 @@ public class FolderSyncParser extends AbstractSyncParser { case CALENDAR_TYPE: m.mType = Mailbox.TYPE_CALENDAR; m.mSyncInterval = mAccount.mSyncInterval; - - // Create a Calendar object - ContentValues cv = new ContentValues(); - // TODO How will this change if the user changes his account display name? - cv.put(Calendars.DISPLAY_NAME, mAccount.mDisplayName); - cv.put(Calendars._SYNC_ACCOUNT, mAccount.mEmailAddress); - cv.put(Calendars._SYNC_ACCOUNT_TYPE, Email.EXCHANGE_ACCOUNT_MANAGER_TYPE); - cv.put(Calendars.SYNC_EVENTS, 1); - cv.put(Calendars.SELECTED, 1); - cv.put(Calendars.HIDDEN, 0); - // TODO Coordinate account colors w/ Calendar, if possible - // Make Email account color opaque - cv.put(Calendars.COLOR, 0xFF000000 | Email.getAccountColor(mAccountId)); - cv.put(Calendars.TIMEZONE, Time.getCurrentTimezone()); - cv.put(Calendars.ACCESS_LEVEL, Calendars.OWNER_ACCESS); - cv.put(Calendars.OWNER_ACCOUNT, mAccount.mEmailAddress); - - Uri uri = mService.mContentResolver.insert(Calendars.CONTENT_URI, cv); - // We save the id of the calendar into mSyncStatus - if (uri != null) { - m.mSyncStatus = uri.getPathSegments().get(1); - } break; } diff --git a/src/com/android/exchange/utility/CalendarUtilities.java b/src/com/android/exchange/utility/CalendarUtilities.java index 655b5882e..4ae2e46c8 100644 --- a/src/com/android/exchange/utility/CalendarUtilities.java +++ b/src/com/android/exchange/utility/CalendarUtilities.java @@ -16,12 +16,20 @@ package com.android.exchange.utility; +import com.android.email.Email; +import com.android.email.provider.EmailContent.Account; +import com.android.email.provider.EmailContent.Mailbox; import com.android.exchange.Eas; +import com.android.exchange.EasSyncService; import com.android.exchange.adapter.Serializer; import com.android.exchange.adapter.Tags; import org.bouncycastle.util.encoders.Base64; +import android.content.ContentValues; +import android.net.Uri; +import android.provider.Calendar.Calendars; +import android.text.format.Time; import android.util.Log; import java.io.IOException; @@ -776,4 +784,38 @@ public class CalendarUtilities { return rrule.toString(); } + + /** + * Create a Calendar in CalendarProvider to which synced Events will be linked + * @param service the sync service requesting Calendar creation + * @param account the account being synced + * @param mailbox the Exchange mailbox for the calendar + * @return the unique id of the Calendar + */ + static public long createCalendar(EasSyncService service, Account account, Mailbox mailbox) { + // Create a Calendar object + ContentValues cv = new ContentValues(); + // TODO How will this change if the user changes his account display name? + cv.put(Calendars.DISPLAY_NAME, account.mDisplayName); + cv.put(Calendars._SYNC_ACCOUNT, account.mEmailAddress); + cv.put(Calendars._SYNC_ACCOUNT_TYPE, Email.EXCHANGE_ACCOUNT_MANAGER_TYPE); + cv.put(Calendars.SYNC_EVENTS, 1); + cv.put(Calendars.SELECTED, 1); + cv.put(Calendars.HIDDEN, 0); + // TODO Coordinate account colors w/ Calendar, if possible + // Make Email account color opaque + cv.put(Calendars.COLOR, 0xFF000000 | Email.getAccountColor(account.mId)); + cv.put(Calendars.TIMEZONE, Time.getCurrentTimezone()); + cv.put(Calendars.ACCESS_LEVEL, Calendars.OWNER_ACCESS); + cv.put(Calendars.OWNER_ACCOUNT, account.mEmailAddress); + + Uri uri = service.mContentResolver.insert(Calendars.CONTENT_URI, cv); + // We save the id of the calendar into mSyncStatus + if (uri != null) { + String stringId = uri.getPathSegments().get(1); + mailbox.mSyncStatus = stringId; + return Long.parseLong(stringId); + } + return -1; + } } \ No newline at end of file