Почему не меняется высота клавиатуры не устанавливается CapsLock?

В файле исходного кода со строки 692 устанавливается то, что при открытии клавиатуры английского языка все буквы будут большими, и в общем так оно и есть, но когда я добавил еще несколько языковых раскладок и установил им идентичный код, то они с переменным успехом при открытии становятся большими через раз: один раз при открытии клавиатуры могут быть большими, один маленькими, причем если до добавления своего кода на английском языке работало все норм, то теперь такие баги происходят и с ним. https://github.com/maihannijat/AndroidKeyboard/blob/master/app/src/main/java/com/sunzala/afghankeyboard/android/SoftKeyboard.java

Так же заметил что если я с больших букв переставляю на маленькие а потом меняю язык и выхожу с мессенджера потом захожу заново и переключаюсь на ту раскладку которую я оставил с маленькими буквами то она так и осталась с маленькими буквами. https://youtube.com/shorts/KMX7MwxjKNk?feature=share

измененный метод updateShiftKeyState(EditorInfo attr) https://github.com/maihannijat/AndroidKeyboard/blob/master/app/src/main/java/com/sunzala/afghankeyboard/android/SoftKeyboard.java#L593

private void updateShiftKeyState(EditorInfo attr) {
        if (attr != null
                && mInputView != null && mQwertyKeyboard == mInputView.getKeyboard() || attr != null
                && mInputView != null && mQwertyInhKeyboard == mInputView.getKeyboard() || attr != null
                && mInputView != null && mQwertyRuKeyboard == mInputView.getKeyboard()) {
            int caps = 0;
            EditorInfo ei = getCurrentInputEditorInfo();
            if (ei != null && ei.inputType != InputType.TYPE_NULL) {
                caps = getCurrentInputConnection().getCursorCapsMode(attr.inputType);
            }
            mInputView.setShifted(mCapsLock || caps != 0);

            // Change Shift key icon - 2
            updateShiftIcon();
            updateShiftIconInh();
            updateShiftIconRu();
        }
    }

Мой измененный код, начиная с 662 строки https://github.com/maihannijat/AndroidKeyboard/blob/master/app/src/main/java/com/sunzala/afghankeyboard/android/SoftKeyboard.java#L662

