public EmailSyncParser( final Parser parser, final Context context, final ContentResolver resolver, final Mailbox mailbox, final Account account) throws IOException { super(parser, context, resolver, mailbox, account); mMailboxIdAsString = Long.toString(mMailbox.mId); if (mAccount.mPolicyKey != 0) { mPolicy = Policy.restorePolicyWithId(mContext, mAccount.mPolicyKey); } else { mPolicy = null; } }
/** * API: Sync service should call this any time a sync fails due to isActive() returning false. * This will kick off the notify-acquire-admin-state process and/or increase the security level. * The caller needs to write the required policies into this account before making this call. * Should not be called from UI thread - uses DB lookups to prepare new notifications * * @param accountId the account for which sync cannot proceed */ public void policiesRequired(long accountId) { Account account = Account.restoreAccountWithId(mContext, accountId); // In case the account has been deleted, just return if (account == null) return; if (account.mPolicyKey == 0) return; Policy policy = Policy.restorePolicyWithId(mContext, account.mPolicyKey); if (policy == null) return; if (DebugUtils.DEBUG) { LogUtils.d(TAG, "policiesRequired for " + account.mDisplayName + ": " + policy); } // Mark the account as "on hold". setAccountHoldFlag(mContext, account, true); // Put up an appropriate notification final NotificationController nc = NotificationControllerCreatorHolder.getInstance(mContext); if (policy.mProtocolPoliciesUnsupported == null) { nc.showSecurityNeededNotification(account); } else { nc.showSecurityUnsupportedNotification(account); } }
public void setAccountPolicy(long accountId, Policy policy, String securityKey, boolean notify) { Account account = Account.restoreAccountWithId(mContext, accountId); // In case the account has been deleted, just return if (account == null) { return; } Policy oldPolicy = null; if (account.mPolicyKey > 0) { oldPolicy = Policy.restorePolicyWithId(mContext, account.mPolicyKey); } // If attachment policies have changed, fix up any affected attachment records if (oldPolicy != null && securityKey != null) { if ((oldPolicy.mDontAllowAttachments != policy.mDontAllowAttachments) || (oldPolicy.mMaxAttachmentSize != policy.mMaxAttachmentSize)) { Policy.setAttachmentFlagsForNewPolicy(mContext, account, policy); } } boolean policyChanged = (oldPolicy == null) || !oldPolicy.equals(policy); if (!policyChanged && (TextUtilities.stringOrNullEquals(securityKey, account.mSecuritySyncKey))) { LogUtils.d(Logging.LOG_TAG, "setAccountPolicy; policy unchanged"); } else { setAccountPolicy(mContext, account, policy, securityKey); policiesUpdated(); } boolean setHold = false; final NotificationController nc = NotificationControllerCreatorHolder.getInstance(mContext); if (policy.mProtocolPoliciesUnsupported != null) { // We can't support this, reasons in unsupportedRemotePolicies LogUtils.d( Logging.LOG_TAG, "Notify policies for " + account.mDisplayName + " not supported."); setHold = true; if (notify) { nc.showSecurityUnsupportedNotification(account); } // Erase data Uri uri = EmailProvider.uiUri("uiaccountdata", accountId); mContext.getContentResolver().delete(uri, null, null); } else if (isActive(policy)) { if (policyChanged) { LogUtils.d(Logging.LOG_TAG, "Notify policies for " + account.mDisplayName + " changed."); if (notify) { // Notify that policies changed nc.showSecurityChangedNotification(account); } } else { LogUtils.d(Logging.LOG_TAG, "Policy is active and unchanged; do not notify."); } } else { setHold = true; LogUtils.d( Logging.LOG_TAG, "Notify policies for " + account.mDisplayName + " are not being enforced."); if (notify) { // Put up a notification nc.showSecurityNeededNotification(account); } } // Set/clear the account hold. setAccountHoldFlag(mContext, account, setHold); }