aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-05-16 15:32:12 +0900
committerKeisuke Kuroyanagi <ksk@google.com>2014-05-16 15:32:12 +0900
commit34873a66f03e0b9945474213fa2bc48cc272a7ca (patch)
tree9bfabd486ac8cb3a03ffd9d3359a762224308873 /java/src/com/android
parentd94567d9637aae33905fc7f292a615996df6d3c9 (diff)
downloadlatinime-34873a66f03e0b9945474213fa2bc48cc272a7ca.tar.gz
latinime-34873a66f03e0b9945474213fa2bc48cc272a7ca.tar.xz
latinime-34873a66f03e0b9945474213fa2bc48cc272a7ca.zip
Fix: StringIndexOutOfBoundsException.
Bug: 14985751 Change-Id: I9df2f737555ab02e24e0fbd231a97c1eec26bc57
Diffstat (limited to 'java/src/com/android')
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java2
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java12
-rw-r--r--java/src/com/android/inputmethod/latin/utils/DistracterFilter.java7
-rw-r--r--java/src/com/android/inputmethod/latin/utils/StringUtils.java9
4 files changed, 16 insertions, 14 deletions
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index db0a8a81c..71355f418 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -94,8 +94,8 @@ public final class Suggest {
final boolean blockOffensiveWords, final boolean isCorrectionEnabled,
final int[] additionalFeaturesOptions, final int sequenceNumber,
final OnGetSuggestedWordsCallback callback) {
- final int trailingSingleQuotesCount = wordComposer.trailingSingleQuotesCount();
final String typedWord = wordComposer.getTypedWord();
+ final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(typedWord);
final String consideredWord = trailingSingleQuotesCount > 0
? typedWord.substring(0, typedWord.length() - trailingSingleQuotesCount)
: typedWord;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index ac6972928..9cf71c7f4 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -149,7 +149,8 @@ public final class WordComposer {
public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
final int[] destination) {
// lastIndex is exclusive
- final int lastIndex = mTypedWordCache.length() - trailingSingleQuotesCount();
+ final int lastIndex = mTypedWordCache.length()
+ - StringUtils.getTrailingSingleQuotesCount(mTypedWordCache);
if (lastIndex <= 0) {
// The string is empty or contains only single quotes.
return 0;
@@ -331,15 +332,6 @@ public final class WordComposer {
return mIsFirstCharCapitalized;
}
- public int trailingSingleQuotesCount() {
- final int lastIndex = mTypedWordCache.length() - 1;
- int i = lastIndex;
- while (i >= 0 && mTypedWordCache.charAt(i) == Constants.CODE_SINGLE_QUOTE) {
- --i;
- }
- return lastIndex - i;
- }
-
/**
* Whether or not all of the user typed chars are upper case
* @return true if all user typed chars are upper case, false otherwise
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
index 0a0379982..dc3e9bf71 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
@@ -86,9 +86,10 @@ public class DistracterFilter {
coordinates = mKeyboard.getCoordinates(codePoints);
composer.setComposingWord(codePoints, coordinates, prevWord);
- final int trailingSingleQuotesCount = composer.trailingSingleQuotesCount();
- final String consideredWord = trailingSingleQuotesCount > 0 ? testedWord.substring(0,
- testedWord.length() - trailingSingleQuotesCount) : testedWord;
+ final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
+ final String consideredWord = trailingSingleQuotesCount > 0 ?
+ testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
+ testedWord;
final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<Boolean>();
final OnGetSuggestedWordsCallback callback = new OnGetSuggestedWordsCallback() {
@Override
diff --git a/java/src/com/android/inputmethod/latin/utils/StringUtils.java b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
index 374badc19..73ac9a573 100644
--- a/java/src/com/android/inputmethod/latin/utils/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
@@ -538,6 +538,15 @@ public final class StringUtils {
? casedText.codePointAt(0) : CODE_UNSPECIFIED;
}
+ public static int getTrailingSingleQuotesCount(final CharSequence charSequence) {
+ final int lastIndex = charSequence.length() - 1;
+ int i = lastIndex;
+ while (i >= 0 && charSequence.charAt(i) == Constants.CODE_SINGLE_QUOTE) {
+ --i;
+ }
+ return lastIndex - i;
+ }
+
@UsedForTesting
public static class Stringizer<E> {
public String stringize(final E element) {