Merge "Handle missing settings"
diff --git a/src/com/android/mail/providers/Account.java b/src/com/android/mail/providers/Account.java
index f945c96..ec88abd 100644
--- a/src/com/android/mail/providers/Account.java
+++ b/src/com/android/mail/providers/Account.java
@@ -245,7 +245,14 @@
recentFolderListUri = getValidUri(
json.optString(UIProvider.AccountColumns.RECENT_FOLDER_LIST_URI));
- settings = Settings.newInstance(json.optJSONObject(SETTINGS_KEY));
+ final Settings jsonSettings = Settings.newInstance(json.optJSONObject(SETTINGS_KEY));
+ if (jsonSettings != null) {
+ settings = jsonSettings;
+ } else {
+ LogUtils.e(LOG_TAG, new Throwable(),
+ "Unexpected null settings in Account(name, type, jsonAccount)");
+ settings = Settings.EMPTY_SETTINGS;
+ }
}
public Account(Parcel in) {
@@ -268,7 +275,14 @@
mimeType = in.readString();
recentFolderListUri = in.readParcelable(null);
final String serializedSettings = in.readString();
- settings = Settings.newInstance(serializedSettings);
+ final Settings parcelSettings = Settings.newInstance(serializedSettings);
+
+ if (parcelSettings != null) {
+ settings = parcelSettings;
+ } else {
+ LogUtils.e(LOG_TAG, new Throwable(), "Unexpected null settings in Account(Parcel)");
+ settings = Settings.EMPTY_SETTINGS;
+ }
}
public Account(Cursor cursor) {
@@ -355,7 +369,10 @@
dest.writeParcelable(composeIntentUri, 0);
dest.writeString(mimeType);
dest.writeParcelable(recentFolderListUri, 0);
- dest.writeString(settings.serialize());
+ if (settings == null) {
+ LogUtils.e(LOG_TAG, "unexpected null settings object in writeToParcel");
+ }
+ dest.writeString(settings != null ? settings.serialize() : "");
}
@Override
diff --git a/src/com/android/mail/providers/Settings.java b/src/com/android/mail/providers/Settings.java
index a179125..cf18717 100644
--- a/src/com/android/mail/providers/Settings.java
+++ b/src/com/android/mail/providers/Settings.java
@@ -16,6 +16,10 @@
package com.android.mail.providers;
+import com.android.mail.providers.UIProvider.AutoAdvance;
+import com.android.mail.providers.UIProvider.DefaultReplyBehavior;
+import com.android.mail.providers.UIProvider.MessageTextSize;
+import com.android.mail.providers.UIProvider.SnapHeaderValue;
import com.android.mail.utils.LogUtils;
import com.android.mail.utils.Utils;
@@ -35,6 +39,8 @@
public class Settings implements Parcelable {
private static final String LOG_TAG = new LogUtils().getLogTag();
+ static final Settings EMPTY_SETTINGS = new Settings();
+
public final String signature;
public final int autoAdvance;
public final int messageTextSize;
@@ -47,6 +53,20 @@
public final Uri defaultInbox;
public final boolean forceReplyFromDefault;
+ private Settings() {
+ signature = null;
+ autoAdvance = AutoAdvance.LIST;
+ messageTextSize = MessageTextSize.NORMAL;
+ snapHeaders = SnapHeaderValue.ALWAYS;
+ replyBehavior = DefaultReplyBehavior.REPLY;
+ hideCheckboxes = false;
+ confirmDelete = false;
+ confirmArchive = false;
+ confirmSend = false;
+ defaultInbox = null;
+ forceReplyFromDefault = false;
+ }
+
public Settings(Parcel inParcel) {
signature = inParcel.readString();
autoAdvance = inParcel.readInt();