b/17193866. Update policies when we reconcile.

In the situation where we have deleted an Account from our
provider reconciliation will delete the associated amAccount.
Unfortunately, there isn't any sort of side effect code path
that considers that policies may need to be updated when
this Account is deleted. This CL injects that logic.

Change-Id: I27c7a35efbdca4be274a9d3d8f7ce698f9204092
This commit is contained in:
Anthony Lee 2014-08-22 10:03:44 -07:00
parent 8c65e50bfe
commit ce1faa889d

View File

@ -31,6 +31,7 @@ import android.text.TextUtils;
import com.android.email.NotificationController; import com.android.email.NotificationController;
import com.android.email.R; import com.android.email.R;
import com.android.email.SecurityPolicy;
import com.android.email.service.EmailServiceUtils; import com.android.email.service.EmailServiceUtils;
import com.android.email.service.EmailServiceUtils.EmailServiceInfo; import com.android.email.service.EmailServiceUtils.EmailServiceInfo;
import com.android.emailcommon.Logging; import com.android.emailcommon.Logging;
@ -40,7 +41,6 @@ import com.android.mail.utils.LogUtils;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
@ -212,6 +212,7 @@ public class AccountReconciler {
} }
// Now, look through AccountManager accounts to make sure we have a corresponding cached EAS // Now, look through AccountManager accounts to make sure we have a corresponding cached EAS
// account from EmailProvider // account from EmailProvider
boolean needsPolicyUpdate = false;
for (final android.accounts.Account accountManagerAccount : accountManagerAccounts) { for (final android.accounts.Account accountManagerAccount : accountManagerAccounts) {
final String accountManagerAccountName = accountManagerAccount.name; final String accountManagerAccountName = accountManagerAccount.name;
if (!hasEpAccount(emailProviderAccounts, accountManagerAccountName)) { if (!hasEpAccount(emailProviderAccounts, accountManagerAccountName)) {
@ -236,6 +237,9 @@ public class AccountReconciler {
} catch (IOException e) { } catch (IOException e) {
LogUtils.w(Logging.LOG_TAG, e.toString()); LogUtils.w(Logging.LOG_TAG, e.toString());
} }
// Just set a flag that our policies need to be updated with device
// So we can do the update, one time, at a later point in time.
needsPolicyUpdate = true;
} }
} else { } else {
// Fix up the Calendar and Contacts syncing. It used to be possible for IMAP and // Fix up the Calendar and Contacts syncing. It used to be possible for IMAP and
@ -256,6 +260,12 @@ public class AccountReconciler {
} }
} }
if (needsPolicyUpdate) {
// We have removed accounts from the AccountManager, let's make sure that
// our policies are up to date.
SecurityPolicy.getInstance(context).policiesUpdated();
}
final String composeActivityName = final String composeActivityName =
context.getString(R.string.reconciliation_compose_activity_name); context.getString(R.string.reconciliation_compose_activity_name);
if (!TextUtils.isEmpty(composeActivityName)) { if (!TextUtils.isEmpty(composeActivityName)) {