Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45aab0eb authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

LayoutLib: Use ICU's line break algo.

Change-Id: I7e5b0ab7423a72f5a4b0e1163d0a537f0b03ba07
parent 01e840ff
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
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);
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ public final class CreateInfo implements ICreateInfo {
        "android.graphics.Xfermode",
        "android.os.SystemClock",
        "android.text.AndroidBidi",
        "android.text.StaticLayout",
        "android.text.format.Time",
        "android.util.FloatMath",
        "android.view.Display",