From 9cbf3255895cfd4c6be8b6cca61207740331cd97 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 14 Dec 2015 16:39:45 -0500 Subject: [PATCH] Fix CustomListPreference click handling Bug: 26187611 Change-Id: I6293d5577b4f770e2dfe94bae53fa9da0822cefc --- .../settings/CustomListPreference.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/CustomListPreference.java b/src/com/android/settings/CustomListPreference.java index 1d49165c240..ce37c14453a 100644 --- a/src/com/android/settings/CustomListPreference.java +++ b/src/com/android/settings/CustomListPreference.java @@ -44,6 +44,8 @@ public class CustomListPreference extends ListPreference{ public static class CustomListPreferenceDialogFragment extends ListPreferenceDialogFragment { + private int mClickedDialogEntryIndex; + public static ListPreferenceDialogFragment newInstance(String key) { final ListPreferenceDialogFragment fragment = new CustomListPreferenceDialogFragment(); final Bundle b = new Bundle(1); @@ -59,12 +61,35 @@ public class CustomListPreference extends ListPreference{ @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { super.onPrepareDialogBuilder(builder); - getCustomizablePreference().onPrepareDialogBuilder(builder, this); + mClickedDialogEntryIndex = getCustomizablePreference() + .findIndexOfValue(getCustomizablePreference().getValue()); + getCustomizablePreference().onPrepareDialogBuilder(builder, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + mClickedDialogEntryIndex = which; + + /* + * Clicking on an item simulates the positive button + * click, and dismisses the dialog. + */ + CustomListPreferenceDialogFragment.this.onClick(dialog, + DialogInterface.BUTTON_POSITIVE); + dialog.dismiss(); + } + }); } @Override public void onDialogClosed(boolean positiveResult) { getCustomizablePreference().onDialogClosed(positiveResult); + final ListPreference preference = getCustomizablePreference(); + if (positiveResult && mClickedDialogEntryIndex >= 0 && + preference.getEntryValues() != null) { + String value = preference.getEntryValues()[mClickedDialogEntryIndex].toString(); + if (preference.callChangeListener(value)) { + preference.setValue(value); + } + } } } }