Loading core/api/current.txt +29 −29 Original line number Diff line number Diff line Loading @@ -46573,9 +46573,9 @@ package android.text { } public class BoringLayout extends android.text.Layout implements android.text.TextUtils.EllipsizeCallback { ctor @Deprecated public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); ctor @Deprecated public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); ctor @Deprecated public BoringLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, float, float, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); ctor public BoringLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, float, float, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public void ellipsized(int, int); method public int getBottomPadding(); method public int getEllipsisCount(int); Loading @@ -46588,12 +46588,12 @@ package android.text { method public int getLineTop(int); method public int getParagraphDirection(int); method public int getTopPadding(); method @Deprecated public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint); method @Deprecated public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics); method @Deprecated @Nullable public static android.text.BoringLayout.Metrics isBoring(@NonNull CharSequence, @NonNull android.text.TextPaint, @NonNull android.text.TextDirectionHeuristic, boolean, @Nullable android.text.BoringLayout.Metrics); method @Deprecated public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method @Deprecated public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); method @Deprecated @NonNull public static android.text.BoringLayout make(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint); method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics); method @Nullable public static android.text.BoringLayout.Metrics isBoring(@NonNull CharSequence, @NonNull android.text.TextPaint, @NonNull android.text.TextDirectionHeuristic, boolean, @Nullable android.text.BoringLayout.Metrics); method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); method @NonNull public static android.text.BoringLayout make(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method @NonNull public android.text.BoringLayout replaceOrMake(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); Loading @@ -46601,7 +46601,7 @@ package android.text { public static class BoringLayout.Metrics extends android.graphics.Paint.FontMetricsInt { ctor public BoringLayout.Metrics(); method @NonNull public android.graphics.RectF getDrawingBoundingBox(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.RectF getDrawingBoundingBox(); field public int width; } Loading Loading @@ -46786,7 +46786,7 @@ package android.text { public abstract class Layout { ctor protected Layout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float); method @NonNull public android.graphics.RectF computeDrawingBoundingBox(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.RectF computeDrawingBoundingBox(); method public void draw(android.graphics.Canvas); method public void draw(android.graphics.Canvas, android.graphics.Path, android.graphics.Paint, int); method public void draw(@NonNull android.graphics.Canvas, @Nullable java.util.List<android.graphics.Path>, @Nullable java.util.List<android.graphics.Paint>, @Nullable android.graphics.Path, @Nullable android.graphics.Paint, int); Loading @@ -46795,24 +46795,24 @@ package android.text { method public void fillCharacterBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull float[], @IntRange(from=0) int); method @NonNull public final android.text.Layout.Alignment getAlignment(); method public abstract int getBottomPadding(); method public final int getBreakStrategy(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getBreakStrategy(); method public void getCursorPath(int, android.graphics.Path, CharSequence); method public static float getDesiredWidth(CharSequence, android.text.TextPaint); method public static float getDesiredWidth(CharSequence, int, int, android.text.TextPaint); method public abstract int getEllipsisCount(int); method public abstract int getEllipsisStart(int); method @Nullable public final android.text.TextUtils.TruncateAt getEllipsize(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final android.text.TextUtils.TruncateAt getEllipsize(); method @IntRange(from=0) public int getEllipsizedWidth(); method public int getHeight(); method public final int getHyphenationFrequency(); method public final int getJustificationMode(); method @Nullable public final int[] getLeftIndents(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getHyphenationFrequency(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getJustificationMode(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final int[] getLeftIndents(); method public final int getLineAscent(int); method public final int getLineBaseline(int); method public final int getLineBottom(int); method public int getLineBottom(int, boolean); method public int getLineBounds(int, android.graphics.Rect); method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); method public abstract boolean getLineContainsTab(int); method public abstract int getLineCount(); method public abstract int getLineDescent(int); Loading @@ -46823,13 +46823,13 @@ package android.text { method public float getLineLeft(int); method public float getLineMax(int); method public float getLineRight(int); method public final float getLineSpacingAmount(); method public final float getLineSpacingMultiplier(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingAmount(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingMultiplier(); method public abstract int getLineStart(int); method public abstract int getLineTop(int); method public int getLineVisibleEnd(int); method public float getLineWidth(int); method @IntRange(from=1) public final int getMaxLines(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @IntRange(from=1) public final int getMaxLines(); method public int getOffsetForHorizontal(int, float); method public int getOffsetToLeftOf(int); method public int getOffsetToRightOf(int); Loading @@ -46840,19 +46840,19 @@ package android.text { method public final int getParagraphRight(int); method public float getPrimaryHorizontal(int); method @Nullable public int[] getRangeForRect(@NonNull android.graphics.RectF, @NonNull android.text.SegmentFinder, @NonNull android.text.Layout.TextInclusionStrategy); method @Nullable public final int[] getRightIndents(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final int[] getRightIndents(); method public float getSecondaryHorizontal(int); method public void getSelectionPath(int, int, android.graphics.Path); method public final float getSpacingAdd(); method public final float getSpacingMultiplier(); method @NonNull public final CharSequence getText(); method @NonNull public final android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public final CharSequence getText(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public final android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method public abstract int getTopPadding(); method public boolean getUseBoundsForWidth(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth(); method @IntRange(from=0) public final int getWidth(); method public final void increaseWidthTo(int); method public boolean isFallbackLineSpacingEnabled(); method public final boolean isFontPaddingIncluded(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final boolean isFontPaddingIncluded(); method public boolean isRtlCharAt(int); method protected final boolean isSpanned(); field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2 Loading Loading @@ -46880,7 +46880,7 @@ package android.text { enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE; } public static final class Layout.Builder { @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public static final class Layout.Builder { ctor public Layout.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextPaint, @IntRange(from=0) int); method @NonNull public android.text.Layout build(); method @NonNull public android.text.Layout.Builder setAlignment(@NonNull android.text.Layout.Alignment); Loading @@ -46898,7 +46898,7 @@ package android.text { method @NonNull public android.text.Layout.Builder setMaxLines(@IntRange(from=1) int); method @NonNull public android.text.Layout.Builder setRightIndents(@Nullable int[]); method @NonNull public android.text.Layout.Builder setTextDirectionHeuristic(@NonNull android.text.TextDirectionHeuristic); method @NonNull public android.text.Layout.Builder setUseBoundsForWidth(boolean); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.text.Layout.Builder setUseBoundsForWidth(boolean); } public static class Layout.Directions { Loading Loading @@ -59871,7 +59871,7 @@ package android.widget { method public final android.text.method.TransformationMethod getTransformationMethod(); method public android.graphics.Typeface getTypeface(); method public android.text.style.URLSpan[] getUrls(); method public boolean getUseBoundsForWidth(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth(); method public boolean hasSelection(); method public boolean isAllCaps(); method public boolean isCursorVisible(); Loading Loading @@ -60014,7 +60014,7 @@ package android.widget { method public final void setTransformationMethod(android.text.method.TransformationMethod); method public void setTypeface(@Nullable android.graphics.Typeface, int); method public void setTypeface(@Nullable android.graphics.Typeface); method public void setUseBoundsForWidth(boolean); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public void setUseBoundsForWidth(boolean); method public void setWidth(int); field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0 field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1 core/java/android/text/BoringLayout.java +4 −18 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.text; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -55,9 +58,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * line width * @param includePad set whether to include extra space beyond font ascent and descent which is * needed to avoid clipping in some scripts * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad) { Loading @@ -83,9 +84,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param ellipsizedWidth the width to which this Layout is ellipsizing. If {@code ellipsize} is * {@code null}, or is {@link TextUtils.TruncateAt#MARQUEE} this value is * not used, {@code outerWidth} is used instead * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingmult, float spacingadd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { Loading Loading @@ -117,9 +116,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * False for keeping the first font's line height. If some glyphs * requires larger vertical spaces, by passing true to this * argument, the layout increase the line height to fit all glyphs. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static @NonNull BoringLayout make( @NonNull CharSequence source, @NonNull TextPaint paint, @IntRange(from = 0) int outerWidth, Loading Loading @@ -266,9 +263,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * line width * @param includePad set whether to include extra space beyond font ascent and descent which is * needed to avoid clipping in some scripts * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout(CharSequence source, TextPaint paint, int outerwidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad) { super(source, paint, outerwidth, align, TextDirectionHeuristics.LTR, spacingMult, Loading Loading @@ -302,9 +297,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param ellipsizedWidth the width to which this Layout is ellipsizing. If {@code ellipsize} is * {@code null}, or is {@link TextUtils.TruncateAt#MARQUEE} this value is * not used, {@code outerWidth} is used instead * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { Loading Loading @@ -333,9 +326,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * False for keeping the first font's line height. If some glyphs * requires larger vertical spaces, by passing true to this * argument, the layout increase the line height to fit all glyphs. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout( @NonNull CharSequence source, @NonNull TextPaint paint, @IntRange(from = 0) int outerWidth, @NonNull Alignment align, float spacingMult, Loading Loading @@ -478,9 +469,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param paint a paint * @return layout metric for the given text. null if given text is unable to be handled by * BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static Metrics isBoring(CharSequence text, TextPaint paint) { return isBoring(text, paint, TextDirectionHeuristics.FIRSTSTRONG_LTR, null); } Loading @@ -495,9 +484,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @return layout metric for the given text. If metrics is not null, this method fills values * to given metrics object instead of allocating new metrics object. null if given text * is unable to be handled by BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static Metrics isBoring(CharSequence text, TextPaint paint, Metrics metrics) { return isBoring(text, paint, TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics); } Loading Loading @@ -557,9 +544,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * argument, the layout increase the line height to fit all glyphs. * @param metrics the out metrics. * @return metrics on success. null if text cannot be rendered by BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static @Nullable Metrics isBoring(@NonNull CharSequence text, @NonNull TextPaint paint, @NonNull TextDirectionHeuristic textDir, boolean useFallbackLineSpacing, @Nullable Metrics metrics) { Loading Loading @@ -746,6 +731,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * * @return a drawing bounding box. */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public RectF getDrawingBoundingBox() { return mDrawingBounds; } Loading core/java/android/text/Layout.java +20 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.text; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.annotation.FlaggedApi; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; Loading Loading @@ -1010,6 +1013,7 @@ public abstract class Layout { * @return bounding rectangle */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public RectF computeDrawingBoundingBox() { float left = 0; float right = 0; Loading Loading @@ -3436,6 +3440,7 @@ public abstract class Layout { * * @see StaticLayout.Builder */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public static final class Builder { /** * Construct a builder class. Loading Loading @@ -3776,6 +3781,7 @@ public abstract class Layout { // The corresponding getter is getUseBoundsForWidth @NonNull @SuppressLint("MissingGetterMatchingBuilder") @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public Builder setUseBoundsForWidth(boolean useBoundsForWidth) { mUseBoundsForWidth = useBoundsForWidth; return this; Loading Loading @@ -3865,6 +3871,7 @@ public abstract class Layout { * @see Layout.Builder */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final CharSequence getText() { return mText; } Loading Loading @@ -3914,6 +3921,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setTextDirection(TextDirectionHeuristic) */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final TextDirectionHeuristic getTextDirectionHeuristic() { return mTextDir; } Loading @@ -3940,6 +3948,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setLineSpacing(float, float) * @see Layout#getSpacingMultiplier() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingMultiplier() { return mSpacingMult; } Loading @@ -3966,6 +3975,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setLineSpacing(float, float) * @see Layout#getSpacingAdd() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingAmount() { return mSpacingAdd; } Loading @@ -3977,6 +3987,7 @@ public abstract class Layout { * @see Layout.Builder#setFontPaddingIncluded(boolean) * @see StaticLayout.Builder#setIncludePad(boolean) */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final boolean isFontPaddingIncluded() { return mIncludePad; } Loading Loading @@ -4024,6 +4035,7 @@ public abstract class Layout { * @see Layout#getEllipsizedWidth() */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final TextUtils.TruncateAt getEllipsize() { return mEllipsize; } Loading @@ -4039,6 +4051,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setMaxLines(int) */ @IntRange(from = 1) @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getMaxLines() { return mMaxLines; } Loading @@ -4051,6 +4064,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setBreakStrategy(int) */ @BreakStrategy @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getBreakStrategy() { return mBreakStrategy; } Loading @@ -4063,6 +4077,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setHyphenationFrequency(int) */ @HyphenationFrequency @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getHyphenationFrequency() { return mHyphenationFrequency; } Loading @@ -4078,6 +4093,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setIndents(int[], int[]) */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int[] getLeftIndents() { if (mLeftIndents == null) { return null; Loading @@ -4098,6 +4114,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setIndents(int[], int[]) */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int[] getRightIndents() { if (mRightIndents == null) { return null; Loading @@ -4115,6 +4132,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setJustificationMode(int) */ @JustificationMode @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getJustificationMode() { return mJustificationMode; } Loading @@ -4128,6 +4146,7 @@ public abstract class Layout { */ // not being final because of subclass has already published API. @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public LineBreakConfig getLineBreakConfig() { return mLineBreakConfig; } Loading @@ -4141,6 +4160,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setUseBoundsForWidth(boolean) * @see DynamicLayout.Builder#setUseBoundsForWidth(boolean) */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth() { return mUseBoundsForWidth; } Loading core/java/android/widget/TextView.java +19 −1 Original line number Diff line number Diff line Loading @@ -27,12 +27,14 @@ import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_C import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import static android.view.inputmethod.CursorAnchorInfo.FLAG_HAS_VISIBLE_REGION; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.R; import android.annotation.CallSuper; import android.annotation.CheckResult; import android.annotation.ColorInt; import android.annotation.DrawableRes; import android.annotation.FlaggedApi; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; Loading Loading @@ -238,6 +240,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastMath; import com.android.internal.util.Preconditions; import com.android.text.flags.Flags; import libcore.util.EmptyArray; Loading Loading @@ -523,6 +526,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @EnabledSince(targetSdkVersion = Build.VERSION_CODES.P) public static final long STATICLAYOUT_FALLBACK_LINESPACING = 37756858; // buganizer id /** * This change ID enables the bounding box based layout. * @hide */ @ChangeId @EnabledSince(targetSdkVersion = VERSION_CODES.VANILLA_ICE_CREAM) public static final long USE_BOUNDS_FOR_WIDTH = 63938206; // buganizer id // System wide time for last cut, copy or text changed action. static long sLastCutCopyOrTextChangedTime; Loading Loading @@ -1621,7 +1633,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mUseFallbackLineSpacing = FALLBACK_LINE_SPACING_NONE; } mUseBoundsForWidth = false; // TODO: Make enable this by default. if (CompatChanges.isChangeEnabled(USE_BOUNDS_FOR_WIDTH)) { mUseBoundsForWidth = Flags.useBoundsForWidth(); } else { mUseBoundsForWidth = false; } // TODO(b/179693024): Use a ChangeId instead. mUseTextPaddingForUiTranslation = targetSdkVersion <= Build.VERSION_CODES.R; Loading Loading @@ -4848,6 +4864,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * width. * @see #getUseBoundsForWidth() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public void setUseBoundsForWidth(boolean useBoundsForWidth) { if (mUseBoundsForWidth != useBoundsForWidth) { mUseBoundsForWidth = useBoundsForWidth; Loading @@ -4865,6 +4882,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @see #setUseBoundsForWidth(boolean) * @return True if using bounding box for width, false if using advance for width. */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth() { return mUseBoundsForWidth; } Loading Loading
core/api/current.txt +29 −29 Original line number Diff line number Diff line Loading @@ -46573,9 +46573,9 @@ package android.text { } public class BoringLayout extends android.text.Layout implements android.text.TextUtils.EllipsizeCallback { ctor @Deprecated public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); ctor @Deprecated public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); ctor @Deprecated public BoringLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, float, float, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); ctor public BoringLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, float, float, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public void ellipsized(int, int); method public int getBottomPadding(); method public int getEllipsisCount(int); Loading @@ -46588,12 +46588,12 @@ package android.text { method public int getLineTop(int); method public int getParagraphDirection(int); method public int getTopPadding(); method @Deprecated public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint); method @Deprecated public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics); method @Deprecated @Nullable public static android.text.BoringLayout.Metrics isBoring(@NonNull CharSequence, @NonNull android.text.TextPaint, @NonNull android.text.TextDirectionHeuristic, boolean, @Nullable android.text.BoringLayout.Metrics); method @Deprecated public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method @Deprecated public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); method @Deprecated @NonNull public static android.text.BoringLayout make(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint); method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics); method @Nullable public static android.text.BoringLayout.Metrics isBoring(@NonNull CharSequence, @NonNull android.text.TextPaint, @NonNull android.text.TextDirectionHeuristic, boolean, @Nullable android.text.BoringLayout.Metrics); method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); method @NonNull public static android.text.BoringLayout make(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); method @NonNull public android.text.BoringLayout replaceOrMake(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @NonNull android.text.BoringLayout.Metrics, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int, boolean); method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); Loading @@ -46601,7 +46601,7 @@ package android.text { public static class BoringLayout.Metrics extends android.graphics.Paint.FontMetricsInt { ctor public BoringLayout.Metrics(); method @NonNull public android.graphics.RectF getDrawingBoundingBox(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.RectF getDrawingBoundingBox(); field public int width; } Loading Loading @@ -46786,7 +46786,7 @@ package android.text { public abstract class Layout { ctor protected Layout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float); method @NonNull public android.graphics.RectF computeDrawingBoundingBox(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.RectF computeDrawingBoundingBox(); method public void draw(android.graphics.Canvas); method public void draw(android.graphics.Canvas, android.graphics.Path, android.graphics.Paint, int); method public void draw(@NonNull android.graphics.Canvas, @Nullable java.util.List<android.graphics.Path>, @Nullable java.util.List<android.graphics.Paint>, @Nullable android.graphics.Path, @Nullable android.graphics.Paint, int); Loading @@ -46795,24 +46795,24 @@ package android.text { method public void fillCharacterBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull float[], @IntRange(from=0) int); method @NonNull public final android.text.Layout.Alignment getAlignment(); method public abstract int getBottomPadding(); method public final int getBreakStrategy(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getBreakStrategy(); method public void getCursorPath(int, android.graphics.Path, CharSequence); method public static float getDesiredWidth(CharSequence, android.text.TextPaint); method public static float getDesiredWidth(CharSequence, int, int, android.text.TextPaint); method public abstract int getEllipsisCount(int); method public abstract int getEllipsisStart(int); method @Nullable public final android.text.TextUtils.TruncateAt getEllipsize(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final android.text.TextUtils.TruncateAt getEllipsize(); method @IntRange(from=0) public int getEllipsizedWidth(); method public int getHeight(); method public final int getHyphenationFrequency(); method public final int getJustificationMode(); method @Nullable public final int[] getLeftIndents(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getHyphenationFrequency(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getJustificationMode(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final int[] getLeftIndents(); method public final int getLineAscent(int); method public final int getLineBaseline(int); method public final int getLineBottom(int); method public int getLineBottom(int, boolean); method public int getLineBounds(int, android.graphics.Rect); method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig(); method public abstract boolean getLineContainsTab(int); method public abstract int getLineCount(); method public abstract int getLineDescent(int); Loading @@ -46823,13 +46823,13 @@ package android.text { method public float getLineLeft(int); method public float getLineMax(int); method public float getLineRight(int); method public final float getLineSpacingAmount(); method public final float getLineSpacingMultiplier(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingAmount(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingMultiplier(); method public abstract int getLineStart(int); method public abstract int getLineTop(int); method public int getLineVisibleEnd(int); method public float getLineWidth(int); method @IntRange(from=1) public final int getMaxLines(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @IntRange(from=1) public final int getMaxLines(); method public int getOffsetForHorizontal(int, float); method public int getOffsetToLeftOf(int); method public int getOffsetToRightOf(int); Loading @@ -46840,19 +46840,19 @@ package android.text { method public final int getParagraphRight(int); method public float getPrimaryHorizontal(int); method @Nullable public int[] getRangeForRect(@NonNull android.graphics.RectF, @NonNull android.text.SegmentFinder, @NonNull android.text.Layout.TextInclusionStrategy); method @Nullable public final int[] getRightIndents(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @Nullable public final int[] getRightIndents(); method public float getSecondaryHorizontal(int); method public void getSelectionPath(int, int, android.graphics.Path); method public final float getSpacingAdd(); method public final float getSpacingMultiplier(); method @NonNull public final CharSequence getText(); method @NonNull public final android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public final CharSequence getText(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public final android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method public abstract int getTopPadding(); method public boolean getUseBoundsForWidth(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth(); method @IntRange(from=0) public final int getWidth(); method public final void increaseWidthTo(int); method public boolean isFallbackLineSpacingEnabled(); method public final boolean isFontPaddingIncluded(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final boolean isFontPaddingIncluded(); method public boolean isRtlCharAt(int); method protected final boolean isSpanned(); field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2 Loading Loading @@ -46880,7 +46880,7 @@ package android.text { enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE; } public static final class Layout.Builder { @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public static final class Layout.Builder { ctor public Layout.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextPaint, @IntRange(from=0) int); method @NonNull public android.text.Layout build(); method @NonNull public android.text.Layout.Builder setAlignment(@NonNull android.text.Layout.Alignment); Loading @@ -46898,7 +46898,7 @@ package android.text { method @NonNull public android.text.Layout.Builder setMaxLines(@IntRange(from=1) int); method @NonNull public android.text.Layout.Builder setRightIndents(@Nullable int[]); method @NonNull public android.text.Layout.Builder setTextDirectionHeuristic(@NonNull android.text.TextDirectionHeuristic); method @NonNull public android.text.Layout.Builder setUseBoundsForWidth(boolean); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public android.text.Layout.Builder setUseBoundsForWidth(boolean); } public static class Layout.Directions { Loading Loading @@ -59871,7 +59871,7 @@ package android.widget { method public final android.text.method.TransformationMethod getTransformationMethod(); method public android.graphics.Typeface getTypeface(); method public android.text.style.URLSpan[] getUrls(); method public boolean getUseBoundsForWidth(); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth(); method public boolean hasSelection(); method public boolean isAllCaps(); method public boolean isCursorVisible(); Loading Loading @@ -60014,7 +60014,7 @@ package android.widget { method public final void setTransformationMethod(android.text.method.TransformationMethod); method public void setTypeface(@Nullable android.graphics.Typeface, int); method public void setTypeface(@Nullable android.graphics.Typeface); method public void setUseBoundsForWidth(boolean); method @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public void setUseBoundsForWidth(boolean); method public void setWidth(int); field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0 field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
core/java/android/text/BoringLayout.java +4 −18 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.text; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -55,9 +58,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * line width * @param includePad set whether to include extra space beyond font ascent and descent which is * needed to avoid clipping in some scripts * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad) { Loading @@ -83,9 +84,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param ellipsizedWidth the width to which this Layout is ellipsizing. If {@code ellipsize} is * {@code null}, or is {@link TextUtils.TruncateAt#MARQUEE} this value is * not used, {@code outerWidth} is used instead * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingmult, float spacingadd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { Loading Loading @@ -117,9 +116,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * False for keeping the first font's line height. If some glyphs * requires larger vertical spaces, by passing true to this * argument, the layout increase the line height to fit all glyphs. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static @NonNull BoringLayout make( @NonNull CharSequence source, @NonNull TextPaint paint, @IntRange(from = 0) int outerWidth, Loading Loading @@ -266,9 +263,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * line width * @param includePad set whether to include extra space beyond font ascent and descent which is * needed to avoid clipping in some scripts * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout(CharSequence source, TextPaint paint, int outerwidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad) { super(source, paint, outerwidth, align, TextDirectionHeuristics.LTR, spacingMult, Loading Loading @@ -302,9 +297,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param ellipsizedWidth the width to which this Layout is ellipsizing. If {@code ellipsize} is * {@code null}, or is {@link TextUtils.TruncateAt#MARQUEE} this value is * not used, {@code outerWidth} is used instead * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout(CharSequence source, TextPaint paint, int outerWidth, Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { Loading Loading @@ -333,9 +326,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * False for keeping the first font's line height. If some glyphs * requires larger vertical spaces, by passing true to this * argument, the layout increase the line height to fit all glyphs. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public BoringLayout( @NonNull CharSequence source, @NonNull TextPaint paint, @IntRange(from = 0) int outerWidth, @NonNull Alignment align, float spacingMult, Loading Loading @@ -478,9 +469,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @param paint a paint * @return layout metric for the given text. null if given text is unable to be handled by * BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static Metrics isBoring(CharSequence text, TextPaint paint) { return isBoring(text, paint, TextDirectionHeuristics.FIRSTSTRONG_LTR, null); } Loading @@ -495,9 +484,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * @return layout metric for the given text. If metrics is not null, this method fills values * to given metrics object instead of allocating new metrics object. null if given text * is unable to be handled by BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static Metrics isBoring(CharSequence text, TextPaint paint, Metrics metrics) { return isBoring(text, paint, TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics); } Loading Loading @@ -557,9 +544,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * argument, the layout increase the line height to fit all glyphs. * @param metrics the out metrics. * @return metrics on success. null if text cannot be rendered by BoringLayout. * @deprecated Use {@link android.text.Layout.Builder} instead. */ @Deprecated public static @Nullable Metrics isBoring(@NonNull CharSequence text, @NonNull TextPaint paint, @NonNull TextDirectionHeuristic textDir, boolean useFallbackLineSpacing, @Nullable Metrics metrics) { Loading Loading @@ -746,6 +731,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * * @return a drawing bounding box. */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) @NonNull public RectF getDrawingBoundingBox() { return mDrawingBounds; } Loading
core/java/android/text/Layout.java +20 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.text; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.annotation.FlaggedApi; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; Loading Loading @@ -1010,6 +1013,7 @@ public abstract class Layout { * @return bounding rectangle */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public RectF computeDrawingBoundingBox() { float left = 0; float right = 0; Loading Loading @@ -3436,6 +3440,7 @@ public abstract class Layout { * * @see StaticLayout.Builder */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public static final class Builder { /** * Construct a builder class. Loading Loading @@ -3776,6 +3781,7 @@ public abstract class Layout { // The corresponding getter is getUseBoundsForWidth @NonNull @SuppressLint("MissingGetterMatchingBuilder") @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public Builder setUseBoundsForWidth(boolean useBoundsForWidth) { mUseBoundsForWidth = useBoundsForWidth; return this; Loading Loading @@ -3865,6 +3871,7 @@ public abstract class Layout { * @see Layout.Builder */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final CharSequence getText() { return mText; } Loading Loading @@ -3914,6 +3921,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setTextDirection(TextDirectionHeuristic) */ @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final TextDirectionHeuristic getTextDirectionHeuristic() { return mTextDir; } Loading @@ -3940,6 +3948,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setLineSpacing(float, float) * @see Layout#getSpacingMultiplier() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingMultiplier() { return mSpacingMult; } Loading @@ -3966,6 +3975,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setLineSpacing(float, float) * @see Layout#getSpacingAdd() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final float getLineSpacingAmount() { return mSpacingAdd; } Loading @@ -3977,6 +3987,7 @@ public abstract class Layout { * @see Layout.Builder#setFontPaddingIncluded(boolean) * @see StaticLayout.Builder#setIncludePad(boolean) */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final boolean isFontPaddingIncluded() { return mIncludePad; } Loading Loading @@ -4024,6 +4035,7 @@ public abstract class Layout { * @see Layout#getEllipsizedWidth() */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final TextUtils.TruncateAt getEllipsize() { return mEllipsize; } Loading @@ -4039,6 +4051,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setMaxLines(int) */ @IntRange(from = 1) @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getMaxLines() { return mMaxLines; } Loading @@ -4051,6 +4064,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setBreakStrategy(int) */ @BreakStrategy @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getBreakStrategy() { return mBreakStrategy; } Loading @@ -4063,6 +4077,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setHyphenationFrequency(int) */ @HyphenationFrequency @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getHyphenationFrequency() { return mHyphenationFrequency; } Loading @@ -4078,6 +4093,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setIndents(int[], int[]) */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int[] getLeftIndents() { if (mLeftIndents == null) { return null; Loading @@ -4098,6 +4114,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setIndents(int[], int[]) */ @Nullable @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int[] getRightIndents() { if (mRightIndents == null) { return null; Loading @@ -4115,6 +4132,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setJustificationMode(int) */ @JustificationMode @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public final int getJustificationMode() { return mJustificationMode; } Loading @@ -4128,6 +4146,7 @@ public abstract class Layout { */ // not being final because of subclass has already published API. @NonNull @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public LineBreakConfig getLineBreakConfig() { return mLineBreakConfig; } Loading @@ -4141,6 +4160,7 @@ public abstract class Layout { * @see StaticLayout.Builder#setUseBoundsForWidth(boolean) * @see DynamicLayout.Builder#setUseBoundsForWidth(boolean) */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth() { return mUseBoundsForWidth; } Loading
core/java/android/widget/TextView.java +19 −1 Original line number Diff line number Diff line Loading @@ -27,12 +27,14 @@ import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_C import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import static android.view.inputmethod.CursorAnchorInfo.FLAG_HAS_VISIBLE_REGION; import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH; import android.R; import android.annotation.CallSuper; import android.annotation.CheckResult; import android.annotation.ColorInt; import android.annotation.DrawableRes; import android.annotation.FlaggedApi; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; Loading Loading @@ -238,6 +240,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastMath; import com.android.internal.util.Preconditions; import com.android.text.flags.Flags; import libcore.util.EmptyArray; Loading Loading @@ -523,6 +526,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @EnabledSince(targetSdkVersion = Build.VERSION_CODES.P) public static final long STATICLAYOUT_FALLBACK_LINESPACING = 37756858; // buganizer id /** * This change ID enables the bounding box based layout. * @hide */ @ChangeId @EnabledSince(targetSdkVersion = VERSION_CODES.VANILLA_ICE_CREAM) public static final long USE_BOUNDS_FOR_WIDTH = 63938206; // buganizer id // System wide time for last cut, copy or text changed action. static long sLastCutCopyOrTextChangedTime; Loading Loading @@ -1621,7 +1633,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mUseFallbackLineSpacing = FALLBACK_LINE_SPACING_NONE; } mUseBoundsForWidth = false; // TODO: Make enable this by default. if (CompatChanges.isChangeEnabled(USE_BOUNDS_FOR_WIDTH)) { mUseBoundsForWidth = Flags.useBoundsForWidth(); } else { mUseBoundsForWidth = false; } // TODO(b/179693024): Use a ChangeId instead. mUseTextPaddingForUiTranslation = targetSdkVersion <= Build.VERSION_CODES.R; Loading Loading @@ -4848,6 +4864,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * width. * @see #getUseBoundsForWidth() */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public void setUseBoundsForWidth(boolean useBoundsForWidth) { if (mUseBoundsForWidth != useBoundsForWidth) { mUseBoundsForWidth = useBoundsForWidth; Loading @@ -4865,6 +4882,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @see #setUseBoundsForWidth(boolean) * @return True if using bounding box for width, false if using advance for width. */ @FlaggedApi(FLAG_USE_BOUNDS_FOR_WIDTH) public boolean getUseBoundsForWidth() { return mUseBoundsForWidth; } Loading