Merge "Fix #2451630 (No calendar after upgrading Eclair->Froyo)"

This commit is contained in:
Marc Blank 2010-02-18 20:27:20 -08:00 committed by Android (Google) Code Review
commit 2867bf775a
3 changed files with 44 additions and 26 deletions

View File

@ -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();

View File

@ -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;
}

View File

@ -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;
}
}