/** Updates the auto-complete text view. */ private void updateSearchAutoComplete() { mEditorTextView.setThreshold(mSearchable.getSuggestThreshold()); mEditorTextView.setImeOptions(mSearchable.getImeOptions()); int inputType = mSearchable.getInputType(); // We only touch this if the input type is set up for text (which it // almost certainly // should be, in the case of search!) if ((inputType & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT) { // The existence of a suggestions authority is the proxy for // "suggestions // are available here" inputType &= ~InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE; if (mSearchable.getSuggestAuthority() != null) { inputType |= InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE; // TYPE_TEXT_FLAG_AUTO_COMPLETE means that the text editor is // performing // auto-completion based on its own semantics, which it will // present to the user // as they type. This generally means that the input method // should not show its // own candidates, and the spell checker should not be in // action. The text editor // supplies its candidates by calling // InputMethodManager.displayCompletions(), // which in turn will call // InputMethodSession.displayCompletions(). inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; } } mEditorTextView.setInputType(inputType); if (mSuggestionsAdapter != null && mSuggestionsAdapter instanceof CursorAdapter) { ((CursorAdapter) mSuggestionsAdapter).changeCursor(null); } // attach the suggestions adapter, if suggestions are available // The existence of a suggestions authority is the proxy for // "suggestions available here" if (mSearchable.getSuggestAuthority() != null) { LcSuggestionsAdapter adapter = new LcSuggestionsAdapter( getContext(), mPopupItemLayoutResId, this, mSearchable, mOutsideDrawablesCache); mSuggestionsAdapter = adapter; adapter.setMatchWordsColor(mMatchColor); mEditorTextView.setAdapter((LcSuggestionsAdapter) mSuggestionsAdapter); ((LcSuggestionsAdapter) mSuggestionsAdapter) .setQueryRefinement( mQueryRefinement ? LcSuggestionsAdapter.REFINE_ALL : LcSuggestionsAdapter.REFINE_BY_ENTRY); } }
/** * Specifies if a query refinement button should be displayed alongside each suggestion or if it * should depend on the flags set in the individual items retrieved from the suggestions provider. * Clicking on the query refinement button will replace the text in the query text field with the * text from the suggestion. This flag only takes effect if a SearchableInfo has been specified * with {@link #setSearchableInfo(android.app.SearchableInfo)} and not when using a custom * adapter. * * @param enable true if all items should have a query refinement button, false if only those * items that have a query refinement flag set should have the button. * @see android.app.SearchManager#SUGGEST_COLUMN_FLAGS * @see android.app.SearchManager#FLAG_QUERY_REFINEMENT */ public void setQueryRefinementEnabled(boolean enable) { mQueryRefinement = enable; if (mSuggestionsAdapter instanceof LcSuggestionsAdapter) { ((LcSuggestionsAdapter) mSuggestionsAdapter) .setQueryRefinement( enable ? LcSuggestionsAdapter.REFINE_ALL : LcSuggestionsAdapter.REFINE_BY_ENTRY); } }
public void run() { if (mSuggestionsAdapter != null && mSuggestionsAdapter instanceof LcSuggestionsAdapter) { ((LcSuggestionsAdapter) mSuggestionsAdapter).changeCursor(null); } }