diff options
Diffstat (limited to 'core/java/android/widget')
-rw-r--r-- | core/java/android/widget/AbsListView.java | 12 | ||||
-rw-r--r-- | core/java/android/widget/AutoCompleteTextView.java | 15 |
2 files changed, 21 insertions, 6 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 2f292d5..bed2a7a 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2945,10 +2945,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te okToSend = false; break; case KeyEvent.KEYCODE_BACK: - if (mFiltered && mPopup != null && mPopup.isShowing() && - event.getAction() == KeyEvent.ACTION_DOWN) { - handled = true; - mTextFilter.setText(""); + if (mFiltered && mPopup != null && mPopup.isShowing()) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + handled = true; + } else if (event.getAction() == KeyEvent.ACTION_UP + && event.isTracking() && !event.isCanceled()) { + handled = true; + mTextFilter.setText(""); + } } okToSend = false; break; diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java index d821a7d..7891d3c 100644 --- a/core/java/android/widget/AutoCompleteTextView.java +++ b/core/java/android/widget/AutoCompleteTextView.java @@ -132,6 +132,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe private AutoCompleteTextView.PassThroughClickListener mPassThroughClickListener; + private int mDownKeyCode; + public AutoCompleteTextView(Context context) { this(context, null); } @@ -603,12 +605,19 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_DOWN + && event.getRepeatCount() == 0) { + mDownKeyCode = keyCode; + } if (isPopupShowing()) { // special case for the back key, we do not even try to send it // to the drop down list but instead, consume it immediately if (keyCode == KeyEvent.KEYCODE_BACK && !mDropDownAlwaysVisible) { - dismissDropDown(); - return true; + if (event.getAction() == KeyEvent.ACTION_UP + && mDownKeyCode == keyCode && !event.isCanceled()) { + dismissDropDown(); + return true; + } } } return super.onKeyPreIme(keyCode, event); @@ -1017,6 +1026,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe @Override public void onWindowFocusChanged(boolean hasWindowFocus) { super.onWindowFocusChanged(hasWindowFocus); + mDownKeyCode = 0; performValidation(); if (!hasWindowFocus && !mDropDownAlwaysVisible) { dismissDropDown(); @@ -1026,6 +1036,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); + mDownKeyCode = 0; performValidation(); if (!focused && !mDropDownAlwaysVisible) { dismissDropDown(); |