Merge "Change respond-via-sms strings on locale switch." into mnc-dev
diff --git a/res/xml/respond_via_sms_settings.xml b/res/xml/respond_via_sms_settings.xml
index 7f79a5c..3c658ef 100644
--- a/res/xml/respond_via_sms_settings.xml
+++ b/res/xml/respond_via_sms_settings.xml
@@ -35,24 +35,32 @@
          EditTextPreference here, to allow the preference "title" to wrap
          onto multiple lines if the customized messages are long enough. -->
 
+    <!-- These preferences are not persisted, so that they will update
+         when the localization is changed. RespondViaSmsSettings handles
+         the logic of storing user-specified preference changes. -->
+
     <com.android.server.telecom.MultiLineTitleEditTextPreference
         android:key="canned_response_pref_1"
         android:defaultValue="@string/respond_via_sms_canned_response_1"
-        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title" />
+        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title"
+        android:persistent="false" />
 
     <com.android.server.telecom.MultiLineTitleEditTextPreference
         android:key="canned_response_pref_2"
         android:defaultValue="@string/respond_via_sms_canned_response_2"
-        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title" />
+        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title"
+        android:persistent="false" />
 
     <com.android.server.telecom.MultiLineTitleEditTextPreference
         android:key="canned_response_pref_3"
         android:defaultValue="@string/respond_via_sms_canned_response_3"
-        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title" />
+        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title"
+        android:persistent="false" />
 
     <com.android.server.telecom.MultiLineTitleEditTextPreference
         android:key="canned_response_pref_4"
         android:defaultValue="@string/respond_via_sms_canned_response_4"
-        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title" />
+        android:dialogTitle="@string/respond_via_sms_edittext_dialog_title"
+        android:persistent="false" />
 
 </PreferenceScreen>
diff --git a/src/com/android/server/telecom/QuickResponseUtils.java b/src/com/android/server/telecom/QuickResponseUtils.java
index ec77b33..fd0dbd2 100644
--- a/src/com/android/server/telecom/QuickResponseUtils.java
+++ b/src/com/android/server/telecom/QuickResponseUtils.java
@@ -64,19 +64,16 @@
                 SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
         final Resources res = context.getResources();
 
-        final boolean responsesExist = prefs.contains(KEY_CANNED_RESPONSE_PREF_1);
+        final boolean responsesExist = prefs.contains(KEY_CANNED_RESPONSE_PREF_1)
+                || prefs.contains(KEY_CANNED_RESPONSE_PREF_2)
+                || prefs.contains(KEY_CANNED_RESPONSE_PREF_3)
+                || prefs.contains(KEY_CANNED_RESPONSE_PREF_4);
         if (responsesExist) {
-            // If one QuickResponse exists, they all exist.
+            // Skip if the user has set any canned responses.
             Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Telecom QuickResponses exist");
             return;
         }
 
-        // Grab the all the default QuickResponses from our resources.
-        String cannedResponse1 = res.getString(R.string.respond_via_sms_canned_response_1);
-        String cannedResponse2 = res.getString(R.string.respond_via_sms_canned_response_2);
-        String cannedResponse3 = res.getString(R.string.respond_via_sms_canned_response_3);
-        String cannedResponse4 = res.getString(R.string.respond_via_sms_canned_response_4);
-
         Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - No local QuickResponses");
 
         // We don't have local QuickResponses, let's see if they live in
@@ -90,24 +87,31 @@
 
         // Read the old canned responses from the Telephony SharedPreference if possible.
         if (telephonyContext != null) {
-            // Note that if any one QuickResponse does not exist, we'll use the default
-            // value to populate it.
             Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Using Telephony QuickResponses.");
             final SharedPreferences oldPrefs = telephonyContext.getSharedPreferences(
                     SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
-            cannedResponse1 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_1, cannedResponse1);
-            cannedResponse2 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_2, cannedResponse2);
-            cannedResponse3 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_3, cannedResponse3);
-            cannedResponse4 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_4, cannedResponse4);
-        }
+            if (!oldPrefs.contains(KEY_CANNED_RESPONSE_PREF_1)) {
+                // Skip migration if old responses don't exist.
+                // If they exist, the first canned response should be present.
+                return;
+            }
+            String cannedResponse1 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_1,
+                    res.getString(R.string.respond_via_sms_canned_response_1));
+            String cannedResponse2 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_2,
+                    res.getString(R.string.respond_via_sms_canned_response_2));
+            String cannedResponse3 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_3,
+                    res.getString(R.string.respond_via_sms_canned_response_3));
+            String cannedResponse4 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_4,
+                    res.getString(R.string.respond_via_sms_canned_response_4));
 
