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();