Handle provisioning errors in sync.
Bug: 10930585
Change-Id: Ieb6f0bdd22c6cfb2bb440a2109fb86b31a1ee24e
diff --git a/src/com/android/exchange/eas/EasOperation.java b/src/com/android/exchange/eas/EasOperation.java
index 414fcb8..9119dbd 100644
--- a/src/com/android/exchange/eas/EasOperation.java
+++ b/src/com/android/exchange/eas/EasOperation.java
@@ -101,7 +101,8 @@
protected final long mAccountId;
private final EasServerConnection mConnection;
- private EasOperation(final Context context, final long accountId,
+ // TODO: Make this private again when EasSyncHandler is converted to be a subclass.
+ protected EasOperation(final Context context, final long accountId,
final EasServerConnection connection) {
mContext = context;
mAccountId = accountId;
diff --git a/src/com/android/exchange/eas/EasProvision.java b/src/com/android/exchange/eas/EasProvision.java
index cad2565..16f5733 100644
--- a/src/com/android/exchange/eas/EasProvision.java
+++ b/src/com/android/exchange/eas/EasProvision.java
@@ -16,6 +16,7 @@
package com.android.exchange.eas;
+import android.content.Context;
import android.content.SyncResult;
import com.android.emailcommon.provider.Policy;
@@ -25,6 +26,7 @@
import com.android.exchange.adapter.ProvisionParser;
import com.android.exchange.adapter.Serializer;
import com.android.exchange.adapter.Tags;
+import com.android.exchange.service.EasServerConnection;
import com.android.mail.utils.LogUtils;
import org.apache.http.HttpEntity;
@@ -89,6 +91,16 @@
*/
private int mPhase;
+ // TODO: Temporary until EasSyncHandler converts to EasOperation.
+ public EasProvision(final Context context, final long accountId,
+ final EasServerConnection connection) {
+ super(context, accountId, connection);
+ mPolicy = null;
+ mPolicyKey = null;
+ mStatus = null;
+ mPhase = 0;
+ }
+
public EasProvision(final EasOperation parentOperation) {
super(parentOperation);
mPolicy = null;
diff --git a/src/com/android/exchange/service/EasSyncHandler.java b/src/com/android/exchange/service/EasSyncHandler.java
index 57782c4..5e77b45 100644
--- a/src/com/android/exchange/service/EasSyncHandler.java
+++ b/src/com/android/exchange/service/EasSyncHandler.java
@@ -33,6 +33,7 @@
import com.android.exchange.adapter.Parser;
import com.android.exchange.adapter.Serializer;
import com.android.exchange.adapter.Tags;
+import com.android.exchange.eas.EasProvision;
import com.android.mail.utils.LogUtils;
import org.apache.http.HttpStatus;
@@ -343,8 +344,14 @@
} else {
LogUtils.e(TAG, "Sync failed with Status: " + code);
if (resp.isProvisionError()) {
- syncResult.stats.numAuthExceptions++;
- return SYNC_RESULT_FAILED; // TODO: Handle SyncStatus.FAILURE_SECURITY;
+ final EasProvision provision = new EasProvision(mContext, mAccount.mId, this);
+ if (provision.provision(syncResult, mAccount.mId)) {
+ // We handled the provisioning error, so loop.
+ result = SYNC_RESULT_MORE_AVAILABLE;
+ } else {
+ syncResult.stats.numAuthExceptions++;
+ return SYNC_RESULT_FAILED; // TODO: Handle SyncStatus.FAILURE_SECURITY;
+ }
} else if (resp.isAuthError()) {
syncResult.stats.numAuthExceptions++;
return SYNC_RESULT_FAILED; // TODO: Handle SyncStatus.FAILURE_LOGIN;