Merge "Fix a bug for counting code points in WordComposer.java"

main
Xiaojun Bi 2014-04-19 01:03:17 +00:00 committed by Android (Google) Code Review
commit 8e95b2f5a7
2 changed files with 11 additions and 8 deletions

View File

@ -260,7 +260,7 @@ public final class BinaryDictionary extends Dictionary {
final int inputSize; final int inputSize;
if (!isGesture) { if (!isGesture) {
inputSize = composer.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( inputSize = composer.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
mInputCodePoints, MAX_WORD_LENGTH); mInputCodePoints);
if (inputSize < 0) { if (inputSize < 0) {
return null; return null;
} }

View File

@ -129,22 +129,25 @@ public final class WordComposer {
* -1 is returned. * -1 is returned.
* *
* @param destination the array of ints. * @param destination the array of ints.
* @param maxSize the size of the array.
* @return the number of copied code points. * @return the number of copied code points.
*/ */
public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
final int[] destination, final int maxSize) { final int[] destination) {
final int i = mTypedWordCache.length() - 1 - trailingSingleQuotesCount(); // lastIndex is exclusive
if (i < 0) { final int lastIndex = mTypedWordCache.length() - trailingSingleQuotesCount();
if (lastIndex <= 0) {
// The string is empty or contains only single quotes. // The string is empty or contains only single quotes.
return 0; return 0;
} }
final int codePointSize = Character.codePointCount(mTypedWordCache, 0, i);
if (codePointSize > maxSize) { // The following function counts the number of code points in the text range which begins
// at index 0 and extends to the character at lastIndex.
final int codePointSize = Character.codePointCount(mTypedWordCache, 0, lastIndex);
if (codePointSize > destination.length) {
return -1; return -1;
} }
return StringUtils.copyCodePointsAndReturnCodePointCount(destination, mTypedWordCache, 0, return StringUtils.copyCodePointsAndReturnCodePointCount(destination, mTypedWordCache, 0,
i + 1, true /* downCase */); lastIndex, true /* downCase */);
} }
public boolean isSingleLetter() { public boolean isSingleLetter() {