content: /*
   * Copyright (C) 2006 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 android.text.method;
  
  import android.text.Editable;
  import android.view.KeyEvent;
  import android.view.View;
  
  /**
   * Interface for converting text key events into edit operations on an
   * Editable class.  Note that for most cases this interface has been
   * superceded by general soft input methods as defined by
   * {@link android.view.inputmethod.InputMethod}; it should only be used
   * for cases where an application has its own on-screen keypad and also wants
   * to process hard keyboard events to match it.
   * <p></p>
   * Key presses on soft input methods are not required to trigger the methods
   * in this listener, and are in fact discouraged to do so.  The default
   * android keyboard will not trigger these for any key to any application
   * targetting Jelly Bean or later, and will only deliver it for some
   * key presses to applications targetting Ice Cream Sandwich or earlier.
   */
  public interface KeyListener {
      /**
       * Return the type of text that this key listener is manipulating,
       * as per {@link android.text.InputType}.  This is used to
       * determine the mode of the soft keyboard that is shown for the editor.
       * 
       * <p>If you return
       * {@link android.text.InputType#TYPE_NULL}
       * then <em>no</em> soft keyboard will provided.  In other words, you
       * must be providing your own key pad for on-screen input and the key
       * listener will be used to handle input from a hard keyboard.
       * 
       * <p>If you
       * return any other value, a soft input method will be created when the
       * user puts focus in the editor, which will provide a keypad and also
       * consume hard key events.  This means that the key listener will generally
       * not be used, instead the soft input method will take care of managing
       * key input as per the content type returned here.
       */
      public int getInputType();
      
      /**
       * If the key listener wants to handle this key, return true,
       * otherwise return false and the caller (i.e.&nbsp;the widget host)
       * will handle the key.
       */
      public boolean onKeyDown(View view, Editable text,
                               int keyCode, KeyEvent event);
  
      /**
       * If the key listener wants to handle this key release, return true,
       * otherwise return false and the caller (i.e.&nbsp;the widget host)
       * will handle the key.
       */
      public boolean onKeyUp(View view, Editable text,
                             int keyCode, KeyEvent event);
      
      /**
       * If the key listener wants to other kinds of key events, return true,
       * otherwise return false and the caller (i.e.&nbsp;the widget host)
       * will handle the key.
       */
      public boolean onKeyOther(View view, Editable text, KeyEvent event);
      
      /**
       * Remove the given shift states from the edited text.
       */
      public void clearMetaKeyState(View view, Editable content, int states);
  }
  