RussianIME 全程解析3
2010-06-08 16:33
429 查看
5 transfer the inputtext into app
Keyevent
InputConnection ic =
getCurrentInputConnection();
long eventTime = SystemClock.uptimeMillis();
ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(),
eventTime,
KeyEvent.ACTION_UP, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
InputMethodService.sendDownUpKeyEvents(keyEventCode);
input by lenovo
InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
6 deal with the hard keybard event
if you want to deal with the hard key event ,you can overide the InputMethodService.onKeyDown() and InputMethodService.onKeyUp();if not ,just use the super.onKey*.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (event.getRepeatCount() == 0 && mInputView != null) {
if (mInputView.handleBack()) {
return true;
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
break;
}
if( bIsRussianHardboard == true && (System.currentTimeMillis() - iLastPressTime < MULTIPRESS_DELAY) && iLastKeycode == keyCode && !bIsReplaced && (KeyEvent.KEYCODE_Q == keyCode || KeyEvent.KEYCODE_P == keyCode || KeyEvent.KEYCODE_Z == keyCode || KeyEvent.KEYCODE_K == keyCode || KeyEvent.KEYCODE_L == keyCode || KeyEvent.KEYCODE_PERIOD == keyCode))
{
bIsReplaced = true;
Log.i("isReplace", bIsReplaced + ";" );
iLastPressTime = -1;
final InputConnection ic = getCurrentInputConnection();
CharSequence lastChar = ic.getTextBeforeCursor(2, 0);
if (lastChar != null && lastChar.length() == 1
&& (lastChar.charAt(0)== '/u0419'||lastChar.charAt(0)== '/u042F'||lastChar.charAt(0)== '/u0416'||lastChar.charAt(0)== '/u0425'||lastChar.charAt(0)== '/u041B'||lastChar.charAt(0) ==KEYCODE_PERIOD))
{
Log.i("LASTCHAR", lastChar.charAt(0)+ ";");
hardCap = true;
}
else
{
hardCap = false;
}
handleBackspace();
}
else
{
bIsReplaced = false;
iLastKeycode = keyCode;
iLastPressTime = System.currentTimeMillis();
}
// sym is used to make the change of russian and english in russiankeyboard mode
if (event.isSymPressed())
{
changeKeyboardLanguage();
mHardKeyboard.updateMetaStateAfterKeypress(HardKeyboardState.META_SHIFT, true);
return true;
}
// Do translation into Russian if necessary
if (KeyboardSwitcher.LANGUAGE_RU == mKeyboardSwitcher.getKeyboardLanguage()
&& handleHardKeyRussian(keyCode, event)) {
bIsRussianHardboard = true;
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
// Enable shift key and DPAD to do selections
if (mInputView != null && mInputView.isShown() && mInputView.isShifted()) {
event = new KeyEvent(event.getDownTime(), event.getEventTime(),
event.getAction(), event.getKeyCode(), event.getRepeatCount(),
event.getDeviceId(), event.getScanCode(),
KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON);
InputConnection ic = getCurrentInputConnection();
if (ic != null) ic.sendKeyEvent(event);
return true;
}
break;
}
return super.onKeyUp(keyCode, event);
}
Keyevent
InputConnection ic =
getCurrentInputConnection();
long eventTime = SystemClock.uptimeMillis();
ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(),
eventTime,
KeyEvent.ACTION_UP, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
InputMethodService.sendDownUpKeyEvents(keyEventCode);
input by lenovo
InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
6 deal with the hard keybard event
if you want to deal with the hard key event ,you can overide the InputMethodService.onKeyDown() and InputMethodService.onKeyUp();if not ,just use the super.onKey*.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (event.getRepeatCount() == 0 && mInputView != null) {
if (mInputView.handleBack()) {
return true;
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
break;
}
if( bIsRussianHardboard == true && (System.currentTimeMillis() - iLastPressTime < MULTIPRESS_DELAY) && iLastKeycode == keyCode && !bIsReplaced && (KeyEvent.KEYCODE_Q == keyCode || KeyEvent.KEYCODE_P == keyCode || KeyEvent.KEYCODE_Z == keyCode || KeyEvent.KEYCODE_K == keyCode || KeyEvent.KEYCODE_L == keyCode || KeyEvent.KEYCODE_PERIOD == keyCode))
{
bIsReplaced = true;
Log.i("isReplace", bIsReplaced + ";" );
iLastPressTime = -1;
final InputConnection ic = getCurrentInputConnection();
CharSequence lastChar = ic.getTextBeforeCursor(2, 0);
if (lastChar != null && lastChar.length() == 1
&& (lastChar.charAt(0)== '/u0419'||lastChar.charAt(0)== '/u042F'||lastChar.charAt(0)== '/u0416'||lastChar.charAt(0)== '/u0425'||lastChar.charAt(0)== '/u041B'||lastChar.charAt(0) ==KEYCODE_PERIOD))
{
Log.i("LASTCHAR", lastChar.charAt(0)+ ";");
hardCap = true;
}
else
{
hardCap = false;
}
handleBackspace();
}
else
{
bIsReplaced = false;
iLastKeycode = keyCode;
iLastPressTime = System.currentTimeMillis();
}
// sym is used to make the change of russian and english in russiankeyboard mode
if (event.isSymPressed())
{
changeKeyboardLanguage();
mHardKeyboard.updateMetaStateAfterKeypress(HardKeyboardState.META_SHIFT, true);
return true;
}
// Do translation into Russian if necessary
if (KeyboardSwitcher.LANGUAGE_RU == mKeyboardSwitcher.getKeyboardLanguage()
&& handleHardKeyRussian(keyCode, event)) {
bIsRussianHardboard = true;
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
// Enable shift key and DPAD to do selections
if (mInputView != null && mInputView.isShown() && mInputView.isShifted()) {
event = new KeyEvent(event.getDownTime(), event.getEventTime(),
event.getAction(), event.getKeyCode(), event.getRepeatCount(),
event.getDeviceId(), event.getScanCode(),
KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON);
InputConnection ic = getCurrentInputConnection();
if (ic != null) ic.sendKeyEvent(event);
return true;
}
break;
}
return super.onKeyUp(keyCode, event);
}
相关文章推荐
- RussianIME 全程解析1
- 东北大学毕业设计(论文)全程解析
- 解析全程电子商务中的“全程”
- 微软公司面试全程解析(1)
- hive安装过程全程解析、hive常规操作、说明
- hive安装过程全程解析、hive常规操作、说明
- 2010-06-23 VBA环境下的ADO编程方法全程解析
- NHibernate+Oracle10g搭建一个项目架构全程解析(二)
- NHibernate+Oracle10g搭建一个项目架构全程解析(四)
- UML类图画法全程解析
- hive安装过程全程解析、hive常规操作、说明
- hive安装过程全程解析、hive常规操作、说明
- VC++下使用tinyXML解析XML全程解析
- 红皮书_ASP.NET2.0网站开发全程解析_第2章_母版
- Dalvik虚拟机启动全程解析
- NHibernate+Oracle10g搭建一个项目架构全程解析(三)
- scsiadapter无法安装的全程解析
- 淘宝直通车全程解析
- owa exchange 的配置操作,全程图片解析
- 业主你可别吃亏,网吧广告谈判全程解析