diff options
author | Gilles Debunne <debunne@google.com> | 2011-04-08 11:31:25 -0700 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2011-04-08 11:33:23 -0700 |
commit | daa4a95a54909d53a325eb06ca22130743b5be04 (patch) | |
tree | b3d058e678d11df82b2a44d4f5efcbac875d4ea0 /core/java/android | |
parent | 99eefad9ab6f573641f45a950b03bf5e7766506d (diff) | |
download | frameworks_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.java | 29 | ||||
-rw-r--r-- | core/java/android/text/method/ArrowKeyMovementMethod.java | 6 |
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); |