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

Commit 2c062da5 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Add NoBreakSpan that prevent line break the portion of text

Bug: 283193586
Test: minikin_tests
Test: atest StaticLayoutLineBreakingNoBreakSpanTest
Change-Id: I9acd108537b73673316d0c126fff99a48a11f4ed
parent f2701eb9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -17666,6 +17666,7 @@ package android.graphics.text {
    field public static final int LINE_BREAK_STYLE_LOOSE = 1; // 0x1
    field public static final int LINE_BREAK_STYLE_NONE = 0; // 0x0
    field public static final int LINE_BREAK_STYLE_NORMAL = 2; // 0x2
    field @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public static final int LINE_BREAK_STYLE_NO_BREAK = 4; // 0x4
    field public static final int LINE_BREAK_STYLE_STRICT = 3; // 0x3
    field @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public static final int LINE_BREAK_STYLE_UNSPECIFIED = -1; // 0xffffffff
    field public static final int LINE_BREAK_WORD_STYLE_NONE = 0; // 0x0
@@ -47910,6 +47911,10 @@ package android.text.style {
    method @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig();
  }
  @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public static final class LineBreakConfigSpan.NoBreakSpan extends android.text.style.LineBreakConfigSpan {
    ctor @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public LineBreakConfigSpan.NoBreakSpan();
  }
  @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public static final class LineBreakConfigSpan.NoHyphenationSpan extends android.text.style.LineBreakConfigSpan {
    ctor @FlaggedApi("com.android.text.flags.no_break_no_hyphenation_span") public LineBreakConfigSpan.NoHyphenationSpan();
  }
+24 −0
Original line number Diff line number Diff line
@@ -71,6 +71,10 @@ public class LineBreakConfigSpan {
            .setHyphenation(LineBreakConfig.HYPHENATION_DISABLED)
            .build();

    private static final LineBreakConfig sNoBreakConfig = new LineBreakConfig.Builder()
            .setLineBreakStyle(LineBreakConfig.LINE_BREAK_STYLE_NO_BREAK)
            .build();

    /**
     * A specialized {@link LineBreakConfigSpan} that used for preventing hyphenation.
     */
@@ -84,4 +88,24 @@ public class LineBreakConfigSpan {
            super(sNoHyphenationConfig);
        }
    }

    /**
     * A specialized {@link LineBreakConfigSpan} that used for preventing line break.
     *
     * This is useful when you want to preserve some words in the same line.
     * Note that even if this style is specified, the grapheme based line break is still performed
     * for preventing clipping text.
     *
     * @see LineBreakConfigSpan
     */
    @FlaggedApi(FLAG_NO_BREAK_NO_HYPHENATION_SPAN)
    public static final class NoBreakSpan extends LineBreakConfigSpan {
        /**
         * Construct a new {@link NoBreakSpan}.
         */
        @FlaggedApi(FLAG_NO_BREAK_NO_HYPHENATION_SPAN)
        public NoBreakSpan() {
            super(sNoBreakConfig);
        }
    }
}
+16 −1
Original line number Diff line number Diff line
@@ -134,10 +134,25 @@ public final class LineBreakConfig {
     */
    public static final int LINE_BREAK_STYLE_STRICT = 3;

    /**
     * The line break style that used for preventing automatic line breaking.
     *
     * This is useful when you want to preserve some words in the same line by using
     * {@link android.text.style.LineBreakConfigSpan} or
     * {@link android.text.style.LineBreakConfigSpan.NoBreakSpan} as a shorthand.
     * Note that even if this style is specified, the grapheme based line break is still performed
     * for preventing clipping text.
     *
     * @see android.text.style.LineBreakConfigSpan
     * @see android.text.style.LineBreakConfigSpan.NoBreakSpan
     */
    @FlaggedApi(FLAG_NO_BREAK_NO_HYPHENATION_SPAN)
    public static final int LINE_BREAK_STYLE_NO_BREAK = 4;

    /** @hide */
    @IntDef(prefix = { "LINE_BREAK_STYLE_" }, value = {
            LINE_BREAK_STYLE_NONE, LINE_BREAK_STYLE_LOOSE, LINE_BREAK_STYLE_NORMAL,
            LINE_BREAK_STYLE_STRICT, LINE_BREAK_STYLE_UNSPECIFIED
            LINE_BREAK_STYLE_STRICT, LINE_BREAK_STYLE_UNSPECIFIED, LINE_BREAK_STYLE_NO_BREAK
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface LineBreakStyle {}