updateShiftKeyState(getCurrentInputEditorInfo());
        } else if (primaryCode == Keyboard.KEYCODE_DELETE) {
            handleBackspace();
        } else if (primaryCode == Keyboard.KEYCODE_SHIFT) {
            handleShift();
        } else if (primaryCode == Keyboard.KEYCODE_CANCEL) {
            handleClose();
            return;
        } else if (primaryCode == LatinKeyboardView.KEYCODE_LANGUAGE_SWITCH) {
            handleLanguageSwitch();
            return;
        } else if (primaryCode == LatinKeyboardView.KEYCODE_OPTIONS) {
            // Show a menu or something'
        } else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE
                && mInputView != null) {
            Keyboard current = mInputView.getKeyboard();
            if ((current == mSymbolsAFKeyboard || current == mSymbolsShiftedAFKeyboard)
                    && getSelectedSubtype() == mFarsiKeyboard) {
                setLatinKeyboard(mFarsiKeyboard);
                updateShiftIcon();
            } else if ((current == mSymbolsAFKeyboard || current == mSymbolsShiftedAFKeyboard)
                    && getSelectedSubtype() == mPashtoKeyboard) {
                setLatinKeyboard(mPashtoKeyboard);
                updateShiftIcon();
            } else if (current == mFarsiKeyboard || current == mPashtoKeyboard) {
                setLatinKeyboard(mSymbolsAFKeyboard);
                mSymbolsAFKeyboard.setShifted(false);
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mPashtoLatinKeyboard) {
                setLatinKeyboard(mPashtoLatinKeyboard);
                updateShiftIcon();
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mQwertyInhKeyboard) {
                setLatinKeyboard(mQwertyInhKeyboard);
                updateShiftIconInh();
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mQwertyRuKeyboard) {
                setLatinKeyboard(mQwertyRuKeyboard);
                updateShiftIconRu();
            } else if (current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) {
                setLatinKeyboard(mQwertyKeyboard);
                updateShiftIcon();
            } else {
                setLatinKeyboard(mSymbolsKeyboard);
                mSymbolsKeyboard.setShifted(false);
            }

измененный метод handleShift() https://github.com/maihannijat/AndroidKeyboard/blob/master/app/src/main/java/com/sunzala/afghankeyboard/android/SoftKeyboard.java#L810

private void handleShift() {
        if (mInputView == null) {
            return;
        }

        Keyboard currentKeyboard = mInputView.getKeyboard();
        if (mQwertyKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIcon();
        } else if (currentKeyboard == mSymbolsKeyboard) {
            mSymbolsKeyboard.setShifted(true);
            setLatinKeyboard(mSymbolsShiftedKeyboard);
            mSymbolsShiftedKeyboard.setShifted(true);
        } else if (currentKeyboard == mSymbolsAFKeyboard) {
            mSymbolsKeyboard.setShifted(true);
            setLatinKeyboard(mSymbolsShiftedAFKeyboard);
            mSymbolsShiftedKeyboard.setShifted(true);
        } else if (currentKeyboard == mSymbolsShiftedAFKeyboard) {
            mSymbolsShiftedAFKeyboard.setShifted(false);
            setLatinKeyboard(mSymbolsAFKeyboard);
            mSymbolsAFKeyboard.setShifted(false);
        } else if (currentKeyboard == mSymbolsShiftedKeyboard) {
            mSymbolsShiftedKeyboard.setShifted(false);
            setLatinKeyboard(mSymbolsKeyboard);
            mSymbolsKeyboard.setShifted(false);
        } else if (mPashtoLatinKeyboard == currentKeyboard) {
            setLatinKeyboard(mPashtoLatinShiftedKeyboard);
            mActiveKeyboard = "ps_latin_AF_Shift";
            mPashtoLatinKeyboard.setShifted(false);
        } else if (mPashtoLatinShiftedKeyboard == currentKeyboard) {
            setLatinKeyboard(mPashtoLatinKeyboard);
            mActiveKeyboard = "ps_latin_AF";
            mPashtoLatinShiftedKeyboard.setShifted(false);
        } else if (mQwertyInhKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIconInh();
        } else if (mQwertyRuKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIconRu();
        }

Метод checkToggleCapsLock() без изменений https://github.com/maihannijat/AndroidKeyboard/blob/master/app/src/main/java/com/sunzala/afghankeyboard/android/SoftKeyboard.java#L910

private void checkToggleCapsLock() {
        long now = System.currentTimeMillis();
        if (mLastShiftTime + 800 > now) {
            mCapsLock = !mCapsLock;
            mLastShiftTime = 0;
        } else {
            mLastShiftTime = now;
        }
    }

В общем частично удалось решить проблему в метод onStartInputView() добавить updateShiftKeyState(attribute); таким образом если с маленькими буквами свернуть клавиатуру кнопкой назад а потом заново нажать на поле ввода то буквы снова становятся большими

@Override
public void onStartInputView(EditorInfo attribute, boolean restarting) {
    super.onStartInputView(attribute, restarting);

    // Dismiss the Emoticons before showing the soft keyboard.
    closeEmoticons();

    mInputView.closing();
    final InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();
    mInputView.setSubtypeOnSpaceKey(subtype);
    updateShiftKeyState(attribute);
}

Но если переключиться на маленькие буквы скажем на русском языке и начать менять язык то когда я вернусь снова на русский то маленькие буквы так и остаются маленькими

В метод onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype) где идет переключение языков не получается установить updateShiftKeyState(attribute);


Ответы (0 шт):