Don't trigger a sync for ALERTS tables
Bug: 11350900
Change-Id: Iede3da60cb45ac496bea90c85d06eac36af617e1
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index 344f6c1..0ac6a6c 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -820,6 +820,17 @@
mContentResolver.notifyChange(CalendarContract.CONTENT_URI, null, syncToNetwork);
}
+ /**
+ * ALERT table is maintained locally so don't request a sync for changes in it
+ */
+ @Override
+ protected boolean shouldSyncFor(Uri uri) {
+ final int match = sUriMatcher.match(uri);
+ return !(match == CALENDAR_ALERTS ||
+ match == CALENDAR_ALERTS_ID ||
+ match == CALENDAR_ALERTS_BY_INSTANCE);
+ }
+
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
diff --git a/src/com/android/providers/calendar/SQLiteContentProvider.java b/src/com/android/providers/calendar/SQLiteContentProvider.java
index 3396c3d..ad0e028 100644
--- a/src/com/android/providers/calendar/SQLiteContentProvider.java
+++ b/src/com/android/providers/calendar/SQLiteContentProvider.java
@@ -105,7 +105,7 @@
mDb.endTransaction();
}
- onEndTransaction(isCallerSyncAdapter);
+ onEndTransaction(!isCallerSyncAdapter && shouldSyncFor(uri));
} else {
result = insertInTransaction(uri, values, isCallerSyncAdapter);
if (result != null) {
@@ -136,7 +136,7 @@
mDb.endTransaction();
}
- onEndTransaction(isCallerSyncAdapter);
+ onEndTransaction(!isCallerSyncAdapter);
return numValues;
}
@@ -161,7 +161,7 @@
mDb.endTransaction();
}
- onEndTransaction(isCallerSyncAdapter);
+ onEndTransaction(!isCallerSyncAdapter && shouldSyncFor(uri));
} else {
count = updateInTransaction(uri, values, selection, selectionArgs,
isCallerSyncAdapter);
@@ -193,7 +193,7 @@
mDb.endTransaction();
}
- onEndTransaction(isCallerSyncAdapter);
+ onEndTransaction(!isCallerSyncAdapter && shouldSyncFor(uri));
} else {
count = deleteInTransaction(uri, selection, selectionArgs, isCallerSyncAdapter);
if (count > 0) {
@@ -238,7 +238,7 @@
} finally {
mApplyingBatch.set(false);
mDb.endTransaction();
- onEndTransaction(isCallerSyncAdapter);
+ onEndTransaction(!isCallerSyncAdapter);
Binder.restoreCallingIdentity(identity);
}
}
@@ -262,11 +262,16 @@
protected void beforeTransactionCommit() {
}
- protected void onEndTransaction(boolean isCallerSyncAdapter) {
+ protected void onEndTransaction(boolean syncToNetwork) {
if (mNotifyChange) {
mNotifyChange = false;
// We sync to network if the caller was not the sync adapter
- notifyChange(!isCallerSyncAdapter);
+ notifyChange(syncToNetwork);
}
}
+
+ /**
+ * Some URI's are maintained locally so we should not request a sync for them
+ */
+ protected abstract boolean shouldSyncFor(Uri uri);
}
diff --git a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
index 9aa02bf..e31f881 100644
--- a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
+++ b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
@@ -4,6 +4,7 @@
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
+import android.net.Uri;
import android.os.PowerManager;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -39,6 +40,11 @@
mCalendarAlarm.getScheduleNextAlarmWakeLock();
}
+ @Override
+ protected boolean shouldSyncFor(Uri uri) {
+ return true;
+ }
+
private static class MockCalendarAlarmManager extends CalendarAlarmManager {
public MockCalendarAlarmManager(Context context) {