| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.quicksearchbox.ui; |
| |
| import android.content.Context; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.inputmethod.CompletionInfo; |
| import android.view.inputmethod.InputMethodManager; |
| import android.widget.EditText; |
| |
| /** |
| * The query text field. |
| */ |
| public class QueryTextView extends EditText { |
| |
| private static final boolean DBG = false; |
| private static final String TAG = "QSB.QueryTextView"; |
| |
| private CommitCompletionListener mCommitCompletionListener; |
| |
| public QueryTextView(Context context, AttributeSet attrs, int defStyle) { |
| super(context, attrs, defStyle); |
| } |
| |
| public QueryTextView(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| } |
| |
| public QueryTextView(Context context) { |
| super(context); |
| } |
| |
| /** |
| * Sets the text selection in the query text view. |
| * |
| * @param selectAll If {@code true}, selects the entire query. |
| * If {@false}, no characters are selected, and the cursor is placed |
| * at the end of the query. |
| */ |
| public void setTextSelection(boolean selectAll) { |
| if (selectAll) { |
| selectAll(); |
| } else { |
| setSelection(length()); |
| } |
| } |
| |
| protected void replaceText(CharSequence text) { |
| clearComposingText(); |
| setText(text); |
| setTextSelection(false); |
| } |
| |
| public void setCommitCompletionListener(CommitCompletionListener listener) { |
| mCommitCompletionListener = listener; |
| } |
| |
| private InputMethodManager getInputMethodManager() { |
| return (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); |
| } |
| |
| public void showInputMethod() { |
| InputMethodManager imm = getInputMethodManager(); |
| if (imm != null) { |
| imm.showSoftInput(this, 0); |
| } |
| } |
| |
| public void hideInputMethod() { |
| InputMethodManager imm = getInputMethodManager(); |
| if (imm != null) { |
| imm.hideSoftInputFromWindow(getWindowToken(), 0); |
| } |
| } |
| |
| @Override |
| public void onCommitCompletion(CompletionInfo completion) { |
| if (DBG) Log.d(TAG, "onCommitCompletion(" + completion + ")"); |
| hideInputMethod(); |
| replaceText(completion.getText()); |
| if (mCommitCompletionListener != null) { |
| mCommitCompletionListener.onCommitCompletion(completion.getPosition()); |
| } |
| } |
| |
| public interface CommitCompletionListener { |
| void onCommitCompletion(int position); |
| } |
| |
| } |