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

//抬起,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);
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/WordComposer.java
                                                                        final Event processedEvent = mWordComposer.processEvent(event);
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/event/CombinerChain.java
                                                                            final Event processedEvent = mCombinerChain.processEvent(mEvents, event);
                                                                                for (final Combiner combiner : mCombiners) {
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/event/DeadKeyCombiner.java
                                                                                    event = combiner.processEvent(modifiablePreviousEvents, event);
                                                                            refreshTypedWordCache();
                                                                                mTypedWordCache = mCombinerChain.getComposingWordWithCombiningFeedback();
                                                                                    final SpannableStringBuilder s = new SpannableStringBuilder(mCombinedText);  //mCombinedText=Name
                                                                                mCodePointSize = Character.codePointCount(mTypedWordCache, 0, mTypedWordCache.length());  //mCodePointSize=4 mTypedWordCache.length()=4
                                                                        handleNonFunctionalEvent(currentEvent, inputTransaction, handler);
                                                                            default: handleNonSpecialCharacterEvent(event, inputTransaction, handler);
                                                                                handleNonSeparatorEvent(event, inputTransaction.mSettingsValues, inputTransaction);
                                                                                    boolean isComposingWord = mWordComposer.isComposingWord(); 
                                                                                        return size() > 0;
                                                                                            return mCodePointSize;  //这里的大小为4
                                                                                    if (isComposingWord) {  //输入数字key还是数字单词开始的流程主要是isComposingWord的值不一样,数字单词为true
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/WordComposer.java
                                                                                        mWordComposer.applyProcessedEvent(event);
                                                                                            mCombinerChain.applyProcessedEvent(event);
                                                                                                final CharSequence textToCommit = event.getTextToCommit();  //textToCommit=1 mCombinedText=Name
                                                                                                if (!TextUtils.isEmpty(textToCommit)) { mCombinedText.append(textToCommit);  }  //如果需要提交的文本非空,则添加进去
                                                                                            refreshTypedWordCache();
                                                                                                mTypedWordCache = mCombinerChain.getComposingWordWithCombiningFeedback();
                                                                                                    final SpannableStringBuilder s = new SpannableStringBuilder(mCombinedText);
                                                                                                mCodePointSize = Character.codePointCount(mTypedWordCache, 0, mTypedWordCache.length());  //mCodePointSize=5 mTypedWordCache.length()=5
                                                                                        setComposingTextInternal(getTextWithUnderline(mWordComposer.getTypedWord()), 1);
                                                                                            setComposingTextInternalWithBackgroundColor(newComposingText, newCursorPosition, Color.TRANSPARENT, newComposingText.length());
@packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/RichInputConnection.java
                                                                                                mConnection.setComposingText(composingTextToBeSet, newCursorPosition);   
@frameworks/base/core/java/com/android/internal/view/InputConnectionWrapper.java
                                                                                                    if (isConnected()) { mIC.setComposingText(text, newCursorPosition); }
                                                                                                        mIInputContext.setComposingText(text, newCursorPosition);  //跨进程通信,输入法应用调用app应用的sendKeyEvent, 这里的app是com.example.myapplication
                                                                                                            dispatchMessage(obtainMessageIO(DO_SET_COMPOSING_TEXT, newCursorPosition, text));
                                                                                                                case DO_SEND_KEY_EVENT: {
                                                                                                                    InputConnection ic = getInputConnection();
@frameworks/base/core/java/android/view/inputmethod/InputConnectionWrapper.java
                                                                                                                    ic.setComposingText((CharSequence) msg.obj, msg.arg1);
@frameworks/base/core/java/android/view/inputmethod/BaseInputConnection.java
                                                                                                                        mTarget.setComposingText(text, newCursorPosition);
@frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
                                                                                                                            replaceText(text, newCursorPosition, true); 
                                                                                                                                beginBatchEdit();
                                                                                                                                int a = getComposingSpanStart(content);
                                                                                                                                int b = getComposingSpanEnd(content);
                                                                                                                                content.replace(a, b, text);
                                                                                                                                endBatchEdit();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛文旺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值