From 94c02a1a1a6d7e6900e5a459e9cc699b9510e5a2 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 23 Jul 2013 14:43:37 -0700 Subject: Fix handling of ListPreference.setValue() Previously, setValue() was not calling notifyChanged(). This prevented the summary from updating correctly. Now it calls notifyChanged() the first time it's called and when the value actually changes. BUG: 9987962 Change-Id: I02dd4be6bde2969f39d30921a62a7ba908128e0e --- core/java/android/preference/ListPreference.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java index f44cbe40f7ae..9edf112d630b 100644 --- a/core/java/android/preference/ListPreference.java +++ b/core/java/android/preference/ListPreference.java @@ -16,13 +16,13 @@ package android.preference; - import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; import android.util.AttributeSet; /** @@ -41,6 +41,7 @@ public class ListPreference extends DialogPreference { private String mValue; private String mSummary; private int mClickedDialogEntryIndex; + private boolean mValueSet; public ListPreference(Context context, AttributeSet attrs) { super(context, attrs); @@ -130,9 +131,16 @@ public class ListPreference extends DialogPreference { * @param value The value to set for the key. */ public void setValue(String value) { - mValue = value; - - persistString(value); + // Always persist/notify the first time. + final boolean changed = !TextUtils.equals(mValue, value); + if (changed || !mValueSet) { + mValue = value; + mValueSet = true; + persistString(value); + if (changed) { + notifyChanged(); + } + } } /** -- cgit v1.2.3-59-g8ed1b