diff options
| author | 2022-10-05 16:12:13 +0000 | |
|---|---|---|
| committer | 2022-10-05 16:12:13 +0000 | |
| commit | afd1ca4af9bd89f0c6d03ecf503ac18f5fbde4f8 (patch) | |
| tree | 36b49973260f8451eb8ccfb818981ed9efd9778b | |
| parent | 9557e8009876140056ac8f4432dc909eb95076b8 (diff) | |
| parent | 83162821c7a721382791acddf5be136d1130f8b1 (diff) | |
Merge "Fix whitespace removal bug"
| -rw-r--r-- | core/java/android/widget/TextView.java | 27 |
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); |