content: package org.libsdl.app;
  
  import android.content.*;
  import android.text.InputType;
  import android.view.*;
  import android.view.inputmethod.EditorInfo;
  import android.view.inputmethod.InputConnection;
  
  /* This is a fake invisible editor view that receives the input and defines the
   * pan&scan region
   */
  public class SDLDummyEdit extends View implements View.OnKeyListener
  {
      InputConnection ic;
      int input_type;
  
      SDLDummyEdit(Context context) {
          super(context);
          setFocusableInTouchMode(true);
          setFocusable(true);
          setOnKeyListener(this);
      }
  
      void setInputType(int input_type) {
          this.input_type = input_type;
      }
  
      @Override
      public boolean onCheckIsTextEditor() {
          return true;
      }
  
      @Override
      public boolean onKey(View v, int keyCode, KeyEvent event) {
          return SDLActivity.handleKeyEvent(v, keyCode, event, ic);
      }
  
      //
      @Override
      public boolean onKeyPreIme (int keyCode, KeyEvent event) {
          // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
          // FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639
          // FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not
          // FIXME: A more effective solution would be to assume our Layout to be RelativeLayout or LinearLayout
          // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
          // FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :)
          if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
              if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) {
                  SDLActivity.onNativeKeyboardFocusLost();
              }
          }
          return super.onKeyPreIme(keyCode, event);
      }
  
      @Override
      public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
          ic = new SDLInputConnection(this, true);
  
          outAttrs.inputType = input_type;
          outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI |
                                EditorInfo.IME_FLAG_NO_FULLSCREEN /* API 11 */;
  
          return ic;
      }
  }
  
  