13c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet/*
23c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * Copyright (C) 2014 The Android Open Source Project
33c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet *
43c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
53c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * in compliance with the License. You may obtain a copy of the License at
63c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet *
73c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * http://www.apache.org/licenses/LICENSE-2.0
83c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet *
93c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * Unless required by applicable law or agreed to in writing, software distributed under the License
103c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
113c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * or implied. See the License for the specific language governing permissions and limitations under
123c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * the License.
133c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet */
14ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.widget;
153c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
163c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichetimport android.content.Context;
173c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichetimport android.util.AttributeSet;
183c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichetimport android.util.Log;
193c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichetimport android.view.KeyEvent;
203c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
218619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.leanback.R;
228619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikas
233c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet/**
243c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet * EditText widget that monitors keyboard changes.
253c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet */
26a088f574b916685bd0a75ff613ac2009a3bad483Craig Stoutpublic class SearchEditText extends StreamingTextView {
273c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    private static final String TAG = SearchEditText.class.getSimpleName();
283c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    private static final boolean DEBUG = false;
293c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
30a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout    /**
31a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Interface for receiving notification when the keyboard is dismissed.
32a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     */
333c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public interface OnKeyboardDismissListener {
34a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout        /**
35a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout         * Method invoked when the keyboard is dismissed.
36a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout         */
373c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        public void onKeyboardDismiss();
383c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
393c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
403c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    private OnKeyboardDismissListener mKeyboardDismissListener;
413c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
423c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public SearchEditText(Context context) {
433c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        this(context, null);
443c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
453c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
463c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public SearchEditText(Context context, AttributeSet attrs) {
473c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        this(context, attrs, R.style.TextAppearance_Leanback_SearchTextEdit);
483c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
493c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
503c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public SearchEditText(Context context, AttributeSet attrs, int defStyle) {
513c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        super(context, attrs, defStyle);
523c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
533c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
543c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    @Override
553c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
563c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
573c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet            if (DEBUG) Log.v(TAG, "Keyboard being dismissed");
58682b577d8c89af032bb9e114d9df59d7aeaad6efJake Wharton            if (mKeyboardDismissListener != null) {
59682b577d8c89af032bb9e114d9df59d7aeaad6efJake Wharton                mKeyboardDismissListener.onKeyboardDismiss();
60682b577d8c89af032bb9e114d9df59d7aeaad6efJake Wharton            }
612cd8c3f3ca891f8b27bbc10ffc044cace0185ac2Jerome Poichet            return false;
623c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        }
633c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        return super.onKeyPreIme(keyCode, event);
643c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
653c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet
663c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    /**
67a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout     * Sets a keyboard dismissed listener.
683c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet     *
693c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet     * @param listener The listener.
703c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet     */
713c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    public void setOnKeyboardDismissListener(OnKeyboardDismissListener listener) {
723c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet        mKeyboardDismissListener = listener;
733c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet    }
743c2998d502e4e2586d0bfc52ff5d1f2725fa9e6dJerome Poichet}
75