blob: b77a19dac2c166fcd98de04484678c5dd28f0090 [file] [log] [blame]
Mindy Pereira8bd82152012-03-01 10:06:35 -08001/**
2 * Copyright (c) 2012, Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.mail.providers;
18
Vikram Aggarwal60069912012-07-24 14:26:09 -070019import com.google.common.base.Objects;
20
Mindy Pereira3cd4f402012-07-17 11:16:18 -070021import com.android.mail.providers.UIProvider.AccountColumns;
Paul Westbrook19e59082012-04-08 12:44:57 -070022import com.android.mail.providers.UIProvider.AutoAdvance;
23import com.android.mail.providers.UIProvider.DefaultReplyBehavior;
24import com.android.mail.providers.UIProvider.MessageTextSize;
25import com.android.mail.providers.UIProvider.SnapHeaderValue;
Mindy Pereira71a8f5e2012-07-25 14:33:18 -070026import com.android.mail.providers.UIProvider.Swipe;
Paul Westbrookb334c902012-06-25 11:42:46 -070027import com.android.mail.utils.LogTag;
Paul Westbrookb1f573c2012-04-06 11:38:28 -070028import com.android.mail.utils.LogUtils;
29import com.android.mail.utils.Utils;
30
Mindy Pereira8bd82152012-03-01 10:06:35 -080031import android.database.Cursor;
Mindy Pereiradac00542012-03-01 10:50:33 -080032import android.net.Uri;
Mindy Pereira8bd82152012-03-01 10:06:35 -080033import android.os.Parcel;
34import android.os.Parcelable;
Vikram Aggarwal60069912012-07-24 14:26:09 -070035import android.text.TextUtils;
Mindy Pereira8bd82152012-03-01 10:06:35 -080036
Paul Westbrookb1f573c2012-04-06 11:38:28 -070037import org.json.JSONException;
38import org.json.JSONObject;
39
Mindy Pereira8bd82152012-03-01 10:06:35 -080040/**
41 * Model to hold Settings for an account.
42 */
43public class Settings implements Parcelable {
Paul Westbrookb334c902012-06-25 11:42:46 -070044 private static final String LOG_TAG = LogTag.getLogTag();
Paul Westbrookb1f573c2012-04-06 11:38:28 -070045
Paul Westbrook19e59082012-04-08 12:44:57 -070046 static final Settings EMPTY_SETTINGS = new Settings();
47
Mindy Pereira3cd4f402012-07-17 11:16:18 -070048 // Max size for attachments (5 megs). Will be overridden by an account
49 // setting, if found.
50 private static final int DEFAULT_MAX_ATTACHMENT_SIZE = 5 * 1024 * 1024;
51
Mindy Pereira71a8f5e2012-07-25 14:33:18 -070052 public static final int SWIPE_SETTING_ARCHIVE = 0;
53 public static final int SWIPE_SETTING_DELETE = 1;
54 public static final int SWIPE_SETTING_DISABLED = 2;
55
56 private static final int DEFAULT = SWIPE_SETTING_ARCHIVE;
57
Paul Westbrookb1f573c2012-04-06 11:38:28 -070058 public final String signature;
Vikram Aggarwal025eba82012-05-08 10:45:30 -070059 /**
60 * Auto advance setting for this account.
61 * Integer, one of {@link AutoAdvance#LIST}, {@link AutoAdvance#NEWER},
62 * {@link AutoAdvance#OLDER} or {@link AutoAdvance#UNSET}
63 */
Scott Kennedy0d0f8b02012-10-12 15:18:18 -070064 private final int mAutoAdvance;
65 private Integer mTransientAutoAdvance = null;
Paul Westbrookb1f573c2012-04-06 11:38:28 -070066 public final int messageTextSize;
67 public final int snapHeaders;
68 public final int replyBehavior;
Paul Westbrook7ed53772013-01-23 10:19:55 -080069 public final boolean hideCheckboxes;
Paul Westbrookb1f573c2012-04-06 11:38:28 -070070 public final boolean confirmDelete;
71 public final boolean confirmArchive;
72 public final boolean confirmSend;
Paul Westbrookfa255c02012-10-13 14:32:52 -070073 public final int conversationViewMode;
Paul Westbrookb1f573c2012-04-06 11:38:28 -070074 public final Uri defaultInbox;
Vikram Aggarwal5e63e8a2012-07-19 10:05:24 -070075 /**
76 * The name of the default inbox: "Inbox" or "Priority Inbox", internationalized...
77 */
78 public final String defaultInboxName;
79 // If you find the need for more default Inbox information: ID or capabilities, then
80 // ask viki to replace the above two members with a single JSON object representing the default
81 // folder. That should make all the information about the folder available without an
82 // explosion in the number of members.
83
Paul Westbrookb1f573c2012-04-06 11:38:28 -070084 public final boolean forceReplyFromDefault;
Mindy Pereira3cd4f402012-07-17 11:16:18 -070085 public final int maxAttachmentSize;
Mindy Pereira71a8f5e2012-07-25 14:33:18 -070086 public final int swipe;
Vikram Aggarwal707f24c2012-07-31 15:59:36 -070087 /** True if arrows on the priority inbox are enabled. */
88 public final boolean priorityArrowsEnabled;
Marc Blank57899082012-09-05 11:35:57 -070089 public final Uri setupIntentUri;
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -080090 public final String veiledAddressPattern;
Mindy Pereira8bd82152012-03-01 10:06:35 -080091
Vikram Aggarwal60069912012-07-24 14:26:09 -070092 /** Cached value of hashCode */
93 private int mHashCode;
94
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -070095 /** Safe defaults to be used if some values are unspecified. */
96 private static final Settings sDefault = EMPTY_SETTINGS;
97
Paul Westbrook19e59082012-04-08 12:44:57 -070098 private Settings() {
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -070099 signature = "";
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700100 mAutoAdvance = AutoAdvance.LIST;
Paul Westbrook19e59082012-04-08 12:44:57 -0700101 messageTextSize = MessageTextSize.NORMAL;
102 snapHeaders = SnapHeaderValue.ALWAYS;
103 replyBehavior = DefaultReplyBehavior.REPLY;
Paul Westbrook7ed53772013-01-23 10:19:55 -0800104 hideCheckboxes = false;
Paul Westbrook19e59082012-04-08 12:44:57 -0700105 confirmDelete = false;
106 confirmArchive = false;
107 confirmSend = false;
Vikram Aggarwal5e63e8a2012-07-19 10:05:24 -0700108 defaultInbox = Uri.EMPTY;
109 defaultInboxName = "";
Paul Westbrook19e59082012-04-08 12:44:57 -0700110 forceReplyFromDefault = false;
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700111 maxAttachmentSize = 0;
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700112 swipe = DEFAULT;
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700113 priorityArrowsEnabled = false;
Marc Blank57899082012-09-05 11:35:57 -0700114 setupIntentUri = Uri.EMPTY;
Paul Westbrookfa255c02012-10-13 14:32:52 -0700115 conversationViewMode = UIProvider.ConversationViewMode.UNDEFINED;
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800116 veiledAddressPattern = null;
Paul Westbrook19e59082012-04-08 12:44:57 -0700117 }
118
Mindy Pereira8bd82152012-03-01 10:06:35 -0800119 public Settings(Parcel inParcel) {
120 signature = inParcel.readString();
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700121 mAutoAdvance = inParcel.readInt();
Mindy Pereira8bd82152012-03-01 10:06:35 -0800122 messageTextSize = inParcel.readInt();
123 snapHeaders = inParcel.readInt();
124 replyBehavior = inParcel.readInt();
Paul Westbrook7ed53772013-01-23 10:19:55 -0800125 hideCheckboxes = inParcel.readInt() != 0;
Mindy Pereira8bd82152012-03-01 10:06:35 -0800126 confirmDelete = inParcel.readInt() != 0;
127 confirmArchive = inParcel.readInt() != 0;
128 confirmSend = inParcel.readInt() != 0;
Vikram Aggarwal5e63e8a2012-07-19 10:05:24 -0700129 defaultInbox = Utils.getValidUri(inParcel.readString());
130 defaultInboxName = inParcel.readString();
Mindy Pereiraeee63072012-04-06 08:32:02 -0700131 forceReplyFromDefault = inParcel.readInt() != 0;
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700132 maxAttachmentSize = inParcel.readInt();
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700133 swipe = inParcel.readInt();
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700134 priorityArrowsEnabled = inParcel.readInt() != 0;
Marc Blank57899082012-09-05 11:35:57 -0700135 setupIntentUri = Utils.getValidUri(inParcel.readString());
Paul Westbrookfa255c02012-10-13 14:32:52 -0700136 conversationViewMode = inParcel.readInt();
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800137 veiledAddressPattern = inParcel.readString();
Mindy Pereira8bd82152012-03-01 10:06:35 -0800138 }
139
140 public Settings(Cursor cursor) {
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700141 signature = cursor.getString(UIProvider.ACCOUNT_SETTINGS_SIGNATURE_COLUMN);
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700142 mAutoAdvance = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_AUTO_ADVANCE_COLUMN);
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700143 messageTextSize = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_MESSAGE_TEXT_SIZE_COLUMN);
144 snapHeaders = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_SNAP_HEADERS_COLUMN);
145 replyBehavior = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_REPLY_BEHAVIOR_COLUMN);
Paul Westbrook7ed53772013-01-23 10:19:55 -0800146 hideCheckboxes = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_HIDE_CHECKBOXES_COLUMN) != 0;
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700147 confirmDelete = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_CONFIRM_DELETE_COLUMN) != 0;
148 confirmArchive = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_CONFIRM_ARCHIVE_COLUMN) != 0;
149 confirmSend = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_CONFIRM_SEND_COLUMN) != 0;
Vikram Aggarwal5e63e8a2012-07-19 10:05:24 -0700150 defaultInbox = Utils.getValidUri(
151 cursor.getString(UIProvider.ACCOUNT_SETTINGS_DEFAULT_INBOX_COLUMN));
152 defaultInboxName = cursor.getString(UIProvider.ACCOUNT_SETTINGS_DEFAULT_INBOX_NAME_COLUMN);
Mindy Pereiraeee63072012-04-06 08:32:02 -0700153 forceReplyFromDefault = cursor.getInt(
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700154 UIProvider.ACCOUNT_SETTINGS_FORCE_REPLY_FROM_DEFAULT_COLUMN) != 0;
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700155 maxAttachmentSize = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_MAX_ATTACHMENT_SIZE_COLUMN);
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700156 swipe = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_SWIPE_COLUMN);
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700157 priorityArrowsEnabled =
158 cursor.getInt(UIProvider.ACCOUNT_SETTINGS_PRIORITY_ARROWS_ENABLED_COLUMN) != 0;
Marc Blank57899082012-09-05 11:35:57 -0700159 setupIntentUri = Utils.getValidUri(
160 cursor.getString(UIProvider.ACCOUNT_SETTINGS_SETUP_INTENT_URI));
Paul Westbrookfa255c02012-10-13 14:32:52 -0700161 conversationViewMode = cursor.getInt(UIProvider.ACCOUNT_SETTINGS_CONVERSATION_MODE_COLUMN);
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800162 veiledAddressPattern =
163 cursor.getString(UIProvider.ACCOUNT_SETTINGS_VEILED_ADDRESS_PATTERN_COLUMN);
Mindy Pereira8bd82152012-03-01 10:06:35 -0800164 }
165
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700166 private Settings(JSONObject json) {
167 signature = json.optString(AccountColumns.SettingsColumns.SIGNATURE, sDefault.signature);
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700168 mAutoAdvance = json.optInt(AccountColumns.SettingsColumns.AUTO_ADVANCE,
169 sDefault.getAutoAdvanceSetting());
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700170 messageTextSize = json.optInt(AccountColumns.SettingsColumns.MESSAGE_TEXT_SIZE,
171 sDefault.messageTextSize);
172 snapHeaders = json.optInt(AccountColumns.SettingsColumns.SNAP_HEADERS,
173 sDefault.snapHeaders);
174 replyBehavior = json.optInt(AccountColumns.SettingsColumns.REPLY_BEHAVIOR,
175 sDefault.replyBehavior);
Paul Westbrook7ed53772013-01-23 10:19:55 -0800176 hideCheckboxes = json.optBoolean(AccountColumns.SettingsColumns.HIDE_CHECKBOXES,
177 sDefault.hideCheckboxes);
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700178 confirmDelete = json.optBoolean(AccountColumns.SettingsColumns.CONFIRM_DELETE,
179 sDefault.confirmDelete);
180 confirmArchive = json.optBoolean(AccountColumns.SettingsColumns.CONFIRM_ARCHIVE,
181 sDefault.confirmArchive);
182 confirmSend = json.optBoolean(AccountColumns.SettingsColumns.CONFIRM_SEND,
183 sDefault.confirmSend);
Vikram Aggarwal5e63e8a2012-07-19 10:05:24 -0700184 defaultInbox = Utils.getValidUri(
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700185 json.optString(AccountColumns.SettingsColumns.DEFAULT_INBOX));
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700186 defaultInboxName = json.optString(AccountColumns.SettingsColumns.DEFAULT_INBOX_NAME,
187 sDefault.defaultInboxName);
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700188 forceReplyFromDefault =
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700189 json.optBoolean(AccountColumns.SettingsColumns.FORCE_REPLY_FROM_DEFAULT,
190 sDefault.forceReplyFromDefault);
191 maxAttachmentSize = json.optInt(AccountColumns.SettingsColumns.MAX_ATTACHMENT_SIZE,
192 sDefault.maxAttachmentSize);
193 swipe = json.optInt(AccountColumns.SettingsColumns.SWIPE, sDefault.swipe);
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700194 priorityArrowsEnabled =
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700195 json.optBoolean(AccountColumns.SettingsColumns.PRIORITY_ARROWS_ENABLED,
196 sDefault.priorityArrowsEnabled);
Marc Blank57899082012-09-05 11:35:57 -0700197 setupIntentUri = Utils.getValidUri(
198 json.optString(AccountColumns.SettingsColumns.SETUP_INTENT_URI));
Paul Westbrookfa255c02012-10-13 14:32:52 -0700199 conversationViewMode = json.optInt(AccountColumns.SettingsColumns.CONVERSATION_VIEW_MODE,
200 UIProvider.ConversationViewMode.UNDEFINED);
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800201 veiledAddressPattern =
202 json.optString(AccountColumns.SettingsColumns.VEILED_ADDRESS_PATTERN, null);
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700203 }
204
205 /**
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700206 * Return a serialized String for these settings.
207 */
208 public synchronized String serialize() {
209 final JSONObject json = toJSON();
210 return json.toString();
211 }
212
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700213 private static final Object getNonNull(Object candidate, Object fallback){
214 if (candidate == null)
215 return fallback;
216 return candidate;
217 }
218
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700219 /**
220 * Return a JSONObject for these settings.
221 */
222 public synchronized JSONObject toJSON() {
223 final JSONObject json = new JSONObject();
224 try {
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700225 json.put(AccountColumns.SettingsColumns.SIGNATURE,
226 getNonNull(signature, sDefault.signature));
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700227 json.put(AccountColumns.SettingsColumns.AUTO_ADVANCE, getAutoAdvanceSetting());
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700228 json.put(AccountColumns.SettingsColumns.MESSAGE_TEXT_SIZE, messageTextSize);
229 json.put(AccountColumns.SettingsColumns.SNAP_HEADERS, snapHeaders);
230 json.put(AccountColumns.SettingsColumns.REPLY_BEHAVIOR, replyBehavior);
Paul Westbrook7ed53772013-01-23 10:19:55 -0800231 json.put(AccountColumns.SettingsColumns.HIDE_CHECKBOXES, hideCheckboxes);
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700232 json.put(AccountColumns.SettingsColumns.CONFIRM_DELETE, confirmDelete);
233 json.put(AccountColumns.SettingsColumns.CONFIRM_ARCHIVE, confirmArchive);
234 json.put(AccountColumns.SettingsColumns.CONFIRM_SEND, confirmSend);
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700235 json.put(AccountColumns.SettingsColumns.DEFAULT_INBOX,
236 getNonNull(defaultInbox, sDefault.defaultInbox));
237 json.put(AccountColumns.SettingsColumns.DEFAULT_INBOX_NAME,
238 getNonNull(defaultInboxName, sDefault.defaultInboxName));
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700239 json.put(AccountColumns.SettingsColumns.FORCE_REPLY_FROM_DEFAULT,
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700240 forceReplyFromDefault);
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700241 json.put(AccountColumns.SettingsColumns.MAX_ATTACHMENT_SIZE,
242 maxAttachmentSize);
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700243 json.put(AccountColumns.SettingsColumns.SWIPE, swipe);
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700244 json.put(AccountColumns.SettingsColumns.PRIORITY_ARROWS_ENABLED, priorityArrowsEnabled);
Marc Blank57899082012-09-05 11:35:57 -0700245 json.put(AccountColumns.SettingsColumns.SETUP_INTENT_URI, setupIntentUri);
Paul Westbrookfa255c02012-10-13 14:32:52 -0700246 json.put(AccountColumns.SettingsColumns.CONVERSATION_VIEW_MODE, conversationViewMode);
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800247 json.put(AccountColumns.SettingsColumns.VEILED_ADDRESS_PATTERN, veiledAddressPattern);
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700248 } catch (JSONException e) {
249 LogUtils.wtf(LOG_TAG, e, "Could not serialize settings");
250 }
251 return json;
252 }
253
254 /**
255 * Create a new instance of an Settings object using a serialized instance created previously
256 * using {@link #serialize()}. This returns null if the serialized instance was invalid or does
257 * not represent a valid account object.
258 *
259 * @param serializedAccount
260 * @return
261 */
262 public static Settings newInstance(String serializedSettings) {
263 JSONObject json = null;
264 try {
265 json = new JSONObject(serializedSettings);
266 return new Settings(json);
267 } catch (JSONException e) {
Andy Huang0a88d812012-07-17 15:43:10 -0700268 LogUtils.e(LOG_TAG, e, "Could not create an settings from this input: \"%s\"",
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700269 serializedSettings);
270 return null;
271 }
272 }
273
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700274 /**
275 * Create a new instance of an Settings object using a JSONObject instance created previously
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700276 * using {@link #toJSON()}. This returns null if the serialized instance was invalid or does
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700277 * not represent a valid account object.
278 *
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700279 * @param json
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700280 * @return
281 */
282 public static Settings newInstance(JSONObject json) {
283 if (json == null) {
284 return null;
285 }
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700286 return new Settings(json);
Paul Westbrookb1f573c2012-04-06 11:38:28 -0700287 }
288
Mindy Pereira8bd82152012-03-01 10:06:35 -0800289 @Override
290 public int describeContents() {
291 return 0;
292 }
293
294 @Override
295 public void writeToParcel(Parcel dest, int flags) {
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700296 dest.writeString((String) getNonNull(signature, sDefault.signature));
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700297 dest.writeInt(getAutoAdvanceSetting());
Mindy Pereira8bd82152012-03-01 10:06:35 -0800298 dest.writeInt(messageTextSize);
299 dest.writeInt(snapHeaders);
300 dest.writeInt(replyBehavior);
Paul Westbrook7ed53772013-01-23 10:19:55 -0800301 dest.writeInt(hideCheckboxes ? 1 : 0);
Mindy Pereira8bd82152012-03-01 10:06:35 -0800302 dest.writeInt(confirmDelete ? 1 : 0);
303 dest.writeInt(confirmArchive? 1 : 0);
304 dest.writeInt(confirmSend? 1 : 0);
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700305 dest.writeString(((Uri) getNonNull(defaultInbox, sDefault.defaultInbox)).toString());
306 dest.writeString((String) getNonNull(defaultInboxName, sDefault.defaultInboxName));
Mindy Pereiraeee63072012-04-06 08:32:02 -0700307 dest.writeInt(forceReplyFromDefault ? 1 : 0);
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700308 dest.writeInt(maxAttachmentSize);
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700309 dest.writeInt(swipe);
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700310 dest.writeInt(priorityArrowsEnabled ? 1 : 0);
Marc Blank57899082012-09-05 11:35:57 -0700311 dest.writeString(((Uri) getNonNull(setupIntentUri, sDefault.setupIntentUri)).toString());
Paul Westbrookfa255c02012-10-13 14:32:52 -0700312 dest.writeInt(conversationViewMode);
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800313 dest.writeString(veiledAddressPattern);
Mindy Pereira8bd82152012-03-01 10:06:35 -0800314 }
315
Vikram Aggarwalc7694222012-04-23 13:37:01 -0700316 /**
Vikram Aggarwal1e57e672012-05-07 14:48:24 -0700317 * Returns the URI of the current account's default inbox if available, otherwise
318 * returns the empty URI {@link Uri#EMPTY}
319 * @param settings a settings object, possibly null.
320 * @return a valid default Inbox URI, or {@link Uri#EMPTY} if settings are null or no default
321 * is specified.
322 */
323 public static Uri getDefaultInboxUri(Settings settings) {
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700324 if (settings == null) {
325 return sDefault.defaultInbox;
Vikram Aggarwal1e57e672012-05-07 14:48:24 -0700326 }
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700327 return (Uri) getNonNull(settings.defaultInbox, sDefault.defaultInbox);
Vikram Aggarwal1e57e672012-05-07 14:48:24 -0700328 }
329
330 /**
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700331 * Gets the autoadvance setting for this object, which may have changed since the settings were
332 * initially loaded.
333 */
334 public int getAutoAdvanceSetting() {
335 if (mTransientAutoAdvance != null) {
336 return mTransientAutoAdvance.intValue();
337 }
338
339 return mAutoAdvance;
340 }
341
342 /**
343 * Sets the transient autoadvance setting, which will override the initial autoadvance setting.
344 */
345 public void setAutoAdvanceSetting(final int autoAdvance) {
346 mTransientAutoAdvance = Integer.valueOf(autoAdvance);
Vikram Aggarwalc7694222012-04-23 13:37:01 -0700347 }
348
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700349 /**
350 * Return the swipe setting for the settings provided. It is safe to pass this method
351 * a null object. It always returns a valid {@link Swipe} setting.
352 * @return the auto advance setting, a constant from {@link Swipe}
353 */
354 public static int getSwipeSetting(Settings settings) {
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700355 return settings != null ? settings.swipe : sDefault.swipe;
Mindy Pereira71a8f5e2012-07-25 14:33:18 -0700356 }
Vikram Aggarwalc7694222012-04-23 13:37:01 -0700357
Mindy Pereira8bd82152012-03-01 10:06:35 -0800358 @SuppressWarnings("hiding")
359 public static final Creator<Settings> CREATOR = new Creator<Settings>() {
360 @Override
361 public Settings createFromParcel(Parcel source) {
362 return new Settings(source);
363 }
364
365 @Override
366 public Settings[] newArray(int size) {
367 return new Settings[size];
368 }
369 };
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700370
371 /**
Mark Wei434f2942012-08-24 11:54:02 -0700372 * Get the maximum size in bytes for attachments.
Mindy Pereira3cd4f402012-07-17 11:16:18 -0700373 */
374 public int getMaxAttachmentSize() {
375 return maxAttachmentSize <= 0 ? DEFAULT_MAX_ATTACHMENT_SIZE : maxAttachmentSize;
376 }
Vikram Aggarwal60069912012-07-24 14:26:09 -0700377
378 @Override
379 public boolean equals(final Object aThat) {
380 LogUtils.d(LOG_TAG, "Settings.equals(%s)", aThat);
381 if (this == aThat) {
382 return true;
383 }
384 if ((aThat == null) || (aThat.getClass() != this.getClass())) {
385 return false;
386 }
387 final Settings that = (Settings) aThat;
Vikram Aggarwalb122b1e2012-08-15 09:49:09 -0700388 return (TextUtils.equals(signature, that.signature)
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700389 && mAutoAdvance == that.mAutoAdvance
390 && mTransientAutoAdvance == that.mTransientAutoAdvance
Vikram Aggarwal60069912012-07-24 14:26:09 -0700391 && messageTextSize == that.messageTextSize
Andy Huang8f187782012-11-06 17:49:25 -0800392 && snapHeaders == that.snapHeaders
Vikram Aggarwal60069912012-07-24 14:26:09 -0700393 && replyBehavior == that.replyBehavior
Paul Westbrook7ed53772013-01-23 10:19:55 -0800394 && hideCheckboxes == that.hideCheckboxes
Vikram Aggarwal60069912012-07-24 14:26:09 -0700395 && confirmDelete == that.confirmDelete
396 && confirmArchive == that.confirmArchive
397 && confirmSend == that.confirmSend
398 && Objects.equal(defaultInbox, that.defaultInbox)
399 // Not checking default Inbox name, since is is identical to the URI check above.
400 && forceReplyFromDefault == that.forceReplyFromDefault
Vikram Aggarwal707f24c2012-07-31 15:59:36 -0700401 && maxAttachmentSize == that.maxAttachmentSize
402 && swipe == that.swipe
Marc Blank57899082012-09-05 11:35:57 -0700403 && priorityArrowsEnabled == that.priorityArrowsEnabled
Paul Westbrookfa255c02012-10-13 14:32:52 -0700404 && setupIntentUri == that.setupIntentUri
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800405 && conversationViewMode == that.conversationViewMode
406 && TextUtils.equals(veiledAddressPattern, that.veiledAddressPattern));
Vikram Aggarwal60069912012-07-24 14:26:09 -0700407 }
408
409 @Override
410 public int hashCode() {
411 if (mHashCode == 0) {
412 mHashCode = calculateHashCode();
413 }
414 return mHashCode;
415 }
416
417 /**
418 * Returns the hash code for this object.
Vikram Aggarwal60069912012-07-24 14:26:09 -0700419 */
420 private final int calculateHashCode() {
421 return super.hashCode()
Scott Kennedy0d0f8b02012-10-12 15:18:18 -0700422 ^ Objects.hashCode(signature, mAutoAdvance, mTransientAutoAdvance, messageTextSize,
Paul Westbrook7ed53772013-01-23 10:19:55 -0800423 snapHeaders, replyBehavior, hideCheckboxes, confirmDelete, confirmArchive,
Andy Huang8f187782012-11-06 17:49:25 -0800424 confirmSend, defaultInbox, forceReplyFromDefault, maxAttachmentSize, swipe,
Vikram Aggarwal69a6cdf2013-01-08 16:05:17 -0800425 priorityArrowsEnabled, setupIntentUri, conversationViewMode,
426 veiledAddressPattern);
Vikram Aggarwal60069912012-07-24 14:26:09 -0700427 }
Mindy Pereira8bd82152012-03-01 10:06:35 -0800428}