diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/widget/SearchView.java | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index e499e54..1820c3f 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -18,6 +18,8 @@ package android.widget; import static android.widget.SuggestionsAdapter.getColumnString; +import com.android.internal.R; + import android.app.PendingIntent; import android.app.SearchManager; import android.app.SearchableInfo; @@ -44,14 +46,11 @@ import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.R; - import java.util.WeakHashMap; /** @@ -84,7 +83,7 @@ public class SearchView extends LinearLayout { private CursorAdapter mSuggestionsAdapter; private View mSearchButton; private View mSubmitButton; - private View mCloseButton; + private ImageView mCloseButton; private View mSearchEditFrame; private View mVoiceButton; private SearchAutoComplete mQueryTextView; @@ -189,7 +188,7 @@ public class SearchView extends LinearLayout { mSearchEditFrame = findViewById(R.id.search_edit_frame); mSubmitButton = findViewById(R.id.search_go_btn); - mCloseButton = findViewById(R.id.search_close_btn); + mCloseButton = (ImageView) findViewById(R.id.search_close_btn); mVoiceButton = findViewById(R.id.search_voice_btn); mSearchButton.setOnClickListener(mOnClickListener); @@ -252,7 +251,9 @@ public class SearchView extends LinearLayout { @Override public boolean requestFocus(int direction, Rect previouslyFocusedRect) { if (mClearingFocus || isIconified()) return false; - return mQueryTextView.requestFocus(direction, previouslyFocusedRect); + boolean result = mQueryTextView.requestFocus(direction, previouslyFocusedRect); + if (result) updateViewsVisibility(mIconifiedByDefault); + return result; } /** @hide */ @@ -263,6 +264,7 @@ public class SearchView extends LinearLayout { mQueryTextView.clearFocus(); setImeVisibility(false); mClearingFocus = false; + updateViewsVisibility(mIconifiedByDefault); } /** @@ -515,11 +517,21 @@ public class SearchView extends LinearLayout { mSearchButton.setVisibility(visCollapsed); mSubmitButton.setVisibility(mSubmitButtonEnabled && hasText ? visExpanded : GONE); mSearchEditFrame.setVisibility(visExpanded); + updateCloseButton(); updateVoiceButton(!hasText); requestLayout(); invalidate(); } + private void updateCloseButton() { + final boolean hasText = !TextUtils.isEmpty(mQueryTextView.getText()); + // Should we show the close button? It is not shown if there's no focus, + // field is not iconified by default and there is no text in it. + final boolean showClose = hasText || mIconifiedByDefault || mQueryTextView.hasFocus(); + mCloseButton.setVisibility(showClose ? VISIBLE : INVISIBLE); + mCloseButton.getDrawable().setState(hasText ? ENABLED_STATE_SET : EMPTY_STATE_SET); + } + private void setImeVisibility(boolean visible) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); @@ -812,6 +824,7 @@ public class SearchView extends LinearLayout { invalidate(); } updateVoiceButton(!hasText); + updateViewsVisibility(mIconifiedByDefault); if (mOnQueryChangeListener != null) { mOnQueryChangeListener.onQueryTextChanged(newText.toString()); } @@ -882,6 +895,10 @@ public class SearchView extends LinearLayout { } } + void onTextFocusChanged() { + updateCloseButton(); + } + private boolean onItemClicked(int position, int actionKey, String actionMsg) { if (mOnSuggestionListener == null || !mOnSuggestionListener.onSuggestionClicked(position)) { @@ -1283,6 +1300,12 @@ public class SearchView extends LinearLayout { } } + @Override + protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { + super.onFocusChanged(focused, direction, previouslyFocusedRect); + mSearchView.onTextFocusChanged(); + } + /** * We override this method so that we can allow a threshold of zero, * which ACTV does not. |
