summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Justin Ghan <justinghan@google.com> 2022-10-05 16:12:13 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-10-05 16:12:13 +0000
commitafd1ca4af9bd89f0c6d03ecf503ac18f5fbde4f8 (patch)
tree36b49973260f8451eb8ccfb818981ed9efd9778b
parent9557e8009876140056ac8f4432dc909eb95076b8 (diff)
parent83162821c7a721382791acddf5be136d1130f8b1 (diff)
Merge "Fix whitespace removal bug"
-rw-r--r--core/java/android/widget/TextView.java27
1 files changed, 18 insertions, 9 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index da786f3a95be..b339d76938af 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -9358,10 +9358,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// - The deleted text is at the end of the text
// e.g. "one [deleted]" -> "one |" -> "one|"
// (The pipe | indicates the cursor position.)
- while (start > 0 && TextUtils.isWhitespaceExceptNewline(codePointBeforeStart)) {
+ do {
start -= Character.charCount(codePointBeforeStart);
+ if (start == 0) break;
codePointBeforeStart = Character.codePointBefore(mText, start);
- }
+ } while (TextUtils.isWhitespaceExceptNewline(codePointBeforeStart));
} else if (TextUtils.isWhitespaceExceptNewline(codePointAtEnd)
&& (TextUtils.isWhitespace(codePointBeforeStart)
|| TextUtils.isPunctuation(codePointBeforeStart))) {
@@ -9373,11 +9374,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// - The deleted text is at the start of the text
// e.g. "[deleted] two" -> "| two" -> "|two"
// (The pipe | indicates the cursor position.)
- while (end < mText.length()
- && TextUtils.isWhitespaceExceptNewline(codePointAtEnd)) {
+ do {
end += Character.charCount(codePointAtEnd);
+ if (end == mText.length()) break;
codePointAtEnd = Character.codePointAt(mText, end);
- }
+ } while (TextUtils.isWhitespaceExceptNewline(codePointAtEnd));
}
}
@@ -9487,11 +9488,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
int endOffset = startOffset;
- while (startOffset > 0 && Character.isWhitespace(mText.charAt(startOffset - 1))) {
- startOffset--;
+ while (startOffset > 0) {
+ int codePointBeforeStart = Character.codePointBefore(mText, startOffset);
+ if (!TextUtils.isWhitespace(codePointBeforeStart)) {
+ break;
+ }
+ startOffset -= Character.charCount(codePointBeforeStart);
}
- while (endOffset < mText.length() && Character.isWhitespace(mText.charAt(endOffset))) {
- endOffset++;
+ while (endOffset < mText.length()) {
+ int codePointAtEnd = Character.codePointAt(mText, endOffset);
+ if (!TextUtils.isWhitespace(codePointAtEnd)) {
+ break;
+ }
+ endOffset += Character.charCount(codePointAtEnd);
}
if (startOffset < endOffset) {
getEditableText().delete(startOffset, endOffset);