Show text changes immediately.

In the support library version of Preference, settings changes aren't
visible immediately. Setting the summary value directly works around the
bug.

There's one bug this doesn't fix: when editing a value from set
(non-empty) to the empty string, the UX displays the empty string rather
than the default summary value. Since the default summary value is set
in the XML file, and setSummary clobbers it, there's no way to get
access to it. I felt this additional bug is minor enough, and the
changes required to fix it substantial enough, that it's not worth
fixing in this release.

Change-Id: Ife521f5430476a211d8eb4834c87d5a4a22d0025
Fix: 63386208
Test: runtest --path packages/apps/EmergencyInfo/tests/
diff --git a/src/com/android/emergency/edit/EditMedicalInfoFragment.java b/src/com/android/emergency/edit/EditMedicalInfoFragment.java
index b79163b..0009fa9 100644
--- a/src/com/android/emergency/edit/EditMedicalInfoFragment.java
+++ b/src/com/android/emergency/edit/EditMedicalInfoFragment.java
@@ -40,10 +40,12 @@
         for (int i = 0; i < PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO.length; i++) {
             final int index = i;
             String preferenceKey = PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO[i];
+
             Preference preference = findPreference(preferenceKey);
             preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                 @Override
                 public boolean onPreferenceChange(Preference preference, Object value) {
+                    // Log settings changes.
                     boolean notSet = TextUtils.isEmpty((String) value);
                     // 0 is the default subtype. In DP1 and DP2 we had no explicit subtype.
                     // Start at 30 to differentiate between before and after.
@@ -51,6 +53,12 @@
                             preference.getContext(),
                             MetricsEvent.ACTION_EDIT_EMERGENCY_INFO_FIELD,
                             30 + index * 2 + (notSet ? 0 : 1));
+                    // If the preference implements OnPreferenceChangeListener, notify it of the
+                    // change as well.
+                    if (Preference.OnPreferenceChangeListener.class.isInstance(preference)) {
+                        return ((Preference.OnPreferenceChangeListener) preference)
+                                .onPreferenceChange(preference, value);
+                    }
                     return true;
                 }
             });
diff --git a/src/com/android/emergency/preferences/EmergencyEditTextPreference.java b/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
index fb09eea..efb7adc 100644
--- a/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
+++ b/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
@@ -16,6 +16,7 @@
 package com.android.emergency.preferences;
 
 import android.content.Context;
+import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -29,7 +30,7 @@
  * Custom {@link EditTextPreference} that allows us to refresh and update the summary.
  */
 public class EmergencyEditTextPreference extends CustomEditTextPreference
-        implements ReloadablePreferenceInterface {
+        implements Preference.OnPreferenceChangeListener, ReloadablePreferenceInterface {
 
     private static final int MAX_LINES = 50;
 
@@ -62,6 +63,13 @@
     }
 
     @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        String text = (String) newValue;
+        setSummary(text);
+        return true;
+    }
+
+    @Override
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
         getEditText().setSelection(getEditText().getText().length());
diff --git a/tests/robolectric/src/com/android/emergency/preferences/EmergencyEditTextPreferenceTest.java b/tests/robolectric/src/com/android/emergency/preferences/EmergencyEditTextPreferenceTest.java
index ca3f0c3..14e7a96 100644
--- a/tests/robolectric/src/com/android/emergency/preferences/EmergencyEditTextPreferenceTest.java
+++ b/tests/robolectric/src/com/android/emergency/preferences/EmergencyEditTextPreferenceTest.java
@@ -86,6 +86,14 @@
     }
 
     @Test
+    public void testOnPreferenceChange() throws Throwable {
+        final String medicalConditions = "Asthma";
+        mPreference.onPreferenceChange(mPreference, medicalConditions);
+
+        assertThat(mPreference.getSummary()).isEqualTo(medicalConditions);
+    }
+
+    @Test
     public void testSetText() throws Throwable {
         final String medicalConditions = "Asthma";
         mPreference.setText(medicalConditions);