Change respond-via-sms strings on locale switch.
- No longer automatically store default responses in shared
preferences when performing initial migration. Only store if
previous values are present.
- No longer persist the preferences for these responses.
+ Save preference values when changed in RespondViaSmsSettings.
If the user has changed the value, their value will appear.
Otherwise, the response will be the default for that locale.
Bug: 19501543
Change-Id: Ib0f673ff0ac97b98a9934d8f0a81090ce8e590ea
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);
+ }
}