19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.method;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Editable;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface for converting text key events into edit operations on an
2507ba2a2131abb4939d5b71ba27dcb68b2bba9255Gilles Debunne * Editable class.  Note that for most cases this interface has been
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * superceded by general soft input methods as defined by
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.inputmethod.InputMethod}; it should only be used
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for cases where an application has its own on-screen keypad and also wants
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to process hard keyboard events to match it.
30405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * <p></p>
31405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * Key presses on soft input methods are not required to trigger the methods
32405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * in this listener, and are in fact discouraged to do so.  The default
33405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * android keyboard will not trigger these for any key to any application
34405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * targetting Jelly Bean or later, and will only deliver it for some
35405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * key presses to applications targetting Ice Cream Sandwich or earlier.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface KeyListener {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the type of text that this key listener is manipulating,
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as per {@link android.text.InputType}.  This is used to
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * determine the mode of the soft keyboard that is shown for the editor.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you return
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.InputType#TYPE_NULL}
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * then <em>no</em> soft keyboard will provided.  In other words, you
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be providing your own key pad for on-screen input and the key
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * listener will be used to handle input from a hard keyboard.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return any other value, a soft input method will be created when the
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user puts focus in the editor, which will provide a keypad and also
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * consume hard key events.  This means that the key listener will generally
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be used, instead the soft input method will take care of managing
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * key input as per the content type returned here.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getInputType();
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the key listener wants to handle this key, return true,
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * otherwise return false and the caller (i.e. the widget host)
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will handle the key.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean onKeyDown(View view, Editable text,
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                             int keyCode, KeyEvent event);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the key listener wants to handle this key release, return true,
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * otherwise return false and the caller (i.e. the widget host)
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will handle the key.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean onKeyUp(View view, Editable text,
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                           int keyCode, KeyEvent event);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the key listener wants to other kinds of key events, return true,
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * otherwise return false and the caller (i.e. the widget host)
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will handle the key.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean onKeyOther(View view, Editable text, KeyEvent event);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the given shift states from the edited text.
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clearMetaKeyState(View view, Editable content, int states);
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
86