Allow filedAs to be ghosted by specifying other fields to upsync
* This is a highly starred bug in the public tracker
* Users will have to recreate their accounts to take advantage of the fix
Bug: 6454784
Change-Id: I4cc7af648555dbe82c42ffe426155a918c88e4d9
diff --git a/exchange2/src/com/android/exchange/EasSyncService.java b/exchange2/src/com/android/exchange/EasSyncService.java
index f1e544d..863e322 100644
--- a/exchange2/src/com/android/exchange/EasSyncService.java
+++ b/exchange2/src/com/android/exchange/EasSyncService.java
@@ -1668,14 +1668,14 @@
// Start with the default timeout
int timeout = COMMAND_TIMEOUT;
- if (!syncKey.equals("0")) {
- // EAS doesn't allow GetChanges in an initial sync; sending other options
- // appears to cause the server to delay its response in some cases, and this delay
- // can be long enough to result in an IOException and total failure to sync.
- // Therefore, we don't send any options with the initial sync.
- // Set the truncation amount, body preference, lookback, etc.
- target.sendSyncOptions(mProtocolVersionDouble, s);
- } else {
+ boolean initialSync = syncKey.equals("0");
+ // EAS doesn't allow GetChanges in an initial sync; sending other options
+ // appears to cause the server to delay its response in some cases, and this delay
+ // can be long enough to result in an IOException and total failure to sync.
+ // Therefore, we don't send any options with the initial sync.
+ // Set the truncation amount, body preference, lookback, etc.
+ target.sendSyncOptions(mProtocolVersionDouble, s, initialSync);
+ if (initialSync) {
// Use enormous timeout for initial sync, which empirically can take a while longer
timeout = 120*SECONDS;
}
diff --git a/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
index 52400c4..04a67d0 100644
--- a/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
@@ -71,7 +71,8 @@
public abstract void cleanup();
public abstract boolean isSyncable();
// Add sync options (filter, body type - html vs plain, and truncation)
- public abstract void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException;
+ public abstract void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+ throws IOException;
/**
* Delete all records of this class in this account
*/
diff --git a/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
index cf54ed5..e56a7d3 100644
--- a/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
@@ -40,6 +40,7 @@
}
@Override
- public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException {
+ public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+ throws IOException {
}
}
diff --git a/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
index 4df45a9..c21be00 100644
--- a/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
@@ -223,8 +223,11 @@
}
@Override
- public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException {
- setPimSyncOptions(protocolVersion, Eas.FILTER_2_WEEKS, s);
+ public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+ throws IOException {
+ if (!initialSync) {
+ setPimSyncOptions(protocolVersion, Eas.FILTER_2_WEEKS, s);
+ }
}
@Override
diff --git a/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
index 1b21d11..7b7be15 100644
--- a/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
@@ -144,8 +144,73 @@
}
@Override
- public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException {
- setPimSyncOptions(protocolVersion, null, s);
+ public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+ throws IOException {
+ if (initialSync) {
+ // These are the tags we support for upload; whenever we add/remove support
+ // (in addData), we need to update this list
+ s.start(Tags.SYNC_SUPPORTED);
+ s.tag(Tags.CONTACTS_FIRST_NAME);
+ s.tag(Tags.CONTACTS_LAST_NAME);
+ s.tag(Tags.CONTACTS_MIDDLE_NAME);
+ s.tag(Tags.CONTACTS_SUFFIX);
+ s.tag(Tags.CONTACTS_COMPANY_NAME);
+ s.tag(Tags.CONTACTS_JOB_TITLE);
+ s.tag(Tags.CONTACTS_EMAIL1_ADDRESS);
+ s.tag(Tags.CONTACTS_EMAIL2_ADDRESS);
+ s.tag(Tags.CONTACTS_EMAIL3_ADDRESS);
+ s.tag(Tags.CONTACTS_BUSINESS2_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_BUSINESS_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS2_MMS);
+ s.tag(Tags.CONTACTS_BUSINESS_FAX_NUMBER);
+ s.tag(Tags.CONTACTS2_COMPANY_MAIN_PHONE);
+ s.tag(Tags.CONTACTS_HOME_FAX_NUMBER);
+ s.tag(Tags.CONTACTS_HOME_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_HOME2_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_MOBILE_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_CAR_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_RADIO_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS_PAGER_NUMBER);
+ s.tag(Tags.CONTACTS_ASSISTANT_TELEPHONE_NUMBER);
+ s.tag(Tags.CONTACTS2_IM_ADDRESS);
+ s.tag(Tags.CONTACTS2_IM_ADDRESS_2);
+ s.tag(Tags.CONTACTS2_IM_ADDRESS_3);
+ s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_CITY);
+ s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_COUNTRY);
+ s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_POSTAL_CODE);
+ s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_STATE);
+ s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_STREET);
+ s.tag(Tags.CONTACTS_HOME_ADDRESS_CITY);
+ s.tag(Tags.CONTACTS_HOME_ADDRESS_COUNTRY);
+ s.tag(Tags.CONTACTS_HOME_ADDRESS_POSTAL_CODE);
+ s.tag(Tags.CONTACTS_HOME_ADDRESS_STATE);
+ s.tag(Tags.CONTACTS_HOME_ADDRESS_STREET);
+ s.tag(Tags.CONTACTS_OTHER_ADDRESS_CITY);
+ s.tag(Tags.CONTACTS_OTHER_ADDRESS_COUNTRY);
+ s.tag(Tags.CONTACTS_OTHER_ADDRESS_POSTAL_CODE);
+ s.tag(Tags.CONTACTS_OTHER_ADDRESS_STATE);
+ s.tag(Tags.CONTACTS_OTHER_ADDRESS_STREET);
+ s.tag(Tags.CONTACTS_YOMI_COMPANY_NAME);
+ s.tag(Tags.CONTACTS_YOMI_FIRST_NAME);
+ s.tag(Tags.CONTACTS_YOMI_LAST_NAME);
+ s.tag(Tags.CONTACTS2_NICKNAME);
+ s.tag(Tags.CONTACTS_ASSISTANT_NAME);
+ s.tag(Tags.CONTACTS2_MANAGER_NAME);
+ s.tag(Tags.CONTACTS_SPOUSE);
+ s.tag(Tags.CONTACTS_DEPARTMENT);
+ s.tag(Tags.CONTACTS_TITLE);
+ s.tag(Tags.CONTACTS_OFFICE_LOCATION);
+ s.tag(Tags.CONTACTS2_CUSTOMER_ID);
+ s.tag(Tags.CONTACTS2_GOVERNMENT_ID);
+ s.tag(Tags.CONTACTS2_ACCOUNT_NAME);
+ s.tag(Tags.CONTACTS_ANNIVERSARY);
+ s.tag(Tags.CONTACTS_BIRTHDAY);
+ s.tag(Tags.CONTACTS_WEBPAGE);
+ s.tag(Tags.CONTACTS_PICTURE);
+ s.end(); // SYNC_SUPPORTED
+ } else {
+ setPimSyncOptions(protocolVersion, null, s);
+ }
}
@Override
@@ -352,7 +417,6 @@
public void addData(String serverId, ContactOperations ops, Entity entity)
throws IOException {
- String fileAs = null;
String prefix = null;
String firstName = null;
String lastName = null;
@@ -390,9 +454,6 @@
case Tags.CONTACTS_MIDDLE_NAME:
middleName = getValue();
break;
- case Tags.CONTACTS_FILE_AS:
- fileAs = getValue();
- break;
case Tags.CONTACTS_SUFFIX:
suffix = getValue();
break;
@@ -568,11 +629,6 @@
categoriesParser(ops, entity);
break;
- case Tags.CONTACTS_COMPRESSED_RTF:
- // We don't use this, and it isn't necessary to upload, so we'll ignore it
- skipTag();
- break;
-
default:
skipTag();
}
@@ -593,7 +649,7 @@
}
ops.addName(entity, prefix, firstName, lastName, middleName, suffix, name,
- yomiFirstName, yomiLastName, fileAs);
+ yomiFirstName, yomiLastName);
ops.addBusiness(entity, business);
ops.addPersonal(entity, personal);
@@ -1209,7 +1265,7 @@
public void addName(Entity entity, String prefix, String givenName, String familyName,
String middleName, String suffix, String displayName, String yomiFirstName,
- String yomiLastName, String fileAs) {
+ String yomiLastName) {
RowBuilder builder = untypedRowBuilder(entity, StructuredName.CONTENT_ITEM_TYPE);
ContentValues cv = builder.cv;
if (cv != null && cvCompareString(cv, StructuredName.GIVEN_NAME, givenName) &&
@@ -1218,7 +1274,6 @@
cvCompareString(cv, StructuredName.PREFIX, prefix) &&
cvCompareString(cv, StructuredName.PHONETIC_GIVEN_NAME, yomiFirstName) &&
cvCompareString(cv, StructuredName.PHONETIC_FAMILY_NAME, yomiLastName) &&
- //cvCompareString(cv, StructuredName.DISPLAY_NAME, fileAs) &&
cvCompareString(cv, StructuredName.SUFFIX, suffix)) {
return;
}
@@ -1229,7 +1284,6 @@
builder.withValue(StructuredName.PHONETIC_GIVEN_NAME, yomiFirstName);
builder.withValue(StructuredName.PHONETIC_FAMILY_NAME, yomiLastName);
builder.withValue(StructuredName.PREFIX, prefix);
- //builder.withValue(StructuredName.DISPLAY_NAME, fileAs);
add(builder.build());
}
@@ -1601,12 +1655,6 @@
sendStringData(s, cv, StructuredName.PHONETIC_GIVEN_NAME, Tags.CONTACTS_YOMI_FIRST_NAME);
sendStringData(s, cv, StructuredName.PHONETIC_FAMILY_NAME, Tags.CONTACTS_YOMI_LAST_NAME);
sendStringData(s, cv, StructuredName.PREFIX, Tags.CONTACTS_TITLE);
- if (cv.containsKey(StructuredName.DISPLAY_NAME)) {
- displayName = cv.getAsString(StructuredName.DISPLAY_NAME);
- if (!TextUtils.isEmpty(displayName)) {
- s.data(Tags.CONTACTS_FILE_AS, displayName);
- }
- }
return displayName;
}
diff --git a/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
index 73199f8..5a6523c 100644
--- a/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
@@ -193,8 +193,9 @@
}
@Override
- public void sendSyncOptions(Double protocolVersion, Serializer s)
+ public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
throws IOException {
+ if (initialSync) return;
mFetchRequestList.clear();
// Find partially loaded messages; this should typically be a rare occurrence
Cursor c = mContext.getContentResolver().query(Message.CONTENT_URI,