DO NOT MERGE Remove "Default account" setting if no writable account.

BUG 21932040

Change-Id: I0292ad614ab11c515c2b474858c4e1bb5645f6bc
(cherry picked from commit c1908a8a7e7856415cdc2e1e6afd89712b8e5b5f)
diff --git a/src/com/android/contacts/common/preference/ContactsPreferences.java b/src/com/android/contacts/common/preference/ContactsPreferences.java
index 2fce78c..befcbe4 100644
--- a/src/com/android/contacts/common/preference/ContactsPreferences.java
+++ b/src/com/android/contacts/common/preference/ContactsPreferences.java
@@ -183,6 +183,7 @@
         // listener was unregistered.
         mDisplayOrder = -1;
         mSortOrder = -1;
+        mDefaultAccount = null;
 
         mPreferences.registerOnSharedPreferenceChangeListener(this);
     }
@@ -206,6 +207,8 @@
                     mDisplayOrder = getDisplayOrder();
                 } else if (SORT_ORDER_KEY.equals(key)) {
                     mSortOrder = getSortOrder();
+                } else if (mDefaultAccountKey.equals(key)) {
+                    mDefaultAccount = getDefaultAccount();
                 }
                 if (mListener != null) mListener.onChange();
             }
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
index e49f38a..f43f3d0 100644
--- a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
@@ -17,9 +17,15 @@
 package com.android.contacts.common.preference;
 
 import android.os.Bundle;
+import android.preference.ListPreference;
 import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountWithDataSet;
+
+import java.util.List;
 
 /**
  * This fragment shows the preferences for the first header.
@@ -32,6 +38,15 @@
 
         // Load the preferences from an XML resource
         addPreferencesFromResource(R.xml.preference_display_options);
+
+        // Remove "Default account" setting if no writable accounts.
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
+        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(
+                /* contactWritableOnly */ true);
+        if (accounts.isEmpty()) {
+            final PreferenceScreen preferenceScreen = getPreferenceScreen();
+            preferenceScreen.removePreference((ListPreference) findPreference("accounts"));
+        }
     }
 }