LayoutLib: Use ICU's line break algo. [DO NOT MERGE]

Change-Id: I7e5b0ab7423a72f5a4b0e1163d0a537f0b03ba07
(cherry picked from commit 760f6394d0f65fbb5365186e8e068d53c506b653)
This commit is contained in:
Deepanshu Gupta
2014-08-02 13:16:24 -07:00
parent 916a6ea303
commit 11b14e3996
2 changed files with 56 additions and 0 deletions

View File

@@ -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);
}
}

View File

@@ -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",