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

Commit 35a85ab0 authored by Roozbeh Pournader's avatar Roozbeh Pournader Committed by Android Git Automerger
Browse files

am e652d17b: am 703b5078: am 0ca0f580: Merge "Add hyphenationFrequency...

am e652d17b: am 703b5078: am 0ca0f580: Merge "Add hyphenationFrequency attribute to TextView and StaticLayout." into mnc-dev

* commit 'e652d17b':
  Add hyphenationFrequency attribute to TextView and StaticLayout.
parents b65421b9 e652d17b
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -654,6 +654,7 @@ package android {
    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
    field public static final int horizontalSpacing = 16843028; // 0x1010114
    field public static final int horizontalSpacing = 16843028; // 0x1010114
    field public static final int host = 16842792; // 0x1010028
    field public static final int host = 16842792; // 0x1010028
    field public static final int hyphenationFrequency = 16844024; // 0x10104f8
    field public static final int icon = 16842754; // 0x1010002
    field public static final int icon = 16842754; // 0x1010002
    field public static final int iconPreview = 16843337; // 0x1010249
    field public static final int iconPreview = 16843337; // 0x1010249
    field public static final int iconTint = 16843999; // 0x10104df
    field public static final int iconTint = 16843999; // 0x10104df
@@ -32145,6 +32146,9 @@ package android.text {
    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
  }
  }
  public static final class Layout.Alignment extends java.lang.Enum {
  public static final class Layout.Alignment extends java.lang.Enum {
@@ -32343,6 +32347,7 @@ package android.text {
    method public android.text.StaticLayout.Builder setBreakStrategy(int);
    method public android.text.StaticLayout.Builder setBreakStrategy(int);
    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
    method public android.text.StaticLayout.Builder setHyphenationFrequency(int);
    method public android.text.StaticLayout.Builder setIncludePad(boolean);
    method public android.text.StaticLayout.Builder setIncludePad(boolean);
    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
@@ -41442,6 +41447,7 @@ package android.widget {
    method public int getHighlightColor();
    method public int getHighlightColor();
    method public java.lang.CharSequence getHint();
    method public java.lang.CharSequence getHint();
    method public final android.content.res.ColorStateList getHintTextColors();
    method public final android.content.res.ColorStateList getHintTextColors();
    method public int getHyphenationFrequency();
    method public int getImeActionId();
    method public int getImeActionId();
    method public java.lang.CharSequence getImeActionLabel();
    method public java.lang.CharSequence getImeActionLabel();
    method public int getImeOptions();
    method public int getImeOptions();
@@ -41548,6 +41554,7 @@ package android.widget {
    method public final void setHintTextColor(int);
    method public final void setHintTextColor(int);
    method public final void setHintTextColor(android.content.res.ColorStateList);
    method public final void setHintTextColor(android.content.res.ColorStateList);
    method public void setHorizontallyScrolling(boolean);
    method public void setHorizontallyScrolling(boolean);
    method public void setHyphenationFrequency(int);
    method public void setImeActionLabel(java.lang.CharSequence, int);
    method public void setImeActionLabel(java.lang.CharSequence, int);
    method public void setImeOptions(int);
    method public void setImeOptions(int);
    method public void setIncludeFontPadding(boolean);
    method public void setIncludeFontPadding(boolean);
+7 −0
Original line number Original line Diff line number Diff line
@@ -726,6 +726,7 @@ package android {
    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
    field public static final int horizontalSpacing = 16843028; // 0x1010114
    field public static final int horizontalSpacing = 16843028; // 0x1010114
    field public static final int host = 16842792; // 0x1010028
    field public static final int host = 16842792; // 0x1010028
    field public static final int hyphenationFrequency = 16844024; // 0x10104f8
    field public static final int icon = 16842754; // 0x1010002
    field public static final int icon = 16842754; // 0x1010002
    field public static final int iconPreview = 16843337; // 0x1010249
    field public static final int iconPreview = 16843337; // 0x1010249
    field public static final int iconTint = 16843999; // 0x10104df
    field public static final int iconTint = 16843999; // 0x10104df
@@ -34370,6 +34371,9 @@ package android.text {
    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
  }
  }
  public static final class Layout.Alignment extends java.lang.Enum {
  public static final class Layout.Alignment extends java.lang.Enum {
@@ -34568,6 +34572,7 @@ package android.text {
    method public android.text.StaticLayout.Builder setBreakStrategy(int);
    method public android.text.StaticLayout.Builder setBreakStrategy(int);
    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
    method public android.text.StaticLayout.Builder setHyphenationFrequency(int);
    method public android.text.StaticLayout.Builder setIncludePad(boolean);
    method public android.text.StaticLayout.Builder setIncludePad(boolean);
    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
@@ -43978,6 +43983,7 @@ package android.widget {
    method public int getHighlightColor();
    method public int getHighlightColor();
    method public java.lang.CharSequence getHint();
    method public java.lang.CharSequence getHint();
    method public final android.content.res.ColorStateList getHintTextColors();
    method public final android.content.res.ColorStateList getHintTextColors();
    method public int getHyphenationFrequency();
    method public int getImeActionId();
    method public int getImeActionId();
    method public java.lang.CharSequence getImeActionLabel();
    method public java.lang.CharSequence getImeActionLabel();
    method public int getImeOptions();
    method public int getImeOptions();
@@ -44084,6 +44090,7 @@ package android.widget {
    method public final void setHintTextColor(int);
    method public final void setHintTextColor(int);
    method public final void setHintTextColor(android.content.res.ColorStateList);
    method public final void setHintTextColor(android.content.res.ColorStateList);
    method public void setHorizontallyScrolling(boolean);
    method public void setHorizontallyScrolling(boolean);
    method public void setHyphenationFrequency(int);
    method public void setImeActionLabel(java.lang.CharSequence, int);
    method public void setImeActionLabel(java.lang.CharSequence, int);
    method public void setImeOptions(int);
    method public void setImeOptions(int);
    method public void setIncludeFontPadding(boolean);
    method public void setIncludeFontPadding(boolean);
+7 −3
Original line number Original line Diff line number Diff line
@@ -79,7 +79,8 @@ public class DynamicLayout extends Layout
                         boolean includepad,
                         boolean includepad,
                         TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
                         TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
        this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR,
        this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR,
                spacingmult, spacingadd, includepad, StaticLayout.BREAK_STRATEGY_SIMPLE,
                spacingmult, spacingadd, includepad,
                StaticLayout.BREAK_STRATEGY_SIMPLE, StaticLayout.HYPHENATION_FREQUENCY_NONE,
                ellipsize, ellipsizedWidth);
                ellipsize, ellipsizedWidth);
    }
    }


@@ -96,7 +97,7 @@ public class DynamicLayout extends Layout
                         TextPaint paint,
                         TextPaint paint,
                         int width, Alignment align, TextDirectionHeuristic textDir,
                         int width, Alignment align, TextDirectionHeuristic textDir,
                         float spacingmult, float spacingadd,
                         float spacingmult, float spacingadd,
                         boolean includepad, int breakStrategy,
                         boolean includepad, int breakStrategy, int hyphenationFrequency,
                         TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
                         TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
        super((ellipsize == null)
        super((ellipsize == null)
                ? display
                ? display
@@ -122,6 +123,7 @@ public class DynamicLayout extends Layout


        mIncludePad = includepad;
        mIncludePad = includepad;
        mBreakStrategy = breakStrategy;
        mBreakStrategy = breakStrategy;
        mHyphenationFrequency = hyphenationFrequency;


        /*
        /*
         * This is annoying, but we can't refer to the layout until
         * This is annoying, but we can't refer to the layout until
@@ -293,7 +295,8 @@ public class DynamicLayout extends Layout
                .setLineSpacing(getSpacingAdd(), getSpacingMultiplier())
                .setLineSpacing(getSpacingAdd(), getSpacingMultiplier())
                .setEllipsizedWidth(mEllipsizedWidth)
                .setEllipsizedWidth(mEllipsizedWidth)
                .setEllipsize(mEllipsizeAt)
                .setEllipsize(mEllipsizeAt)
                .setBreakStrategy(mBreakStrategy);
                .setBreakStrategy(mBreakStrategy)
                .setHyphenationFrequency(mHyphenationFrequency);
        reflowed.generate(b, false, true);
        reflowed.generate(b, false, true);
        int n = reflowed.getLineCount();
        int n = reflowed.getLineCount();


@@ -719,6 +722,7 @@ public class DynamicLayout extends Layout
    private int mEllipsizedWidth;
    private int mEllipsizedWidth;
    private TextUtils.TruncateAt mEllipsizeAt;
    private TextUtils.TruncateAt mEllipsizeAt;
    private int mBreakStrategy;
    private int mBreakStrategy;
    private int mHyphenationFrequency;


    private PackedIntVector mInts;
    private PackedIntVector mInts;
    private PackedObjectVector<Directions> mObjects;
    private PackedObjectVector<Directions> mObjects;
+29 −0
Original line number Original line Diff line number Diff line
@@ -71,6 +71,35 @@ public abstract class Layout {
     */
     */
    public static final int BREAK_STRATEGY_BALANCED = 2;
    public static final int BREAK_STRATEGY_BALANCED = 2;


    /** @hide */
    @IntDef({HYPHENATION_FREQUENCY_NORMAL, HYPHENATION_FREQUENCY_FULL,
             HYPHENATION_FREQUENCY_NONE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface HyphenationFrequency {}

    /**
     * Value for hyphenation frequency indicating no automatic hyphenation. Useful
     * for backward compatibility, and for cases where the automatic hyphenation algorithm results
     * in incorrect hyphenation. Mid-word breaks may still happen when a word is wider than the
     * layout and there is otherwise no valid break. Soft hyphens are ignored and will not be used
     * as suggestions for potential line breaks.
     */
    public static final int HYPHENATION_FREQUENCY_NONE = 0;

    /**
     * Value for hyphenation frequency indicating a light amount of automatic hyphenation, which
     * is a conservative default. Useful for informal cases, such as short sentences or chat
     * messages.
     */
    public static final int HYPHENATION_FREQUENCY_NORMAL = 1;

    /**
     * Value for hyphenation frequency indicating the full amount of automatic hyphenation, typical
     * in typography. Useful for running text and where it's important to put the maximum amount of
     * text in a screen with limited space.
     */
    public static final int HYPHENATION_FREQUENCY_FULL = 2;

    private static final ParagraphStyle[] NO_PARA_SPANS =
    private static final ParagraphStyle[] NO_PARA_SPANS =
        ArrayUtils.emptyArray(ParagraphStyle.class);
        ArrayUtils.emptyArray(ParagraphStyle.class);


+19 −3
Original line number Original line Diff line number Diff line
@@ -92,6 +92,7 @@ public class StaticLayout extends Layout {
            b.mEllipsize = null;
            b.mEllipsize = null;
            b.mMaxLines = Integer.MAX_VALUE;
            b.mMaxLines = Integer.MAX_VALUE;
            b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
            b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
            b.mHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;


            b.mMeasuredText = MeasuredText.obtain();
            b.mMeasuredText = MeasuredText.obtain();
            return b;
            return b;
@@ -275,6 +276,19 @@ public class StaticLayout extends Layout {
            return this;
            return this;
        }
        }


        /**
         * Set hyphenation frequency, to control the amount of automatic hyphenation used. The
         * default is {@link Layout#HYPHENATION_FREQUENCY_NONE}.
         *
         * @param hyphenationFrequency hyphenation frequency for the paragraph
         * @return this builder, useful for chaining
         * @see android.widget.TextView#setHyphenationFrequency
         */
        public Builder setHyphenationFrequency(@HyphenationFrequency int hyphenationFrequency) {
            mHyphenationFrequency = hyphenationFrequency;
            return this;
        }

        /**
        /**
         * Set indents. Arguments are arrays holding an indent amount, one per line, measured in
         * Set indents. Arguments are arrays holding an indent amount, one per line, measured in
         * pixels. For lines past the last element in the array, the last element repeats.
         * pixels. For lines past the last element in the array, the last element repeats.
@@ -302,7 +316,8 @@ public class StaticLayout extends Layout {
         * the native code is as follows.
         * the native code is as follows.
         *
         *
         * For each paragraph, do a nSetupParagraph, which sets paragraph text, line width, tab
         * For each paragraph, do a nSetupParagraph, which sets paragraph text, line width, tab
         * stops, break strategy (and possibly other parameters in the future).
         * stops, break strategy, and hyphenation frequency (and possibly other parameters in the
         * future).
         *
         *
         * Then, for each run within the paragraph:
         * Then, for each run within the paragraph:
         *  - setLocale (this must be done at least for the first run, optional afterwards)
         *  - setLocale (this must be done at least for the first run, optional afterwards)
@@ -377,6 +392,7 @@ public class StaticLayout extends Layout {
        TextUtils.TruncateAt mEllipsize;
        TextUtils.TruncateAt mEllipsize;
        int mMaxLines;
        int mMaxLines;
        int mBreakStrategy;
        int mBreakStrategy;
        int mHyphenationFrequency;


        Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt();
        Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt();


@@ -644,7 +660,7 @@ public class StaticLayout extends Layout {


            nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart,
            nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart,
                    firstWidth, firstWidthLineCount, restWidth,
                    firstWidth, firstWidthLineCount, restWidth,
                    variableTabStops, TAB_INCREMENT, b.mBreakStrategy);
                    variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency);


            // measurement has to be done before performing line breaking
            // measurement has to be done before performing line breaking
            // but we don't want to recompute fontmetrics or span ranges the
            // but we don't want to recompute fontmetrics or span ranges the
@@ -1153,7 +1169,7 @@ public class StaticLayout extends Layout {
    // Set up paragraph text and settings; done as one big method to minimize jni crossings
    // Set up paragraph text and settings; done as one big method to minimize jni crossings
    private static native void nSetupParagraph(long nativePtr, char[] text, int length,
    private static native void nSetupParagraph(long nativePtr, char[] text, int length,
            float firstWidth, int firstWidthLineCount, float restWidth,
            float firstWidth, int firstWidthLineCount, float restWidth,
            int[] variableTabStops, int defaultTabStop, int breakStrategy);
            int[] variableTabStops, int defaultTabStop, int breakStrategy, int hyphenationFrequency);


    private static native float nAddStyleRun(long nativePtr, long nativePaint,
    private static native float nAddStyleRun(long nativePtr, long nativePaint,
            long nativeTypeface, int start, int end, boolean isRtl);
            long nativeTypeface, int start, int end, boolean isRtl);
Loading