0

I'm trying to build my first Android keyboard, and I think it's working fine, but I'm not understanding how to make my "Done / Enter" button confirm the action (e.g. send a message or browse).

I read Android detect Done key press for OnScreen Keyboard

... however, as I'm new to android, java, &c, I'm not really sure how am I supposed to integrate the section:

editText = (EditText) findViewById(R.id.edit_text);

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            // do your stuff here
        }
        return false;
    }
});

... into something like this:

public class FlipKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
    
    private KeyboardView kv;
    private Keyboard ac_keyboard, mn_keyboard, m2_keyboard, m3_keyboard;
    private Keyboard _a_keyboard, _b_keyboard, _c_keyboard, _d_keyboard, _e_keyboard, _f_keyboard;
    private Keyboard _g_keyboard, _h_keyboard, _i_keyboard, _j_keyboard, _k_keyboard, _l_keyboard;
    private Keyboard _m_keyboard, _n_keyboard, _o_keyboard, _p_keyboard, _ps_keyboard, _q_keyboard, _r_keyboard;
    private Keyboard _s_keyboard, _t_keyboard, _th_keyboard, _u_keyboard, _v_keyboard, _w_keyboard, _x_keyboard;
    private Keyboard _y_keyboard, _z_keyboard;
    private Keyboard _amp_keyboard, _com_keyboard, _par_keyboard, _pil_keyboard, _pon_keyboard;
    private Keyboard _que_keyboard, _quo_keyboard, _tha_keyboard, _adm_keyboard, _hyp_keyboard;
    private Keyboard _ope_keyboard;

    private boolean isCaps = false;
    private long ms_Press;

    @Override
    public View onCreateInputView() {
        kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null );
        mn_keyboard = new Keyboard(this, R.xml.qwerty);
        m2_keyboard = new Keyboard(this, R.xml.qwerty__symbl);

        _amp_keyboard = new Keyboard(this, R.xml.qwerty__amper);
        _com_keyboard = new Keyboard(this, R.xml.qwerty__comma);
        _par_keyboard = new Keyboard(this, R.xml.qwerty__parena);
        _pil_keyboard = new Keyboard(this, R.xml.qwerty__pilcr);
        _pon_keyboard = new Keyboard(this, R.xml.qwerty__pontr);
        _que_keyboard = new Keyboard(this, R.xml.qwerty__quest);
        _adm_keyboard = new Keyboard(this, R.xml.qwerty__excla);
        _quo_keyboard = new Keyboard(this, R.xml.qwerty__quote);
        _tha_keyboard = new Keyboard(this, R.xml.qwerty__that);
        _hyp_keyboard = new Keyboard(this, R.xml.qwerty__hyphe);
        _ope_keyboard = new Keyboard(this, R.xml.qwerty__opera);

        _a_keyboard = new Keyboard(this, R.xml.qwerty_a);
        _b_keyboard = new Keyboard(this, R.xml.qwerty_b);
        _c_keyboard = new Keyboard(this, R.xml.qwerty_c);
        _d_keyboard = new Keyboard(this, R.xml.qwerty_d);
        _e_keyboard = new Keyboard(this, R.xml.qwerty_e);
        _f_keyboard = new Keyboard(this, R.xml.qwerty_f);
        _g_keyboard = new Keyboard(this, R.xml.qwerty_g);
        _i_keyboard = new Keyboard(this, R.xml.qwerty_i);
        _k_keyboard = new Keyboard(this, R.xml.qwerty_k);
        _l_keyboard = new Keyboard(this, R.xml.qwerty_l);
        _m_keyboard = new Keyboard(this, R.xml.qwerty_m);
        _n_keyboard = new Keyboard(this, R.xml.qwerty_n);
        _o_keyboard = new Keyboard(this, R.xml.qwerty_o);
        _p_keyboard = new Keyboard(this, R.xml.qwerty_p);
        _ps_keyboard = new Keyboard(this, R.xml.qwerty_ps);
        _q_keyboard = new Keyboard(this, R.xml.qwerty_q);
        _r_keyboard = new Keyboard(this, R.xml.qwerty_r);
        _s_keyboard = new Keyboard(this, R.xml.qwerty_s);
        _t_keyboard = new Keyboard(this, R.xml.qwerty_t);
        _th_keyboard = new Keyboard(this, R.xml.qwerty_th);
        _u_keyboard = new Keyboard(this, R.xml.qwerty_u);
        _w_keyboard = new Keyboard(this, R.xml.qwerty_w);
        _x_keyboard = new Keyboard(this, R.xml.qwerty_x);
        _z_keyboard = new Keyboard(this, R.xml.qwerty_z);

        ac_keyboard = mn_keyboard;
        kv.setKeyboard(ac_keyboard);
        kv.setOnKeyboardActionListener(this);
        return kv;
    }

    @Override
    public void onPress(int i) {
        ms_Press = System.currentTimeMillis();
    }

    @Override
    public void onRelease(int i) {

    }

    @Override
    public void onKey(int i, int[] ints) {
        InputConnection ic = getCurrentInputConnection();
        switch(i)
        {
            case Keyboard.KEYCODE_DELETE:
                ic.deleteSurroundingText(1, 0);
                break;
            case Keyboard.KEYCODE_SHIFT:
                isCaps = !isCaps;
                ac_keyboard.setShifted(isCaps);
                kv.invalidateAllKeys();
                break;
            case Keyboard.KEYCODE_DONE:
                ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
                break;
            case Keyboard.KEYCODE_ALT:
                ac_keyboard = m2_keyboard;
                kv.setKeyboard(ac_keyboard);
                break;
            case Keyboard.KEYCODE_MODE_CHANGE:
                ac_keyboard = mn_keyboard;
                kv.setKeyboard(ac_keyboard);
                break;
            default:
                // ... Independent XML established per key...
                }
                kv.setKeyboard(ac_keyboard);
                break;
            }
            else if (Character.isLetter(code) && isCaps) {
                code = Character.toUpperCase(code);
                ic.commitText(String.valueOf(code), 1);
            }
            else {
                ic.commitText(String.valueOf(code), 1);
            }
    }
}

Not sure if I'm supposed to place this "editText" code into my public class, or what else.

Felipe Vidal
  • 437
  • 3
  • 15

1 Answers1

0

One note regarding this item. I found the problem per se is not the KEYCODE_DONE button, as it works with specific programs, but the capability to make Google HTML browser react to it.

Otherwise, the following works perfectly fine:

sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
Felipe Vidal
  • 437
  • 3
  • 15