diff options
| author | Fabrice Di Meglio <fdimeglio@google.com> | 2011-09-23 19:08:04 -0700 |
|---|---|---|
| committer | Fabrice Di Meglio <fdimeglio@google.com> | 2011-09-25 14:39:27 -0700 |
| commit | cb332649e44db86ff8b4e7f006db4bbfd82fed55 (patch) | |
| tree | 968c9bac12944d762e47f7dcc5813198f02c4176 /core/java/android/text/TextUtils.java | |
| parent | 4c253119db0ce753e46ec3809b54b9e357d363db (diff) | |
Fix bug #5366547 TruncateAt.MARQUEE should be replaces with "two dot" ellipsis on hardware that dont support MARQUEE
- introduce TruncateAt.END_SMALL
- code refactoring for suppressing use of hardcoded constants
Change-Id: I70e24857cd5d6bd012a743cbc0ba46fbd06d5457
Diffstat (limited to 'core/java/android/text/TextUtils.java')
| -rw-r--r-- | core/java/android/text/TextUtils.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 894afbdc20ef..95a3cdc6ad8d 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -53,9 +53,8 @@ import java.util.Iterator; import java.util.regex.Pattern; public class TextUtils { - private TextUtils() { /* cannot be instantiated */ } - private static String[] EMPTY_STRING_ARRAY = new String[]{}; + private TextUtils() { /* cannot be instantiated */ } public static void getChars(CharSequence s, int start, int end, char[] dest, int destoff) { @@ -1000,6 +999,10 @@ public class TextUtils { MIDDLE, END, MARQUEE, + /** + * @hide + */ + END_SMALL } public interface EllipsizeCallback { @@ -1010,8 +1013,6 @@ public class TextUtils { public void ellipsized(int start, int end); } - private static String sEllipsis = null; - /** * Returns the original text if it fits in the specified width * given the properties of the specified Paint, @@ -1042,7 +1043,8 @@ public class TextUtils { boolean preserveLength, EllipsizeCallback callback) { return ellipsize(text, paint, avail, where, preserveLength, callback, - TextDirectionHeuristics.FIRSTSTRONG_LTR); + TextDirectionHeuristics.FIRSTSTRONG_LTR, + (where == TruncateAt.END_SMALL) ? ELLIPSIS_TWO_DOTS : ELLIPSIS_NORMAL); } /** @@ -1063,11 +1065,7 @@ public class TextUtils { float avail, TruncateAt where, boolean preserveLength, EllipsizeCallback callback, - TextDirectionHeuristic textDir) { - if (sEllipsis == null) { - Resources r = Resources.getSystem(); - sEllipsis = r.getString(R.string.ellipsis); - } + TextDirectionHeuristic textDir, String ellipsis) { int len = text.length(); @@ -1085,7 +1083,7 @@ public class TextUtils { // XXX assumes ellipsis string does not require shaping and // is unaffected by style - float ellipsiswid = paint.measureText(sEllipsis); + float ellipsiswid = paint.measureText(ellipsis); avail -= ellipsiswid; int left = 0; @@ -1094,7 +1092,7 @@ public class TextUtils { // it all goes } else if (where == TruncateAt.START) { right = len - mt.breakText(0, len, false, avail); - } else if (where == TruncateAt.END) { + } else if (where == TruncateAt.END || where == TruncateAt.END_SMALL) { left = mt.breakText(0, len, true, avail); } else { right = len - mt.breakText(0, len, false, avail / 2); @@ -1112,10 +1110,10 @@ public class TextUtils { int remaining = len - (right - left); if (preserveLength) { if (remaining > 0) { // else eliminate the ellipsis too - buf[left++] = '\u2026'; + buf[left++] = ellipsis.charAt(0); } for (int i = left; i < right; i++) { - buf[i] = '\uFEFF'; + buf[i] = ZWNBS_CHAR; } String s = new String(buf, 0, len); if (sp == null) { @@ -1131,16 +1129,16 @@ public class TextUtils { } if (sp == null) { - StringBuilder sb = new StringBuilder(remaining + sEllipsis.length()); + StringBuilder sb = new StringBuilder(remaining + ellipsis.length()); sb.append(buf, 0, left); - sb.append(sEllipsis); + sb.append(ellipsis); sb.append(buf, right, len - right); return sb.toString(); } SpannableStringBuilder ssb = new SpannableStringBuilder(); ssb.append(text, 0, left); - ssb.append(sEllipsis); + ssb.append(ellipsis); ssb.append(text, right, len); return ssb; } finally { @@ -1664,4 +1662,13 @@ public class TextUtils { private static Object sLock = new Object(); private static char[] sTemp = null; + + private static String[] EMPTY_STRING_ARRAY = new String[]{}; + + private static final char ZWNBS_CHAR = '\uFEFF'; + + private static final String ELLIPSIS_NORMAL = Resources.getSystem().getString( + R.string.ellipsis); + private static final String ELLIPSIS_TWO_DOTS = Resources.getSystem().getString( + R.string.ellipsis_two_dots); } |
