summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2012-01-19 17:23:12 -0800
committerGilles Debunne <debunne@google.com>2012-01-19 17:36:45 -0800
commit92db51938f6dac6227ab362e851858bc848efd9e (patch)
tree8d78c62102d6abafe9dc5f7973128eafde86c14f
parentfa78fe0d70fe7e6a9eb19680888b617ea57eaad4 (diff)
downloadframeworks_base-92db51938f6dac6227ab362e851858bc848efd9e.zip
frameworks_base-92db51938f6dac6227ab362e851858bc848efd9e.tar.gz
frameworks_base-92db51938f6dac6227ab362e851858bc848efd9e.tar.bz2
Make sure text selection always starts
When text can indeed be selected, we should always initiate a text selection on long press. When the WordIterator fails (for instance if the text is entirely made of punctuation characters, maybe also with foreign languages), we select one character. Change-Id: I842507f7cbaed9a924d3176ea8ed6586f3548366
-rw-r--r--core/java/android/widget/TextView.java8
1 files changed, 3 insertions, 5 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index e508e9a..1ec869d 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8920,14 +8920,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
wordIterator.setCharSequence(mText, minOffset, maxOffset);
selectionStart = wordIterator.getBeginning(minOffset);
- if (selectionStart == BreakIterator.DONE) return false;
-
selectionEnd = wordIterator.getEnd(maxOffset);
- if (selectionEnd == BreakIterator.DONE) return false;
- if (selectionStart == selectionEnd) {
+ if (selectionStart == BreakIterator.DONE || selectionEnd == BreakIterator.DONE ||
+ selectionStart == selectionEnd) {
// Possible when the word iterator does not properly handle the text's language
- long range = getCharRange(selectionStart);
+ long range = getCharRange(minOffset);
selectionStart = extractRangeStartFromLong(range);
selectionEnd = extractRangeEndFromLong(range);
}