Android原生输入法输入数字

 Android原生输入法输入数字流程

//按下数字1,com.android.inputmethod.latin
NativePostImeInputStage::onProcess
    ViewPostImeInputStage::onProcess
@frameworks/base/core/java/android/app/Dialog.java
        dispatchTouchEvent  //MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=193.0, y[0]=690.0, toolType[0]=TOOL_TYPE_FINGER, displayId=0
@frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java
            mWindow.superDispatchTouchEvent(ev)
@frameworks/base/core/java/com/android/internal/policy/DecorView.java
                mDecor.superDispatchTouchEvent(event); 
@frameworks/base/core/java/android/view/View.java
                    super.dispatchTouchEvent(event);           
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
                        if (!result && onTouchEvent(event)) { 
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/PointerTracker.java
                            tracker.processMotionEvent(event, mKeyDetector);
                                case MotionEvent.ACTION_DOWN:
                                case MotionEvent.ACTION_POINTER_DOWN:
                                    onDownEvent(x, y, eventTime, keyDetector);
                                        final Key key = getKeyOn(x, y);
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/KeyDetector.java
                                            return mKeyDetector.detectHitKey(x, y);
                                                for (final Key key: mKeyboard.getNearestKeys(touchX, touchY)) {
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/Key.java
                                                    final int distance = key.squaredDistanceToEdge(touchX, touchY);
                                                    if (primaryKey == null || distance < minDistance || key.getCode() > primaryKey.getCode()) {
                                                        minDistance = distance;
                                                        primaryKey = key;  //private final int mCode;   //ASCII码, key=1 20,12 345x90 !icon/undefined/normal
                                        onDownEventInternal(x, y, eventTime);
                                            Key key = onDownKey(x, y, eventTime);
                                                onMoveToNewKey(onMoveKeyInternal(x, y), x, y);
                                                    mKeyDetector.detectHitKey(x, y);
                                                


//抬起,com.android.inputmethod.latin 
NativePostImeInputStage::onProcess
    ViewPostImeInputStage::onProcess
@frameworks/base/core/java/android/app/Dialog.java
        dispatchTouchEvent  //MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=193.0, y[0]=690.0, toolType[0]=TOOL_TYPE_FINGER, displayId=0
@frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java
            mWindow.superDispatchTouchEvent(ev)
@frameworks/base/core/java/com/android/internal/policy/DecorView.java
                mDecor.superDispatchTouchEvent(event); 
@frameworks/base/core/java/android/view/View.java
                    super.dispatchTouchEvent(event);           
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
                        if (!result && onTouchEvent(event)) { 
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/PointerTracker.java
                            tracker.processMotionEvent(event, mKeyDetector);
                                case MotionEvent.ACTION_UP:
                                case MotionEvent.ACTION_POINTER_UP:
                                    onUpEvent(x, y, eventTime);
                                        onUpEventInternal(x, y, eventTime);
                                            detectAndSendKey(currentKey, mKeyX, mKeyY, eventTime);
                                                callListenerOnCodeInput(key, code, x, y, eventTime, false /* isKeyRepeat */);
                                                    if (key.isEnabled() || altersCode) {
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/internal/TypingTimeRecorder.java
                                                        sTypingTimeRecorder.onCodeInput(code, eventTime);
                                                        else if (code != Constants.CODE_UNSPECIFIED) {
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/LatinIME.java
                                                            } else { sListener.onCodeInput(code, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, isKeyRepeat);
                                                                final Event event = createSoftwareKeypressEvent(getCodePointForKeyboard(codePoint), keyX, keyY, isKeyRepeat);
                                                                onEvent(event);
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
                                                                    final InputTransaction completeInputTransaction = mInputLogic.onCodeInput(mSettings.getCurrent(), event, mKeyboardSwitcher.getKeyboardShiftMode(), mKeyboardSwitcher.getCurrentKeyboardScriptId(), mHandler);
                                                                        handleNonFunctionalEvent(currentEvent, inputTransaction, handler);
                                                                            default: handleNonSpecialCharacterEvent(event, inputTransaction, handler);
                                                                                handleNonSeparatorEvent(event, inputTransaction.mSettingsValues, inputTransaction);
                                                                                    final boolean swapWeakSpace = tryStripSpaceAndReturnWhetherShouldSwapInstead(event, inputTransaction);
                                                                                        sendKeyCodePoint(settingsValues, codePoint);
                                                                                            if (codePoint >= '0' && codePoint <= '9') {  sendDownUpKeyEvent(codePoint - '0' + KeyEvent.KEYCODE_0); }
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/RichInputConnection.java
                                                                                                mConnection.sendKeyEvent(new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, keyCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
                                                                                                    if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
                                                                                                        final String text = StringUtils.newSingleCodePointString(keyEvent.getUnicodeChar());
                                                                                                        mCommittedTextBeforeComposingText.append(text);
@frameworks/base/core/java/com/android/internal/view/InputConnectionWrapper.java
                                                                                                    if (isConnected()) { mIC.sendKeyEvent(keyEvent); }
                                                                                                        mIInputContext.sendKeyEvent(event);   //跨进程通信,输入法应用调用app应用的sendKeyEvent, 这里的app是com.example.myapplication
                                                                                                            dispatchMessage(obtainMessageO(DO_SEND_KEY_EVENT, event));
                                                                                                                case DO_SEND_KEY_EVENT: {
                                                                                                                    InputConnection ic = getInputConnection();
@frameworks/base/core/java/android/view/inputmethod/InputConnectionWrapper.java
                                                                                                                    ic.sendKeyEvent((KeyEvent) msg.obj);
@frameworks/base/core/java/android/view/inputmethod/BaseInputConnection.java
                                                                                                                        mTarget.sendKeyEvent(event);
@frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
                                                                                                                            mIMM.dispatchKeyEventFromInputMethod(mTargetView, event);
                                                                                                                                final InputMethodManager fallbackImm = getFallbackInputMethodManagerIfNecessary(targetView);
                                                                                                                                if (fallbackImm != null) { return fallbackImm.dispatchKeyEventFromInputMethod(targetView, event);}
                                                                                                                                ViewRootImpl viewRootImpl = targetView != null ? targetView.getViewRootImpl() : null;
@frameworks/base/core/java/android/view/ViewRootImpl.java
                                                                                                                                if (viewRootImpl != null) { viewRootImpl.dispatchKeyFromIme(event); }
                                                                                                                                    Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event);
                                                                                                                                    mHandler.sendMessage(msg);
                                                                                                                                        case MSG_DISPATCH_KEY_FROM_IME: { enqueueInputEvent(event, null, QueuedInputEvent.FLAG_DELIVER_POST_IME, true); } //from IME to DecorView@9d665bb[MainActivity]
                                                                                                                                            QueuedInputEvent q = obtainQueuedInputEvent(event, receiver, flags);
                                                                                                                                                doProcessInputEvents();
                                                                                                                                                    deliverInputEvent(q);
                                                                                                                                                        stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage;
                                                                                                                                                            stage.deliver(q);
                                                                                                                                                                EarlyPostImeInputStage::onProcess
                                                                                                                                                                    stage.deliver(q);
                                                                                                                                                                        NativePostImeInputStage::onProcess
                                                                                                                                                                            stage.deliver(q);  //QueuedInputEvent{flags=DELIVER_POST_IME|FINISHED|FINISHED_HANDLED, hasNextQueuedEvent=true, hasInputEventReceiver=false, mEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_1, scanCode=0, metaState=0, flags=0x6, repeatCount=0, eventTime=37602, downTime=37602, deviceId=-1, source=0x0, displayId=0 }}
                                                                                                                                                                                ViewPostImeInputStage::onProcess
                                                                                                                                                                                    return processKeyEvent(q);
                                                                                                                                                                                        if (mView.dispatchKeyEvent(event)) {
@frameworks/base/core/java/android/widget/TextView.java
                                                                                                                                                                                            onKeyDown(int keyCode, KeyEvent event)
                                                                                                                                                                                                int which = doKeyDown(keyCode, event, null);
                                                                                                                                                                                                    if (mEditor != null && mEditor.mKeyListener != null) {
                                                                                                                                                                                                        beginBatchEdit();
@frameworks/base/core/java/android/widget/Editor.java
                                                                                                                                                                                                            if (mEditor != null) mEditor.beginBatchEdit();
                                                                                                                                                                                                                ims.mChangedEnd = mTextView.getText().length();
                                                                                                                                                                                                                mTextView.onBeginBatchEdit()
                                                                                                                                                                                                        endBatchEdit();
                                                                                                                                                                                                        if (handled) return KEY_DOWN_HANDLED_BY_KEY_LISTENER;
                                                                                                mConnection.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime, KeyEvent.ACTION_UP, keyCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
                                                                                                    if (isConnected()) { mIC.sendKeyEvent(keyEvent); }
                                                                                                        .......................................................................................................
                                                                                                                                                                                ViewPostImeInputStage::onProcess
                                                                                                                                                                                    return processKeyEvent(q);
                                                                                                                                                                                        if (mView.dispatchKeyEvent(event)) {
@frameworks/base/core/java/android/widget/TextView.java
                                                                                                                                                                                            onKeyUp(int keyCode, KeyEvent event)
                                                                                                                                                                                                if (mEditor != null && mEditor.mKeyListener != null) { mEditor.mKeyListener.onKeyUp(this, (Editable) mText, keyCode, event) }
                                                                                                                                                                                                if (mMovement != null && mLayout != null) { mMovement.onKeyUp(this, mSpannable, keyCode, event)  }
                                                                                                                                                                                                return super.onKeyUp(keyCode, event);
                                                                                                                                                                                            return FORWARD;
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
                                                                    mKeyboardSwitcher.onEvent(event, getCurrentAutoCapsState(), getCurrentRecapitalizeState());
                                                                        mState.onEvent(event, currentAutoCapsState, currentRecapitalizeState);
                                                callListenerOnRelease(key, code, false /* withSliding */);
                                                if (key.isEnabled()) {
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/LatinIME.java
                                                    sListener.onReleaseKey(primaryCode, withSliding);
                                                        mKeyboardSwitcher.onReleaseKey(primaryCode, withSliding, getCurrentAutoCapsState(),getCurrentRecapitalizeState());
                                                                    

//org.mozilla.firefox
EarlyPostImeInputStage::onProcess  //QueuedInputEvent{flags=DELIVER_POST_IME, hasNextQueuedEvent=true, hasInputEventReceiver=false, mEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_1, scanCode=0, metaState=0, flags=0x6, repeatCount=0, eventTime=60143, downTime=60143, deviceId=-1, source=0x0, displayId=0 }}
    NativePostImeInputStage onProcess
        ViewPostImeInputStage onProcess
EarlyPostImeInputStage::onProcess  //QueuedInputEvent{flags=DELIVER_POST_IME, hasNextQueuedEvent=true, hasInputEventReceiver=false, mEvent=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_1, scanCode=0, metaState=0, flags=0x6, repeatCount=0, eventTime=60143, downTime=60146, deviceId=-1, source=0x0, displayId=0 }}
    NativePostImeInputStage onProcess
        ViewPostImeInputStage onProcess        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛文旺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值