Increase Sync Windows

Bug: 10935007

Change-Id: Ibf97b9369398a394f4cda60624386559c842a031
diff --git a/src/com/android/exchange/adapter/AbstractSyncAdapter.java b/src/com/android/exchange/adapter/AbstractSyncAdapter.java
index c8ffe75..23bcb68 100644
--- a/src/com/android/exchange/adapter/AbstractSyncAdapter.java
+++ b/src/com/android/exchange/adapter/AbstractSyncAdapter.java
@@ -50,8 +50,6 @@
     public static final int DAYS = HOURS*24;
     public static final int WEEKS = DAYS*7;
 
-    protected static final String PIM_WINDOW_SIZE = "4";
-
     private static final long SEPARATOR_ID = Long.MAX_VALUE;
 
     public Mailbox mMailbox;
@@ -97,36 +95,6 @@
     }
 
     /**
-     * Set sync options common to PIM's (contacts and calendar)
-     * @param protocolVersion the protocol version under which we're syncing
-     * @param filter the filter to use (or null)
-     * @param s the Serializer
-     * @throws IOException
-     */
-    protected void setPimSyncOptions(Double protocolVersion, String filter, Serializer s)
-            throws IOException {
-        s.tag(Tags.SYNC_DELETES_AS_MOVES);
-        s.tag(Tags.SYNC_GET_CHANGES);
-        s.data(Tags.SYNC_WINDOW_SIZE, PIM_WINDOW_SIZE);
-        s.start(Tags.SYNC_OPTIONS);
-        // Set the filter (lookback), if provided
-        if (filter != null) {
-            s.data(Tags.SYNC_FILTER_TYPE, filter);
-        }
-        // Set the truncation amount and body type
-        if (protocolVersion >= Eas.SUPPORTED_PROTOCOL_EX2007_DOUBLE) {
-            s.start(Tags.BASE_BODY_PREFERENCE);
-            // Plain text
-            s.data(Tags.BASE_TYPE, Eas.BODY_PREFERENCE_TEXT);
-            s.data(Tags.BASE_TRUNCATION_SIZE, Eas.EAS12_TRUNCATION_SIZE);
-            s.end();
-        } else {
-            s.data(Tags.SYNC_TRUNCATION, Eas.EAS2_5_TRUNCATION_SIZE);
-        }
-        s.end();
-    }
-
-    /**
      * Returns the current SyncKey; override if the SyncKey is stored elsewhere (as for Contacts)
      * @return the current SyncKey for the Mailbox
      * @throws IOException
diff --git a/src/com/android/exchange/adapter/CalendarSyncParser.java b/src/com/android/exchange/adapter/CalendarSyncParser.java
index b86dcfe..dc43b3c 100644
--- a/src/com/android/exchange/adapter/CalendarSyncParser.java
+++ b/src/com/android/exchange/adapter/CalendarSyncParser.java
@@ -1321,18 +1321,12 @@
             int offset = 0;
             for (Operation op: ops) {
                 if (op.mSeparator) {
-                    try {
-                        //mService.userLog("Try mini-batch of ", mini.size(), " CPO's");
-                        applyAndCopyResults(contentResolver, authority, mini, result, offset);
-                        mini.clear();
-                        // Save away the offset here; this will need to be subtracted out of the
-                        // value originally set by the adapter
-                        offset = count + 1; // Remember to add 1 for the separator!
-                    } catch (TransactionTooLargeException e1) {
-                        throw new RuntimeException("Can't send transaction; sync stopped.");
-                    } catch (RemoteException e1) {
-                        throw e1;
-                    }
+                    //mService.userLog("Try mini-batch of ", mini.size(), " CPO's");
+                    applyAndCopyResults(contentResolver, authority, mini, result, offset);
+                    mini.clear();
+                    // Save away the offset here; this will need to be subtracted out of the
+                    // value originally set by the adapter
+                    offset = count + 1; // Remember to add 1 for the separator!
                 } else {
                     mini.add(op);
                 }
diff --git a/src/com/android/exchange/adapter/ContactsSyncParser.java b/src/com/android/exchange/adapter/ContactsSyncParser.java
index 559187a..5704f57 100644
--- a/src/com/android/exchange/adapter/ContactsSyncParser.java
+++ b/src/com/android/exchange/adapter/ContactsSyncParser.java
@@ -1,25 +1,20 @@
 package com.android.exchange.adapter;
 
 import android.content.ContentProviderOperation;
+import android.content.ContentProviderOperation.Builder;
 import android.content.ContentProviderResult;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Entity;
+import android.content.Entity.NamedContentValues;
 import android.content.EntityIterator;
 import android.content.OperationApplicationException;
-import android.content.ContentProviderOperation.Builder;
-import android.content.Entity.NamedContentValues;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.RemoteException;
 import android.provider.ContactsContract;
-import android.provider.SyncStateContract;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Groups;
-import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.SyncState;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
@@ -33,6 +28,10 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.SyncState;
+import android.provider.SyncStateContract;
 import android.text.util.Rfc822Token;
 import android.text.util.Rfc822Tokenizer;
 import android.util.Base64;
@@ -800,7 +799,7 @@
         private int mContactBackValue = mCount;
         // Make an array big enough for the PIM window (max items we can get)
         private final int[] mContactIndexArray =
-            new int[Integer.parseInt(AbstractSyncAdapter.PIM_WINDOW_SIZE)];
+            new int[EasContactsSyncHandler.PIM_WINDOW_SIZE_CONTACTS];
         private int mContactIndexCount = 0;
         private ContentProviderResult[] mResults = null;
 
diff --git a/src/com/android/exchange/service/EasCalendarSyncHandler.java b/src/com/android/exchange/service/EasCalendarSyncHandler.java
index 698a9af..3646fca 100644
--- a/src/com/android/exchange/service/EasCalendarSyncHandler.java
+++ b/src/com/android/exchange/service/EasCalendarSyncHandler.java
@@ -226,7 +226,7 @@
 
     @Override
     protected void setNonInitialSyncOptions(final Serializer s) throws IOException {
-        setPimSyncOptions(s, Eas.FILTER_2_WEEKS);
+        setPimSyncOptions(s, Eas.FILTER_2_WEEKS, PIM_WINDOW_SIZE_CALENDAR);
     }
 
     /**
diff --git a/src/com/android/exchange/service/EasContactsSyncHandler.java b/src/com/android/exchange/service/EasContactsSyncHandler.java
index 8daf3eb..dcc62fc 100644
--- a/src/com/android/exchange/service/EasContactsSyncHandler.java
+++ b/src/com/android/exchange/service/EasContactsSyncHandler.java
@@ -239,7 +239,7 @@
 
     @Override
     protected void setNonInitialSyncOptions(final Serializer s) throws IOException {
-        setPimSyncOptions(s, null);
+        setPimSyncOptions(s, null, PIM_WINDOW_SIZE_CONTACTS);
     }
 
     /**
diff --git a/src/com/android/exchange/service/EasMailboxSyncHandler.java b/src/com/android/exchange/service/EasMailboxSyncHandler.java
index ab297a4..c69a83e 100644
--- a/src/com/android/exchange/service/EasMailboxSyncHandler.java
+++ b/src/com/android/exchange/service/EasMailboxSyncHandler.java
@@ -33,7 +33,7 @@
     private static final String[] FETCH_REQUEST_PROJECTION = { SyncColumns.SERVER_ID };
     private static final int FETCH_REQUEST_SERVER_ID = 0;
 
-    private static final String EMAIL_WINDOW_SIZE = "5";
+    private static final int EMAIL_WINDOW_SIZE = 10;
 
     /**
      * List of server ids for messages to fetch from the server.
@@ -133,7 +133,7 @@
                 s.data(Tags.SYNC_DELETES_AS_MOVES, isTrashMailbox ? "0" : "1");
             }
             s.tag(Tags.SYNC_GET_CHANGES);
-            s.data(Tags.SYNC_WINDOW_SIZE, EMAIL_WINDOW_SIZE);
+            s.data(Tags.SYNC_WINDOW_SIZE, String.valueOf(EMAIL_WINDOW_SIZE));
             s.start(Tags.SYNC_OPTIONS);
             // Set the lookback appropriately (EAS calls this a "filter")
             s.data(Tags.SYNC_FILTER_TYPE, getEmailFilter());
diff --git a/src/com/android/exchange/service/EasSyncHandler.java b/src/com/android/exchange/service/EasSyncHandler.java
index 29f55b5..02ba144 100644
--- a/src/com/android/exchange/service/EasSyncHandler.java
+++ b/src/com/android/exchange/service/EasSyncHandler.java
@@ -76,8 +76,9 @@
 public abstract class EasSyncHandler extends EasServerConnection {
     private static final String TAG = "EasSyncHandler";
 
-    /** Window size for PIM (contact & calendar) sync options. */
-    protected static final String PIM_WINDOW_SIZE = "4";
+    /** Window sizes for PIM (contact & calendar) sync options. */
+    public static final int PIM_WINDOW_SIZE_CONTACTS = 10;
+    public static final int PIM_WINDOW_SIZE_CALENDAR = 10;
 
     // TODO: For each type of failure, provide info about why.
     protected static final int SYNC_RESULT_FAILED = -1;
@@ -216,14 +217,17 @@
 
     /**
      * Shared non-initial sync options for PIM (contacts & calendar) objects.
-     * @param s The {@link Serializer} for this sync request.
+     *
+     * @param s The {@link com.android.exchange.adapter.Serializer} for this sync request.
      * @param filter The lookback to use, or null if no lookback is desired.
+     * @param windowSize
      * @throws IOException
      */
-    protected void setPimSyncOptions(final Serializer s, final String filter) throws IOException {
+    protected void setPimSyncOptions(final Serializer s, final String filter, int windowSize)
+            throws IOException {
         s.tag(Tags.SYNC_DELETES_AS_MOVES);
         s.tag(Tags.SYNC_GET_CHANGES);
-        s.data(Tags.SYNC_WINDOW_SIZE, PIM_WINDOW_SIZE);
+        s.data(Tags.SYNC_WINDOW_SIZE, String.valueOf(windowSize));
         s.start(Tags.SYNC_OPTIONS);
         // Set the filter (lookback), if provided
         if (filter != null) {