summaryrefslogtreecommitdiff
path: root/core/java/android/widget/SearchView.java
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2011-01-25 11:58:09 -0800
committerAmith Yamasani <yamasani@google.com>2011-01-25 12:10:56 -0800
commit7f8aef6d5bd26cfc7f96d059ab66abdb320ebd27 (patch)
treef91b6978aa3e47476ea86a29a4de0c757638cf49 /core/java/android/widget/SearchView.java
parentaaa55d3f45744814907d0809befb49281ced462e (diff)
Heed the focusability flag in SearchView and set the default to true.
Bug: 3385804 Also, allow navigation through keyboard. Change-Id: I444f142518172b35f33c2a5129179ac996d80dc7
Diffstat (limited to 'core/java/android/widget/SearchView.java')
-rw-r--r--core/java/android/widget/SearchView.java28
1 files changed, 21 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);