summaryrefslogtreecommitdiffstats
path: root/tools/layoutlib/bridge
diff options
context:
space:
mode:
authorDeepanshu Gupta <deepanshu@google.com>2014-08-02 13:16:24 -0700
committerDeepanshu Gupta <deepanshu@google.com>2014-10-08 02:05:05 +0000
commit11b14e3996d3602155d6a61afb286e5bc0941a1f (patch)
tree5e6be348665b76fc059cfdce770bd3a05b88051f /tools/layoutlib/bridge
parent916a6ea30377730d578692b625b1c18aa9f13564 (diff)
downloadframeworks_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/layoutlib/bridge')
-rw-r--r--tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java55
1 files changed, 55 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);
+ }
+}