| /* |
| * Copyright (C) 2022 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. */ |
| class QueryTextView : EditText { |
| private var mCommitCompletionListener: CommitCompletionListener? = null |
| |
| constructor( |
| context: Context?, |
| attrs: AttributeSet?, |
| defStyle: Int |
| ) : super(context, attrs, defStyle) |
| |
| constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) |
| constructor(context: Context?) : super(context) |
| |
| /** |
| * Sets the text selection in the query text view. |
| * |
| * @param selectAll If `true`, selects the entire query. If {@false}, no characters are selected, |
| * and the cursor is placed at the end of the query. |
| */ |
| fun setTextSelection(selectAll: Boolean) { |
| if (selectAll) { |
| selectAll() |
| } else { |
| setSelection(length()) |
| } |
| } |
| |
| protected fun replaceText(text: CharSequence?) { |
| clearComposingText() |
| setText(text) |
| setTextSelection(false) |
| } |
| |
| fun setCommitCompletionListener(listener: CommitCompletionListener?) { |
| mCommitCompletionListener = listener |
| } |
| |
| private val inputMethodManager: InputMethodManager? |
| get() = getContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager |
| |
| fun showInputMethod() { |
| val imm: InputMethodManager? = inputMethodManager |
| if (imm != null) { |
| imm.showSoftInput(this, 0) |
| } |
| } |
| |
| fun hideInputMethod() { |
| val imm: InputMethodManager? = inputMethodManager |
| if (imm != null) { |
| imm.hideSoftInputFromWindow(getWindowToken(), 0) |
| } |
| } |
| |
| @Override |
| override fun onCommitCompletion(completion: CompletionInfo) { |
| if (DBG) Log.d(TAG, "onCommitCompletion($completion)") |
| hideInputMethod() |
| replaceText(completion.getText()) |
| if (mCommitCompletionListener != null) { |
| mCommitCompletionListener?.onCommitCompletion(completion.getPosition()) |
| } |
| } |
| |
| interface CommitCompletionListener { |
| fun onCommitCompletion(position: Int) |
| } |
| |
| companion object { |
| private const val DBG = false |
| private const val TAG = "QSB.QueryTextView" |
| } |
| } |