Почему не меняется высота клавиатуры не устанавливается 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);