diff options
Diffstat (limited to 'emailcommon/src/com/android/emailcommon/provider')
3 files changed, 60 insertions, 3 deletions
diff --git a/emailcommon/src/com/android/emailcommon/provider/Account.java b/emailcommon/src/com/android/emailcommon/provider/Account.java index 5a3ab7f3a..b9a21c805 100755 --- a/emailcommon/src/com/android/emailcommon/provider/Account.java +++ b/emailcommon/src/com/android/emailcommon/provider/Account.java @@ -31,6 +31,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; +import com.android.emailcommon.service.EmailServiceProxy; import com.android.emailcommon.utility.Utility; import com.android.mail.utils.LogUtils; import com.google.common.annotations.VisibleForTesting; @@ -111,22 +112,26 @@ public final class Account extends EmailContent implements Parcelable { // Sentinel values for the mSyncInterval field of both Account records public static final int CHECK_INTERVAL_NEVER = -1; public static final int CHECK_INTERVAL_PUSH = -2; + public static final int CHECK_INTERVAL_DEFAULT_PULL = 15; public static Uri CONTENT_URI; public static Uri RESET_NEW_MESSAGE_COUNT_URI; public static Uri NOTIFIER_URI; + public static Uri SYNC_SETTING_CHANGED_URI; public static void initAccount() { CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/account"); RESET_NEW_MESSAGE_COUNT_URI = Uri.parse(EmailContent.CONTENT_URI + "/resetNewMessageCount"); NOTIFIER_URI = Uri.parse(EmailContent.CONTENT_NOTIFIER_URI + "/account"); + SYNC_SETTING_CHANGED_URI = Uri.parse( + EmailContent.CONTENT_SYNC_SETTING_CHANGED_URI + "/account"); } public String mDisplayName; public String mEmailAddress; public String mSyncKey; public int mSyncLookback; - public int mSyncInterval; + private int mSyncInterval; public long mHostAuthKeyRecv; public long mHostAuthKeySend; public int mFlags; @@ -139,6 +144,7 @@ public final class Account extends EmailContent implements Parcelable { public String mSignature; public long mPolicyKey; public long mPingDuration; + public int mCapabilities; @VisibleForTesting static final String JSON_TAG_HOST_AUTH_RECV = "hostAuthRecv"; @@ -171,6 +177,7 @@ public final class Account extends EmailContent implements Parcelable { public static final int CONTENT_POLICY_KEY_COLUMN = 14; public static final int CONTENT_PING_DURATION_COLUMN = 15; public static final int CONTENT_MAX_ATTACHMENT_SIZE_COLUMN = 16; + public static final int CONTENT_CAPABILITIES_COLUMN = 17; public static final String[] CONTENT_PROJECTION = { AttachmentColumns._ID, AccountColumns.DISPLAY_NAME, @@ -181,7 +188,7 @@ public final class Account extends EmailContent implements Parcelable { AccountColumns.RINGTONE_URI, AccountColumns.PROTOCOL_VERSION, AccountColumns.SECURITY_SYNC_KEY, AccountColumns.SIGNATURE, AccountColumns.POLICY_KEY, AccountColumns.PING_DURATION, - AccountColumns.MAX_ATTACHMENT_SIZE + AccountColumns.MAX_ATTACHMENT_SIZE, AccountColumns.CAPABILITIES }; public static final int ACCOUNT_FLAGS_COLUMN_ID = 0; @@ -279,6 +286,7 @@ public final class Account extends EmailContent implements Parcelable { mSignature = cursor.getString(CONTENT_SIGNATURE_COLUMN); mPolicyKey = cursor.getLong(CONTENT_POLICY_KEY_COLUMN); mPingDuration = cursor.getLong(CONTENT_PING_DURATION_COLUMN); + mCapabilities = cursor.getInt(CONTENT_CAPABILITIES_COLUMN); } public boolean isTemporary() { @@ -358,6 +366,11 @@ public final class Account extends EmailContent implements Parcelable { * TODO define sentinel values for "never", "push", etc. See Account.java */ public int getSyncInterval() { + // Fixed unsynced value and account capability. Change to default pull value + if (!hasCapability(EmailServiceProxy.CAPABILITY_PUSH) + && mSyncInterval == CHECK_INTERVAL_PUSH) { + return CHECK_INTERVAL_DEFAULT_PULL; + } return mSyncInterval; } @@ -367,7 +380,13 @@ public final class Account extends EmailContent implements Parcelable { * @param minutes the number of minutes between polling checks */ public void setSyncInterval(int minutes) { - mSyncInterval = minutes; + // Fixed unsynced value and account capability. Change to default pull value + if (!hasCapability(EmailServiceProxy.CAPABILITY_PUSH) + && mSyncInterval == CHECK_INTERVAL_PUSH) { + mSyncInterval = CHECK_INTERVAL_DEFAULT_PULL; + } else { + mSyncInterval = minutes; + } } /** @@ -403,6 +422,20 @@ public final class Account extends EmailContent implements Parcelable { } /** + * @return the current account capabilities. + */ + public int getCapabilities() { + return mCapabilities; + } + + /** + * Set the account capabilities. Be sure to call save() to commit to database. + */ + public void setCapabilities(int value) { + mCapabilities = value; + } + + /** * @return the flags for this account */ public int getFlags() { @@ -749,6 +782,7 @@ public final class Account extends EmailContent implements Parcelable { values.put(AccountColumns.SIGNATURE, mSignature); values.put(AccountColumns.POLICY_KEY, mPolicyKey); values.put(AccountColumns.PING_DURATION, mPingDuration); + values.put(AccountColumns.CAPABILITIES, mCapabilities); return values; } @@ -779,6 +813,7 @@ public final class Account extends EmailContent implements Parcelable { json.putOpt(AccountColumns.PROTOCOL_VERSION, mProtocolVersion); json.putOpt(AccountColumns.SIGNATURE, mSignature); json.put(AccountColumns.PING_DURATION, mPingDuration); + json.put(AccountColumns.CAPABILITIES, mCapabilities); return json; } catch (final JSONException e) { LogUtils.d(LogUtils.TAG, e, "Exception while serializing Account"); @@ -817,6 +852,7 @@ public final class Account extends EmailContent implements Parcelable { a.mSignature = json.optString(AccountColumns.SIGNATURE); // POLICY_KEY is not stored a.mPingDuration = json.optInt(AccountColumns.PING_DURATION, 0); + a.mCapabilities = json.optInt(AccountColumns.CAPABILITIES, 0); return a; } catch (final JSONException e) { LogUtils.d(LogUtils.TAG, e, "Exception while deserializing Account"); @@ -843,6 +879,14 @@ public final class Account extends EmailContent implements Parcelable { } /** + * Returns whether or not the capability is supported by the account. + * @see EmailServiceProxy#CAPABILITY_* + */ + public boolean hasCapability(int capability) { + return (mCapabilities & capability) != 0; + } + + /** * Supports Parcelable */ @Override @@ -903,6 +947,7 @@ public final class Account extends EmailContent implements Parcelable { } else { dest.writeByte((byte)0); } + dest.writeInt(mCapabilities); } /** @@ -937,6 +982,7 @@ public final class Account extends EmailContent implements Parcelable { if (in.readByte() == 1) { mHostAuthSend = new HostAuth(in); } + mCapabilities = in.readInt(); } /** diff --git a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java index f1fcb0dcf..dd4e7eb85 100755 --- a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java +++ b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java @@ -145,6 +145,8 @@ public abstract class EmailContent { // delete, or update) and is intended as an optimization for use by clients of message list // cursors (initially, the email AppWidget). public static String NOTIFIER_AUTHORITY; + // The sync settings changed authority is used to notify when a sync setting changed (interval) + public static String SYNC_SETTING_CHANGED_AUTHORITY; public static Uri CONTENT_URI; public static final String PARAMETER_LIMIT = "limit"; @@ -153,6 +155,7 @@ public abstract class EmailContent { */ public static final String SUPPRESS_COMBINED_ACCOUNT_PARAM = "suppress_combined"; public static Uri CONTENT_NOTIFIER_URI; + public static Uri CONTENT_SYNC_SETTING_CHANGED_URI; public static Uri PICK_TRASH_FOLDER_URI; public static Uri PICK_SENT_FOLDER_URI; public static Uri MAILBOX_NOTIFICATION_URI; @@ -175,8 +178,11 @@ public abstract class EmailContent { AUTHORITY = EMAIL_PACKAGE_NAME + ".provider"; LogUtils.d("EmailContent", "init for " + AUTHORITY); NOTIFIER_AUTHORITY = EMAIL_PACKAGE_NAME + ".notifier"; + SYNC_SETTING_CHANGED_AUTHORITY = EMAIL_PACKAGE_NAME + ".sync_setting_changed"; CONTENT_URI = Uri.parse("content://" + AUTHORITY); CONTENT_NOTIFIER_URI = Uri.parse("content://" + NOTIFIER_AUTHORITY); + CONTENT_SYNC_SETTING_CHANGED_URI = Uri.parse( + "content://" + SYNC_SETTING_CHANGED_AUTHORITY); PICK_TRASH_FOLDER_URI = Uri.parse("content://" + AUTHORITY + "/pickTrashFolder"); PICK_SENT_FOLDER_URI = Uri.parse("content://" + AUTHORITY + "/pickSentFolder"); MAILBOX_NOTIFICATION_URI = Uri.parse("content://" + AUTHORITY + "/mailboxNotification"); @@ -1724,6 +1730,8 @@ public abstract class EmailContent { public static final String PING_DURATION = "pingDuration"; // Automatically fetch pop3 attachments public static final String AUTO_FETCH_ATTACHMENTS = "autoFetchAttachments"; + // Account capabilities (check EmailServiceProxy#CAPABILITY_*) + public static final String CAPABILITIES = "capabilities"; } public interface QuickResponseColumns extends BaseColumns { diff --git a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java index c726b94c3..75f840e64 100644 --- a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java +++ b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java @@ -78,10 +78,13 @@ public class Mailbox extends EmailContent implements EmailContent.MailboxColumns public static Uri CONTENT_URI; public static Uri MESSAGE_COUNT_URI; + public static Uri SYNC_SETTING_CHANGED_URI; public static void initMailbox() { CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/mailbox"); MESSAGE_COUNT_URI = Uri.parse(EmailContent.CONTENT_URI + "/mailboxCount"); + SYNC_SETTING_CHANGED_URI = Uri.parse( + EmailContent.CONTENT_SYNC_SETTING_CHANGED_URI + "/mailbox"); } private static String formatMailboxIdExtra(final int index) { |