diff options
| author | 2011-01-25 11:58:09 -0800 | |
|---|---|---|
| committer | 2011-01-25 12:10:56 -0800 | |
| commit | 7f8aef6d5bd26cfc7f96d059ab66abdb320ebd27 (patch) | |
| tree | f91b6978aa3e47476ea86a29a4de0c757638cf49 | |
| parent | aaa55d3f45744814907d0809befb49281ced462e (diff) | |
Heed the focusability flag in SearchView and set the default to true.
Bug: 3385804
Also, allow navigation through keyboard.
Change-Id: I444f142518172b35f33c2a5129179ac996d80dc7
| -rw-r--r-- | core/java/android/widget/SearchView.java | 28 | ||||
| -rw-r--r-- | core/res/res/layout/search_view.xml | 3 |
2 files changed, 24 insertions, 7 deletions
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index b86366c1ca92..a37f12ebed2b 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -214,6 +214,8 @@ public class SearchView extends LinearLayout { } }); + boolean focusable = true; + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SearchView, 0, 0); setIconifiedByDefault(a.getBoolean(R.styleable.SearchView_iconifiedByDefault, true)); int maxWidth = a.getDimensionPixelSize(R.styleable.SearchView_maxWidth, -1); @@ -226,6 +228,11 @@ public class SearchView extends LinearLayout { } a.recycle(); + a = context.obtainStyledAttributes(attrs, R.styleable.View, 0, 0); + focusable = a.getBoolean(R.styleable.View_focusable, focusable); + a.recycle(); + setFocusable(focusable); + // Save voice intent for later queries/launching mVoiceWebSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); mVoiceWebSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -259,10 +266,18 @@ public class SearchView extends LinearLayout { /** @hide */ @Override public boolean requestFocus(int direction, Rect previouslyFocusedRect) { - if (mClearingFocus || isIconified()) return false; - boolean result = mQueryTextView.requestFocus(direction, previouslyFocusedRect); - if (result) updateViewsVisibility(mIconifiedByDefault); - return result; + // Don't accept focus if in the middle of clearing focus + if (mClearingFocus) return false; + // Check if SearchView is focusable. + if (!isFocusable()) return false; + // If it is not iconified, then give the focus to the text field + if (!isIconified()) { + boolean result = mQueryTextView.requestFocus(direction, previouslyFocusedRect); + if (result) updateViewsVisibility(false); + return result; + } else { + return super.requestFocus(direction, previouslyFocusedRect); + } } /** @hide */ @@ -527,7 +542,6 @@ public class SearchView extends LinearLayout { updateCloseButton(); updateVoiceButton(!hasText); updateSubmitArea(); - requestLayout(); } private boolean hasVoiceSearch() { @@ -580,7 +594,7 @@ public class SearchView extends LinearLayout { private void setImeVisibility(boolean visible) { InputMethodManager imm = (InputMethodManager) - getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + getContext().getSystemService(Context.INPUT_METHOD_SERVICE); // We made sure the IME was displayed, so also make sure it is closed // when we go away. @@ -903,8 +917,8 @@ public class SearchView extends LinearLayout { } private void onSearchClicked() { - mQueryTextView.requestFocus(); updateViewsVisibility(false); + mQueryTextView.requestFocus(); setImeVisibility(true); if (mOnSearchClickListener != null) { mOnSearchClickListener.onClick(this); diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml index 0a7cd3c8c191..c41c2decd35b 100644 --- a/core/res/res/layout/search_view.xml +++ b/core/res/res/layout/search_view.xml @@ -105,6 +105,7 @@ android:layout_gravity="center_vertical" android:background="?android:attr/selectableItemBackground" android:src="?android:attr/searchViewCloseIcon" + android:focusable="true" /> </LinearLayout> @@ -127,6 +128,7 @@ android:background="?android:attr/selectableItemBackground" android:src="?android:attr/searchViewGoIcon" android:visibility="gone" + android:focusable="true" /> <ImageView @@ -139,6 +141,7 @@ android:src="?android:attr/searchViewVoiceIcon" android:background="?android:attr/selectableItemBackground" android:visibility="gone" + android:focusable="true" /> </LinearLayout> </LinearLayout> |