1014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert/* 2014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project 3014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * 4014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 5014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * you may not use this file except in compliance with the License. 6014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * You may obtain a copy of the License at 7014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * 8014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 9014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * 10014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 11014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 12014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * See the License for the specific language governing permissions and 14014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * limitations under the License. 15014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert */ 16014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertpackage com.android.quicksearchbox.ui; 17014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 18014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.content.Context; 19014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.util.AttributeSet; 20014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.util.Log; 21014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.view.inputmethod.CompletionInfo; 22014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.view.inputmethod.InputMethodManager; 23014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertimport android.widget.EditText; 24014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 25014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert/** 26014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * The query text field. 27014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert */ 28014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringertpublic class QueryTextView extends EditText { 29014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 30014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert private static final boolean DBG = false; 31014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert private static final String TAG = "QSB.QueryTextView"; 32014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 337010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert private CommitCompletionListener mCommitCompletionListener; 34014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 35014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public QueryTextView(Context context, AttributeSet attrs, int defStyle) { 36014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert super(context, attrs, defStyle); 37014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 38014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 39014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public QueryTextView(Context context, AttributeSet attrs) { 40014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert super(context, attrs); 41014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 42014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 43014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public QueryTextView(Context context) { 44014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert super(context); 45014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 46014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 47014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert /** 48014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * Sets the text selection in the query text view. 49014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * 50014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * @param selectAll If {@code true}, selects the entire query. 51014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * If {@false}, no characters are selected, and the cursor is placed 52014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert * at the end of the query. 53014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert */ 54014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public void setTextSelection(boolean selectAll) { 55014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert if (selectAll) { 56014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert selectAll(); 57014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } else { 58014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert setSelection(length()); 59014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 60014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 61014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 62014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert protected void replaceText(CharSequence text) { 63014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert clearComposingText(); 64014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert setText(text); 65014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert setTextSelection(false); 66014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 67014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 687010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert public void setCommitCompletionListener(CommitCompletionListener listener) { 697010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert mCommitCompletionListener = listener; 70014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 71014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 72014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert private InputMethodManager getInputMethodManager() { 73014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert return (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 74014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 75014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 76014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public void showInputMethod() { 77014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert InputMethodManager imm = getInputMethodManager(); 78014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert if (imm != null) { 79014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert imm.showSoftInput(this, 0); 80014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 81014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 82014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 83014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public void hideInputMethod() { 84014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert InputMethodManager imm = getInputMethodManager(); 85014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert if (imm != null) { 86014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert imm.hideSoftInputFromWindow(getWindowToken(), 0); 87014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 88014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 89014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 90014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert @Override 91014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert public void onCommitCompletion(CompletionInfo completion) { 92014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert if (DBG) Log.d(TAG, "onCommitCompletion(" + completion + ")"); 93014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert hideInputMethod(); 94014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert replaceText(completion.getText()); 957010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert if (mCommitCompletionListener != null) { 967010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert mCommitCompletionListener.onCommitCompletion(completion.getPosition()); 97014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 98014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert } 99014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert 1007010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert public interface CommitCompletionListener { 1017010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert void onCommitCompletion(int position); 1027010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert } 1037010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert 104014e0d0c0a5102b7cc1c5576a3af25a646731dd0Bjorn Bringert} 105