aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-02-16 19:17:48 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-16 19:17:48 -0800
commit03c3018492922e8bd77b60fc8e6e04004ff23542 (patch)
tree1dab360d41f512635b98a780a00ddc018bad96aa /java/src
parentf6d26b27a0d41773c358afa1497b2e973a21e19a (diff)
parent9025c55e9ff128b530f4a9a97e95c95547dcab6c (diff)
downloadlatinime-03c3018492922e8bd77b60fc8e6e04004ff23542.tar.gz
latinime-03c3018492922e8bd77b60fc8e6e04004ff23542.tar.xz
latinime-03c3018492922e8bd77b60fc8e6e04004ff23542.zip
Merge "Use additional proximity chars even when no key is detected."
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyDetector.java63
1 files changed, 36 insertions, 27 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyDetector.java b/java/src/com/android/inputmethod/keyboard/KeyDetector.java
index bff491ffd..0ce98d2f1 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyDetector.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyDetector.java
@@ -180,32 +180,34 @@ public class KeyDetector {
if (maxCodesSize <= numCodes) {
return;
}
- if (primaryCode != NOT_A_CODE) {
- final List<Integer> additionalChars =
- mKeyboard.getAdditionalProximityChars().get(primaryCode);
- if (additionalChars == null || additionalChars.size() == 0) {
- return;
- }
- int currentCodesSize = numCodes;
- allCodes[numCodes++] = ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE;
- if (maxCodesSize <= numCodes) {
- return;
- }
- // TODO: This is O(N^2). Assuming additionalChars.size() is up to 4 or 5.
- for (int i = 0; i < additionalChars.size(); ++i) {
- final int additionalChar = additionalChars.get(i);
- boolean contains = false;
- for (int j = 0; j < currentCodesSize; ++j) {
- if (additionalChar == allCodes[j]) {
- contains = true;
- break;
- }
+
+ final int code = (primaryCode == NOT_A_CODE) ? allCodes[0] : primaryCode;
+ if (code == NOT_A_CODE) {
+ return;
+ }
+ final List<Integer> additionalChars = mKeyboard.getAdditionalProximityChars().get(code);
+ if (additionalChars == null || additionalChars.size() == 0) {
+ return;
+ }
+ int currentCodesSize = numCodes;
+ allCodes[numCodes++] = ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE;
+ if (maxCodesSize <= numCodes) {
+ return;
+ }
+ // TODO: This is O(N^2). Assuming additionalChars.size() is up to 4 or 5.
+ for (int i = 0; i < additionalChars.size(); ++i) {
+ final int additionalChar = additionalChars.get(i);
+ boolean contains = false;
+ for (int j = 0; j < currentCodesSize; ++j) {
+ if (additionalChar == allCodes[j]) {
+ contains = true;
+ break;
}
- if (!contains) {
- allCodes[numCodes++] = additionalChar;
- if (maxCodesSize <= numCodes) {
- return;
- }
+ }
+ if (!contains) {
+ allCodes[numCodes++] = additionalChar;
+ if (maxCodesSize <= numCodes) {
+ return;
}
}
}
@@ -257,10 +259,17 @@ public class KeyDetector {
public static String printableCodes(int[] codes) {
final StringBuilder sb = new StringBuilder();
+ boolean addDelimiter = false;
for (final int code : codes) {
if (code == NOT_A_CODE) break;
- if (sb.length() > 0) sb.append(", ");
- sb.append(code);
+ if (code == ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE) {
+ sb.append(" | ");
+ addDelimiter = false;
+ } else {
+ if (addDelimiter) sb.append(", ");
+ sb.append(code);
+ addDelimiter = true;
+ }
}
return "[" + sb + "]";
}