diff options
author | Karl Rosaen <krosaen@google.com> | 2009-04-29 13:35:36 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-04-29 13:35:36 -0700 |
commit | 2f7e0447ac746e940db753178d513df914c20334 (patch) | |
tree | 43443f818f9f290e1c8baa5cdd3e457792dbeb8f /core/java/android/widget/AutoCompleteTextView.java | |
parent | d17d8b4f12509666926fd56dd158a892f68869a6 (diff) | |
parent | 98e333f551a4bf2ebb50bb97a2a56b14bfdcd74b (diff) | |
download | frameworks_base-2f7e0447ac746e940db753178d513df914c20334.zip frameworks_base-2f7e0447ac746e940db753178d513df914c20334.tar.gz frameworks_base-2f7e0447ac746e940db753178d513df914c20334.tar.bz2 |
am 98e333f: Fix back key and ime behavior for search dialog.
Merge commit '98e333f551a4bf2ebb50bb97a2a56b14bfdcd74b'
* commit '98e333f551a4bf2ebb50bb97a2a56b14bfdcd74b':
Fix back key and ime behavior for search dialog.
Diffstat (limited to 'core/java/android/widget/AutoCompleteTextView.java')
-rw-r--r-- | core/java/android/widget/AutoCompleteTextView.java | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java index 89faa95..f999045 100644 --- a/core/java/android/widget/AutoCompleteTextView.java +++ b/core/java/android/widget/AutoCompleteTextView.java @@ -127,6 +127,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe // The widget is attached to a window when mAttachCount > 0 private int mAttachCount; + private AutoCompleteTextView.PassThroughClickListener mPassThroughClickListener; + public AutoCompleteTextView(Context context) { this(context, null); } @@ -186,6 +188,28 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe setFocusable(true); addTextChangedListener(new MyWatcher()); + + mPassThroughClickListener = new PassThroughClickListener(); + super.setOnClickListener(mPassThroughClickListener); + } + + @Override + public void setOnClickListener(OnClickListener listener) { + mPassThroughClickListener.mWrapped = listener; + } + + /** + * Private hook into the on click event, dispatched from {@link PassThroughClickListener} + */ + private void onClickImpl() { + // if drop down should always visible, bring it back in front of the soft + // keyboard when the user touches the text field + if (mDropDownAlwaysVisible + && mPopup.isShowing() + && mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED) { + mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); + mPopup.update(); + } } /** @@ -1125,7 +1149,10 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe } mPopup.setHeight(height); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); - mPopup.setOutsideTouchable(true); + + // use outside touchable to dismiss drop down when touching outside of it, so + // only set this if the dropdown is not always visible + mPopup.setOutsideTouchable(!mDropDownAlwaysVisible); mPopup.setTouchInterceptor(new PopupTouchIntercepter()); mPopup.showAsDropDown(getDropDownAnchorView(), mDropDownHorizontalOffset, mDropDownVerticalOffset); @@ -1442,4 +1469,21 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe */ CharSequence fixText(CharSequence invalidText); } + + /** + * Allows us a private hook into the on click event without preventing users from setting + * their own click listener. + */ + private class PassThroughClickListener implements OnClickListener { + + private View.OnClickListener mWrapped; + + /** {@inheritDoc} */ + public void onClick(View v) { + onClickImpl(); + + if (mWrapped != null) mWrapped.onClick(v); + } + } + } |