-        // Either way, write them back into Telecom SharedPreferences.
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.putString(KEY_CANNED_RESPONSE_PREF_1, cannedResponse1);
-        editor.putString(KEY_CANNED_RESPONSE_PREF_2, cannedResponse2);
-        editor.putString(KEY_CANNED_RESPONSE_PREF_3, cannedResponse3);
-        editor.putString(KEY_CANNED_RESPONSE_PREF_4, cannedResponse4);
-        editor.commit();
+            // Write them into Telecom SharedPreferences.
+            final SharedPreferences.Editor editor = prefs.edit();
+            editor.putString(KEY_CANNED_RESPONSE_PREF_1, cannedResponse1);
+            editor.putString(KEY_CANNED_RESPONSE_PREF_2, cannedResponse2);
+            editor.putString(KEY_CANNED_RESPONSE_PREF_3, cannedResponse3);
+            editor.putString(KEY_CANNED_RESPONSE_PREF_4, cannedResponse4);
+            editor.commit();
+        }
 
         Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Done.");
         return;
diff --git a/src/com/android/server/telecom/RespondViaSmsSettings.java b/src/com/android/server/telecom/RespondViaSmsSettings.java
index 2283a88..f8aa568 100644
--- a/src/com/android/server/telecom/RespondViaSmsSettings.java
+++ b/src/com/android/server/telecom/RespondViaSmsSettings.java
@@ -24,6 +24,7 @@
 import android.preference.EditTextPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
 import android.view.Menu;
 import android.view.MenuItem;
 
@@ -37,6 +38,9 @@
  */
 public class RespondViaSmsSettings extends PreferenceActivity
         implements Preference.OnPreferenceChangeListener {
+
+    private SharedPreferences mPrefs;
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -47,8 +51,18 @@
         // old QuickResponses in Telephony pre L.
         QuickResponseUtils.maybeMigrateLegacyQuickResponses(this);
 
-        getPreferenceManager().setSharedPreferencesName(
-                QuickResponseUtils.SHARED_PREFERENCES_NAME);
+        getPreferenceManager().setSharedPreferencesName(QuickResponseUtils.SHARED_PREFERENCES_NAME);
+        mPrefs = getPreferenceManager().getSharedPreferences();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        PreferenceScreen preferenceScreen = getPreferenceScreen();
+        if (preferenceScreen != null) {
+            preferenceScreen.removeAll();
+        }
 
         // This preference screen is ultra-simple; it's just 4 plain
         // <EditTextPreference>s, one for each of the 4 "canned responses".
@@ -62,27 +76,10 @@
         // title any time the user edits one of the strings.)
 
         addPreferencesFromResource(R.xml.respond_via_sms_settings);
-
-        EditTextPreference pref;
-        pref = (EditTextPreference) findPreference(
-                QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_1);
-        pref.setTitle(pref.getText());
-        pref.setOnPreferenceChangeListener(this);
-
-        pref = (EditTextPreference) findPreference(
-                QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_2);
-        pref.setTitle(pref.getText());
-        pref.setOnPreferenceChangeListener(this);
-
-        pref = (EditTextPreference) findPreference(
-                QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_3);
-        pref.setTitle(pref.getText());
-        pref.setOnPreferenceChangeListener(this);
-
-        pref = (EditTextPreference) findPreference(
-                QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_4);
-        pref.setTitle(pref.getText());
-        pref.setOnPreferenceChangeListener(this);
+        initPref(findPreference(QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_1));
+        initPref(findPreference(QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_2));
+        initPref(findPreference(QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_3));
+        initPref(findPreference(QuickResponseUtils.KEY_CANNED_RESPONSE_PREF_4));
 
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
@@ -106,6 +103,10 @@
         // rather than pref.getText().)
         pref.setTitle((String) newValue);
 
+        // Save the new preference value.
+        SharedPreferences.Editor editor = mPrefs.edit();
+        editor.putString(pref.getKey(), (String) newValue).commit();
+
         return true;  // means it's OK to update the state of the Preference with the new value
     }
 
@@ -126,5 +127,15 @@
      */
     public static void goUpToTopLevelSetting(Activity activity) {
         activity.finish();
-     }
+    }
+
+    /**
+     * Initialize the preference to the persisted preference value or default text.
+     */
+    private void initPref(Preference preference) {
+        EditTextPreference pref = (EditTextPreference) preference;
+        pref.setText(mPrefs.getString(pref.getKey(), pref.getText()));
+        pref.setTitle(pref.getText());
+        pref.setOnPreferenceChangeListener(this);
+    }
 }