From e462c0ab722a2b75d391c0731c75149fb1607d5c Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Tue, 17 Oct 2017 18:43:45 +0800 Subject: [PATCH] Not all selected languages are deleted in language preferences Bug: 67883179 Change-Id: I650084cc3fceb82c874e8e8e36bf5182da183f2b Fixes: 67883179 Test: manual test by following the reproduce steps Test: verify the issue is fixed --- .../localepicker/LocaleDragAndDropAdapter.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java index 0d8cbaf1166..a6cb6f5e691 100644 --- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java @@ -29,6 +29,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.CheckBox; import android.widget.CompoundButton; import com.android.internal.app.LocalePicker; @@ -159,10 +160,13 @@ class LocaleDragAndDropAdapter dragCell.setShowCheckbox(mRemoveMode); dragCell.setShowMiniLabel(!mRemoveMode); dragCell.setShowHandle(!mRemoveMode && mDragEnabled); - dragCell.setChecked(mRemoveMode ? feedItem.getChecked() : false); dragCell.setTag(feedItem); - dragCell.getCheckbox() - .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + CheckBox checkbox = dragCell.getCheckbox(); + // clear listener before setChecked() in case another item already bind to + // current ViewHolder and checked event is triggered on stale listener mistakenly. + checkbox.setOnCheckedChangeListener(null); + checkbox.setChecked(mRemoveMode ? feedItem.getChecked() : false); + checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { LocaleStore.LocaleInfo feedItem =