Delete calendar properly on commanded wipe
* CalendarProvider2 has unusual semantics for its delete operation on
Calendars; this caused the user's calendar NOT to be deleted when
the server commanded a wipe of calendar data. The result was
duplication of events after the subsequent resync
Bug: 3361000
Change-Id: I672034a7a444eb7ebdea60cd6dc66a31087cc6f7
diff --git a/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
index 197cdcf..bb392d2 100644
--- a/src/com/android/exchange/adapter/CalendarSyncAdapter.java
+++ b/src/com/android/exchange/adapter/CalendarSyncAdapter.java
@@ -38,6 +38,7 @@
import android.content.EntityIterator;
import android.content.OperationApplicationException;
import android.database.Cursor;
+import android.database.DatabaseUtils;
import android.net.Uri;
import android.os.RemoteException;
import android.provider.Calendar;
@@ -192,8 +193,11 @@
@Override
public void wipe() {
// Delete the calendar associated with this account
- mContentResolver.delete(Calendars.CONTENT_URI, CALENDAR_SELECTION,
- new String[] {mEmailAddress, Email.EXCHANGE_ACCOUNT_MANAGER_TYPE});
+ // CalendarProvider2 does NOT handle selection arguments in deletions
+ mContentResolver.delete(Calendars.CONTENT_URI, Calendars._SYNC_ACCOUNT +
+ "=" + DatabaseUtils.sqlEscapeString(mEmailAddress) + " AND " +
+ Calendars._SYNC_ACCOUNT_TYPE + "=" +
+ DatabaseUtils.sqlEscapeString(Email.EXCHANGE_ACCOUNT_MANAGER_TYPE), null);
}
@Override