diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2014-08-02 13:16:24 -0700 |
---|---|---|
committer | Deepanshu Gupta <deepanshu@google.com> | 2014-10-08 02:05:05 +0000 |
commit | 11b14e3996d3602155d6a61afb286e5bc0941a1f (patch) | |
tree | 5e6be348665b76fc059cfdce770bd3a05b88051f /tools | |
parent | 916a6ea30377730d578692b625b1c18aa9f13564 (diff) | |
download | frameworks_base-11b14e3996d3602155d6a61afb286e5bc0941a1f.zip frameworks_base-11b14e3996d3602155d6a61afb286e5bc0941a1f.tar.gz frameworks_base-11b14e3996d3602155d6a61afb286e5bc0941a1f.tar.bz2 |
LayoutLib: Use ICU's line break algo. [DO NOT MERGE]
Change-Id: I7e5b0ab7423a72f5a4b0e1163d0a537f0b03ba07
(cherry picked from commit 760f6394d0f65fbb5365186e8e068d53c506b653)
Diffstat (limited to 'tools')
-rw-r--r-- | tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java | 55 | ||||
-rw-r--r-- | tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java | 1 |
2 files changed, 56 insertions, 0 deletions
diff --git a/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java b/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java new file mode 100644 index 0000000..5a467b2 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java @@ -0,0 +1,55 @@ +package android.text; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.text.CharacterIterator; +import java.util.Arrays; +import java.util.Locale; + +import com.ibm.icu.lang.UCharacter; +import com.ibm.icu.text.BreakIterator; +import com.ibm.icu.util.ULocale; +import javax.swing.text.Segment; + +/** + * Delegate that provides implementation for native methods in {@link android.text.StaticLayout} + * + * Through the layoutlib_create tool, selected methods of Handler have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class StaticLayout_Delegate { + + /** + * Fills the recycle array with positions that are suitable to break the text at. The array + * must be terminated by '-1'. + */ + @LayoutlibDelegate + /*package*/ static int[] nLineBreakOpportunities(String locale, char[] text, int length, + int[] recycle) { + BreakIterator iterator = BreakIterator.getLineInstance(new ULocale(locale)); + Segment segment = new Segment(text, 0, length); + iterator.setText(segment); + if (recycle == null) { + // Because 42 is the answer to everything. + recycle = new int[42]; + } + int breakOpp = iterator.first(); + recycle[0] = breakOpp; + //noinspection ConstantConditions + assert BreakIterator.DONE == -1; + for (int i = 1; breakOpp != BreakIterator.DONE; ++i) { + if (i >= recycle.length) { + recycle = doubleSize(recycle); + } + assert (i < recycle.length); + breakOpp = iterator.next(); + recycle[i] = breakOpp; + } + return recycle; + } + + private static int[] doubleSize(int[] array) { + return Arrays.copyOf(array, array.length * 2); + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 4705dec..515efd4 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -193,6 +193,7 @@ public final class CreateInfo implements ICreateInfo { "android.os.SystemClock", "android.os.SystemProperties", "android.text.AndroidBidi", + "android.text.StaticLayout", "android.text.format.Time", "android.util.FloatMath", "android.view.Display", |