Merge commit '29270f382389b8370f56941ca2209bfe11c5c6f3' into kraken * commit '29270f382389b8370f56941ca2209bfe11c5c6f3': Don't enable calendar sync if sync_events is disabled
This commit is contained in:
commit
f0ef73dd82
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user