Fixes unit tests for ContactsPreferences
am: 030b126e60

Change-Id: I91a14f93e1bc356aca474ed7516972654f9de8ea
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index f81e01f..2dd0e73 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -43,6 +43,9 @@
     <!-- If true, the default sort order is primary (i.e. by given name) -->
     <bool name="config_default_display_order_primary">true</bool>
 
+    <!-- If true, an option is shown in Display Options UI to choose a phonetic name display preference -->
+    <bool name="config_phonetic_name_display_user_changeable">true</bool>
+
     <!-- If true, phonetic name fields are not visible when empty -->
     <bool name="config_default_hide_phonetic_name_if_empty">true</bool>
 
diff --git a/src/com/android/contacts/preference/ContactsPreferences.java b/src/com/android/contacts/preference/ContactsPreferences.java
index ab52b1b..87b13f7 100644
--- a/src/com/android/contacts/preference/ContactsPreferences.java
+++ b/src/com/android/contacts/preference/ContactsPreferences.java
@@ -177,6 +177,11 @@
         }
     }
 
+    public boolean isPhoneticNameDisplayPreferenceChangeable() {
+        return mContext.getResources().getBoolean(
+                R.bool.config_phonetic_name_display_user_changeable);
+    }
+
     public void setPhoneticNameDisplayPreference(int phoneticNameDisplayPreference) {
         mPhoneticNameDisplayPreference = phoneticNameDisplayPreference;
         final Editor editor = mPreferences.edit();
@@ -186,6 +191,9 @@
     }
 
     public int getPhoneticNameDisplayPreference() {
+        if (!isPhoneticNameDisplayPreferenceChangeable()) {
+            return getDefaultPhoneticNameDisplayPreference();
+        }
         if (mPhoneticNameDisplayPreference == PREFERENCE_UNASSIGNED) {
             mPhoneticNameDisplayPreference = mPreferences.getInt(PHONETIC_NAME_DISPLAY_KEY,
                     getDefaultPhoneticNameDisplayPreference());
@@ -281,6 +289,7 @@
         // listener was unregistered.
         mDisplayOrder = PREFERENCE_UNASSIGNED;
         mSortOrder = PREFERENCE_UNASSIGNED;
+        mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
         mDefaultAccount = null;
 
         mPreferences.registerOnSharedPreferenceChangeListener(this);
@@ -319,6 +328,9 @@
         } else if (SORT_ORDER_KEY.equals(key)) {
             mSortOrder = PREFERENCE_UNASSIGNED;
             mSortOrder = getSortOrder();
+        } else if (PHONETIC_NAME_DISPLAY_KEY.equals(key)) {
+            mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
+            mPhoneticNameDisplayPreference = getPhoneticNameDisplayPreference();
         } else if (mDefaultAccountKey.equals(key)) {
             mDefaultAccount = null;
             mDefaultAccount = getDefaultAccount();
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
index 3f68d05..22a6683 100644
--- a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -83,6 +83,7 @@
     private static final String KEY_EXPORT = "export";
     private static final String KEY_MY_INFO = "myInfo";
     private static final String KEY_SORT_ORDER = "sortOrder";
+    private static final String KEY_PHONETIC_NAME_DISPLAY = "phoneticNameDisplay";
 
     private static final int LOADER_PROFILE = 0;
     private static final int LOADER_ACCOUNTS = 1;
@@ -269,6 +270,10 @@
             getPreferenceScreen().removePreference(findPreference(KEY_SORT_ORDER));
         }
 
+        if (!resources.getBoolean(R.bool.config_phonetic_name_display_user_changeable)) {
+            getPreferenceScreen().removePreference(findPreference(KEY_PHONETIC_NAME_DISPLAY));
+        }
+
         if (HelpUtils.isHelpAndFeedbackAvailable()) {
             getPreferenceScreen().removePreference(findPreference(KEY_ABOUT));
         }
diff --git a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
index 7da9099..bea8d14 100644
--- a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
+++ b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
@@ -61,6 +61,8 @@
                 .thenReturn(true);
         Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
                 .thenReturn(true);
+        Mockito.when(mSharedPreferences.contains(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY))
+                .thenReturn(true);
 
         InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
             @Override
@@ -108,6 +110,43 @@
                 mContactsPreferences.getDisplayOrder());
     }
 
+    public void testGetPhoneticNameDisplayDefault() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                false, // R.bool.config_phonetic_name_display_user_changeable
+                true // R.bool.config_default_hide_phonetic_name_if_empty
+        );
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
+    public void testGetPhoneticNameDisplay() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_phonetic_name_display_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(
+                Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+                Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY);
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
+    public void testRefreshPhoneticNameDisplay() throws InterruptedException {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_phonetic_name_display_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(
+                Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+                Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                PhoneticNameDisplayPreference.SHOW_ALWAYS);
+
+        Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+        mContactsPreferences.refreshValue(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY);
+
+        Assert.assertEquals(PhoneticNameDisplayPreference.SHOW_ALWAYS,
+                mContactsPreferences.getPhoneticNameDisplayPreference());
+    }
+
     public void testRefreshSortOrder() throws InterruptedException {
         Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
                 true // R.bool.config_sort_order_user_changeable