aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/LatinIME.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/latin/LatinIME.java')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java14
1 files changed, 8 insertions, 6 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index dd97db34e..1645b1678 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1274,7 +1274,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
clearSuggestions();
}
}
- KeyboardSwitcher switcher = mKeyboardSwitcher;
+ final KeyboardSwitcher switcher = mKeyboardSwitcher;
if (switcher.isShiftedOrShiftLocked()) {
if (keyCodes == null || keyCodes[0] < Character.MIN_CODE_POINT
|| keyCodes[0] > Character.MAX_CODE_POINT) {
@@ -1282,13 +1282,15 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
code = keyCodes[0];
if (switcher.isAlphabetMode() && Character.isLowerCase(code)) {
- int upperCaseCode = Character.toUpperCase(code);
- if (upperCaseCode != code) {
- code = upperCaseCode;
+ // In some locales, such as Turkish, Character.toUpperCase() may return a wrong
+ // character because it doesn't take care of locale.
+ final String upperCaseString = new String(new int[] {code}, 0, 1)
+ .toUpperCase(mSubtypeSwitcher.getInputLocale());
+ if (upperCaseString.codePointCount(0, upperCaseString.length()) == 1) {
+ code = upperCaseString.codePointAt(0);
} else {
// Some keys, such as [eszett], have upper case as multi-characters.
- String upperCase = new String(new int[] {code}, 0, 1).toUpperCase();
- onTextInput(upperCase);
+ onTextInput(upperCaseString);
return;
}
}