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) {