summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2011-04-08 11:31:25 -0700
committerGilles Debunne <debunne@google.com>2011-04-08 11:33:23 -0700
commitdaa4a95a54909d53a325eb06ca22130743b5be04 (patch)
treeb3d058e678d11df82b2a44d4f5efcbac875d4ea0 /core/java/android
parent99eefad9ab6f573641f45a950b03bf5e7766506d (diff)
downloadframeworks_base-daa4a95a54909d53a325eb06ca22130743b5be04.zip
frameworks_base-daa4a95a54909d53a325eb06ca22130743b5be04.tar.gz
frameworks_base-daa4a95a54909d53a325eb06ca22130743b5be04.tar.bz2
Fix in BreakIterator.
An index equal to the length of text is indeed a valid position, representing a cursor located after the last character. Also changed iterator to comply to the documentation. Change-Id: I7b9e427e4e37df20ab7e66d99053a9d8a6af6eb3
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/text/CharSequenceIterator.java29
-rw-r--r--core/java/android/text/method/ArrowKeyMovementMethod.java6
2 files changed, 20 insertions, 15 deletions
diff --git a/core/java/android/text/CharSequenceIterator.java b/core/java/android/text/CharSequenceIterator.java
index 4946406..4b8ac10 100644
--- a/core/java/android/text/CharSequenceIterator.java
+++ b/core/java/android/text/CharSequenceIterator.java
@@ -16,22 +16,18 @@
package android.text;
-import android.util.MathUtils;
-
import java.text.CharacterIterator;
/** {@hide} */
public class CharSequenceIterator implements CharacterIterator {
private final CharSequence mValue;
- private final int mStart;
- private final int mEnd;
+ private final int mLength;
private int mIndex;
public CharSequenceIterator(CharSequence value) {
mValue = value;
- mStart = 0;
- mEnd = value.length();
+ mLength = value.length();
mIndex = 0;
}
@@ -46,7 +42,7 @@ public class CharSequenceIterator implements CharacterIterator {
/** {@inheritDoc} */
public char current() {
- if (mIndex == mEnd) {
+ if (mIndex == mLength) {
return DONE;
}
return mValue.charAt(mIndex);
@@ -54,12 +50,12 @@ public class CharSequenceIterator implements CharacterIterator {
/** {@inheritDoc} */
public int getBeginIndex() {
- return mStart;
+ return 0;
}
/** {@inheritDoc} */
public int getEndIndex() {
- return mEnd;
+ return mLength;
}
/** {@inheritDoc} */
@@ -69,27 +65,36 @@ public class CharSequenceIterator implements CharacterIterator {
/** {@inheritDoc} */
public char first() {
- return setIndex(mStart);
+ return setIndex(0);
}
/** {@inheritDoc} */
public char last() {
- return setIndex(mEnd - 1);
+ return setIndex(mLength - 1);
}
/** {@inheritDoc} */
public char next() {
+ if (mIndex == mLength) {
+ return DONE;
+ }
return setIndex(mIndex + 1);
}
/** {@inheritDoc} */
public char previous() {
+ if (mIndex == 0) {
+ return DONE;
+ }
return setIndex(mIndex - 1);
}
/** {@inheritDoc} */
public char setIndex(int index) {
- mIndex = MathUtils.constrain(index, mStart, mEnd);
+ if ((index < 0) || (index > mLength)) {
+ throw new IllegalArgumentException("Valid range is [" + 0 + "..." + mLength + "]");
+ }
+ mIndex = index;
return current();
}
}
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index 80c0106..b25ba8d 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -390,7 +390,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme
}
private boolean isValidOffset(int offset) {
- return offset >= 0 && offset < mCurrent.length();
+ return offset >= 0 && offset <= mCurrent.length();
}
private boolean isLetterOrDigit(int offset) {
@@ -404,7 +404,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme
/** {@inheritDoc} */
public int preceding(int offset) {
// always round cursor index into valid string index
- offset = MathUtils.constrain(offset, 0, mCurrent.length() - 1);
+ offset = MathUtils.constrain(offset, 0, mCurrent.length());
do {
offset = mIterator.preceding(offset);
@@ -417,7 +417,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme
/** {@inheritDoc} */
public int following(int offset) {
// always round cursor index into valid string index
- offset = MathUtils.constrain(offset, 0, mCurrent.length() - 1);
+ offset = MathUtils.constrain(offset, 0, mCurrent.length());
do {
offset = mIterator.following(offset);