В файле исходного код со строки 692 устанавливается то что при открытие клавиатуры англ языка все буквы будут большими и в общем так оно и есть но когда я добавил еще несколько языковых раскладок и установил им идентичный код то они с переменны успехом при открытие становятся большими через раз, один раз при открытие клавиатуры могут быть большими один маленькими, причем если до добавления своего кода на анг языке работало все норм то теперь такие баги происходят и с ним.
https://github.com/maihannijat/AndroidKeyboard/blo...
Так же заметил что если я с больших букв переставляю на маленькие а потом меняю язык и выхожу с мессенджера потом захожу заново и переключаюсь на ту раскладку которую я оставил с маленькими буквами то она так и осталась с маленькими буквами.
https://youtube.com/shorts/KMX7MwxjKNk?feature=share
Мой измененный код начиная с 662 строки
https://github.com/maihannijat/AndroidKeyboard/blo...
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);
}
Мой код измененный с 810 строки
https://github.com/maihannijat/AndroidKeyboard/blo...
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/blo...
private void checkToggleCapsLock() {
long now = System.currentTimeMillis();
if (mLastShiftTime + 800 > now) {
mCapsLock = !mCapsLock;
mLastShiftTime = 0;
} else {
mLastShiftTime = now;
}
}
измененный метод
updateShiftKeyState(EditorInfo attr)
https://github.com/maihannijat/AndroidKeyboard/blo...
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();
}
}
В общем частично удалось решить проблему в метод
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);