Workaround to avoid a bug in the batch input bigram dictionary lookup

Change-Id: I8a5641c88c45918d6bed81a0b03efdcff0b380c5
main
Tadashi G. Takaoka 2012-07-11 15:11:12 +09:00
parent 9c09fd02eb
commit 1250cdeab2
1 changed files with 8 additions and 4 deletions

View File

@ -111,9 +111,14 @@ public class BinaryDictionary extends Dictionary {
Arrays.fill(mInputCodes, WordComposer.NOT_A_CODE); Arrays.fill(mInputCodes, WordComposer.NOT_A_CODE);
Arrays.fill(mOutputChars, (char) 0); Arrays.fill(mOutputChars, (char) 0);
Arrays.fill(mOutputScores, 0); Arrays.fill(mOutputScores, 0);
final boolean isGesture = composer.isBatchMode();
final boolean isValidPrevWord = (prevWord == null)
// TODO: Remove this check. Unfortunately the current gesture recognition code has
// a double-free bug.
&& !isGesture;
// TODO: toLowerCase in the native code // TODO: toLowerCase in the native code
final int[] prevWordCodePointArray = (null == prevWord) final int[] prevWordCodePointArray = isValidPrevWord
? null : StringUtils.toCodePointArray(prevWord.toString()); ? StringUtils.toCodePointArray(prevWord.toString()) : null;
final int composerSize = composer.size(); final int composerSize = composer.size();
if (composerSize <= 1 || !composer.isBatchMode()) { if (composerSize <= 1 || !composer.isBatchMode()) {
@ -124,7 +129,7 @@ public class BinaryDictionary extends Dictionary {
} }
final int count; final int count;
if (!composer.isBatchMode() && composer.size() <= 1) { if (!isGesture && composer.size() <= 1) {
if (TextUtils.isEmpty(prevWord)) return null; if (TextUtils.isEmpty(prevWord)) return null;
int tmpCount = getBigramsNative(mNativeDict, prevWordCodePointArray, int tmpCount = getBigramsNative(mNativeDict, prevWordCodePointArray,
prevWordCodePointArray.length, mInputCodes, composerSize, prevWordCodePointArray.length, mInputCodes, composerSize,
@ -132,7 +137,6 @@ public class BinaryDictionary extends Dictionary {
count = Math.min(tmpCount, MAX_BIGRAMS); count = Math.min(tmpCount, MAX_BIGRAMS);
} else { } else {
final InputPointers ips = composer.getInputPointers(); final InputPointers ips = composer.getInputPointers();
final boolean isGesture = composer.isBatchMode();
final int codesSize; final int codesSize;
if (isGesture) { if (isGesture) {
codesSize = ips.getPointerSize(); codesSize = ips.getPointerSize();