LayoutLib: Use ICU's line break algo. [DO NOT MERGE]
Change-Id: I7e5b0ab7423a72f5a4b0e1163d0a537f0b03ba07 (cherry picked from commit 760f6394d0f65fbb5365186e8e068d53c506b653)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user