Refactor ellipsis attributes and methods
Mostly changed to avoid repetition of code and remove the assumptions
about ellipsis being one code unit. The code for multi-code unit
ellipsis is not triggered yet, but is done in preparation for
potential future locale-dependent cases.
Test: bit CtsTextTestCases:*
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.EditTextTest
Test: bit CtsWidgetTestCases:android.widget.cts.CheckedTextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.AutoCompleteTextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.MultiAutoCompleteTextViewTest
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Change-Id: Id1dfdc503f87fabed2447d55ab2107eee0eccd08
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index a233ba1..0f910cc 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -2036,35 +2036,27 @@
}
}
- private char getEllipsisChar(TextUtils.TruncateAt method) {
- return (method == TextUtils.TruncateAt.END_SMALL) ?
- TextUtils.ELLIPSIS_TWO_DOTS[0] :
- TextUtils.ELLIPSIS_NORMAL[0];
- }
-
private void ellipsize(int start, int end, int line,
char[] dest, int destoff, TextUtils.TruncateAt method) {
- int ellipsisCount = getEllipsisCount(line);
-
+ final int ellipsisCount = getEllipsisCount(line);
if (ellipsisCount == 0) {
return;
}
+ final int ellipsisStart = getEllipsisStart(line);
+ final int lineStart = getLineStart(line);
- int ellipsisStart = getEllipsisStart(line);
- int linestart = getLineStart(line);
-
- for (int i = ellipsisStart; i < ellipsisStart + ellipsisCount; i++) {
- char c;
-
- if (i == ellipsisStart) {
- c = getEllipsisChar(method); // ellipsis
+ final String ellipsisString = TextUtils.getEllipsisString(method);
+ final int ellipsisStringLen = ellipsisString.length();
+ for (int i = 0; i < ellipsisCount; i++) {
+ final char c;
+ if (i < ellipsisStringLen && ellipsisCount <= ellipsisStringLen) {
+ c = ellipsisString.charAt(i);
} else {
- c = '\uFEFF'; // 0-width space
+ c = TextUtils.ELLIPSIS_FILLER;
}
- int a = i + linestart;
-
- if (a >= start && a < end) {
+ final int a = i + ellipsisStart + lineStart;
+ if (start <= a && a < end) {
dest[destoff + a - start] = c;
}
}