am 422ceb0e: Merge "Don\'t enable calendar sync if sync_events is disabled" into froyo

Merge commit '422ceb0efd3d1605e6a9d8b25f408cbdd85bfc15' into froyo-plus-aosp

* commit '422ceb0efd3d1605e6a9d8b25f408cbdd85bfc15':
  Don't enable calendar sync if sync_events is disabled
This commit is contained in:
Marc Blank 2010-04-27 12:03:02 -07:00 committed by Android Git Automerger
commit 29270f3823

View File

@ -656,6 +656,21 @@ public class SyncManager extends Service implements Runnable {
mCalendarObservers.clear(); mCalendarObservers.clear();
} }
/**
* Return the syncable state of an account's calendar, as determined by the sync_events column
* of our Calendar (from CalendarProvider2)
* Note that the current state of sync_events is cached in our CalendarObserver
* @param accountId the id of the account whose calendar we are checking
* @return whether or not syncing of events is enabled
*/
private boolean isCalendarEnabled(long accountId) {
CalendarObserver observer = mCalendarObservers.get(accountId);
if (observer != null) {
return (observer.mSyncEvents == 1);
}
return false;
}
private class CalendarObserver extends ContentObserver { private class CalendarObserver extends ContentObserver {
long mAccountId; long mAccountId;
long mCalendarId; long mCalendarId;
@ -706,7 +721,6 @@ public class SyncManager extends Service implements Runnable {
mAccountId, Mailbox.TYPE_CALENDAR); mAccountId, Mailbox.TYPE_CALENDAR);
// Sanity check for mailbox deletion // Sanity check for mailbox deletion
if (mailbox == null) return; if (mailbox == null) return;
ContentValues cv = new ContentValues();
if (newSyncEvents == 0) { if (newSyncEvents == 0) {
// When sync is disabled, we're supposed to delete // When sync is disabled, we're supposed to delete
// all events in the calendar // all events in the calendar
@ -725,8 +739,10 @@ public class SyncManager extends Service implements Runnable {
// The provider can't be reached; nothing to be done // The provider can't be reached; nothing to be done
} }
// Reset the sync key locally // Reset the sync key locally
ContentValues cv = new ContentValues();
cv.put(Mailbox.SYNC_KEY, "0"); cv.put(Mailbox.SYNC_KEY, "0");
cv.put(Mailbox.SYNC_INTERVAL, Mailbox.CHECK_INTERVAL_NEVER); mResolver.update(ContentUris.withAppendedId(
Mailbox.CONTENT_URI, mailbox.mId), cv, null, null);
// Delete all events in this calendar using the sync adapter // Delete all events in this calendar using the sync adapter
// parameter so that the deletion is only local // parameter so that the deletion is only local
Uri eventsAsSyncAdapter = Uri eventsAsSyncAdapter =
@ -737,15 +753,9 @@ public class SyncManager extends Service implements Runnable {
mResolver.delete(eventsAsSyncAdapter, WHERE_CALENDAR_ID, mResolver.delete(eventsAsSyncAdapter, WHERE_CALENDAR_ID,
new String[] {Long.toString(mCalendarId)}); new String[] {Long.toString(mCalendarId)});
} else { } else {
// Set sync back to push
cv.put(Mailbox.SYNC_INTERVAL, Mailbox.CHECK_INTERVAL_PUSH);
kick("calendar sync changed"); kick("calendar sync changed");
} }
// Update the calendar mailbox with new settings
mResolver.update(ContentUris.withAppendedId(
Mailbox.CONTENT_URI, mailbox.mId), cv, null, null);
// Save away the new value // Save away the new value
mSyncEvents = newSyncEvents; mSyncEvents = newSyncEvents;
} }
@ -1952,25 +1962,6 @@ public class SyncManager extends Service implements Runnable {
continue; continue;
} }
// Check whether we're in a hold (temporary or permanent)
SyncError syncError = mSyncErrorMap.get(mid);
if (syncError != null) {
// Nothing we can do about fatal errors
if (syncError.fatal) continue;
if (now < syncError.holdEndTime) {
// If release time is earlier than next wait time,
// move next wait time up to the release time
if (syncError.holdEndTime < now + nextWait) {
nextWait = syncError.holdEndTime - now;
mNextWaitReason = "Release hold";
}
continue;
} else {
// Keep the error around, but clear the end time
syncError.holdEndTime = 0;
}
}
if (type == Mailbox.TYPE_CONTACTS || type == Mailbox.TYPE_CALENDAR) { if (type == Mailbox.TYPE_CONTACTS || type == Mailbox.TYPE_CALENDAR) {
// We don't sync these automatically if master auto sync is off // We don't sync these automatically if master auto sync is off
if (!masterAutoSync) { if (!masterAutoSync) {
@ -1997,12 +1988,35 @@ public class SyncManager extends Service implements Runnable {
// See if "sync automatically" is set; if not, punt // See if "sync automatically" is set; if not, punt
if (!ContentResolver.getSyncAutomatically(a, authority)) { if (!ContentResolver.getSyncAutomatically(a, authority)) {
continue; continue;
// See if the calendar is enabled; if not, punt
} else if ((type == Mailbox.TYPE_CALENDAR) &&
!isCalendarEnabled(account.mId)) {
continue;
} }
} }
} else if (type == Mailbox.TYPE_TRASH) { } else if (type == Mailbox.TYPE_TRASH) {
continue; continue;
} }
// Check whether we're in a hold (temporary or permanent)
SyncError syncError = mSyncErrorMap.get(mid);
if (syncError != null) {
// Nothing we can do about fatal errors
if (syncError.fatal) continue;
if (now < syncError.holdEndTime) {
// If release time is earlier than next wait time,
// move next wait time up to the release time
if (syncError.holdEndTime < now + nextWait) {
nextWait = syncError.holdEndTime - now;
mNextWaitReason = "Release hold";
}
continue;
} else {
// Keep the error around, but clear the end time
syncError.holdEndTime = 0;
}
}
// Otherwise, we use the sync interval // Otherwise, we use the sync interval
long interval = c.getInt(Mailbox.CONTENT_SYNC_INTERVAL_COLUMN); long interval = c.getInt(Mailbox.CONTENT_SYNC_INTERVAL_COLUMN);
if (interval == Mailbox.CHECK_INTERVAL_PUSH) { if (interval == Mailbox.CHECK_INTERVAL_PUSH) {