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

Commit 0ae1f237 authored by Allen Su's avatar Allen Su Committed by Android (Google) Code Review
Browse files

Merge "[TextView] add setLineBreakConfig() API in DynamicLayout"

parents dd0e4475 8e956a04
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -47172,6 +47172,7 @@ package android.text {
    method public int getBottomPadding();
    method public int getEllipsisCount(int);
    method public int getEllipsisStart(int);
    method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig();
    method public boolean getLineContainsTab(int);
    method public int getLineCount();
    method public int getLineDescent(int);
@@ -47193,6 +47194,7 @@ package android.text {
    method @NonNull public android.text.DynamicLayout.Builder setHyphenationFrequency(int);
    method @NonNull public android.text.DynamicLayout.Builder setIncludePad(boolean);
    method @NonNull public android.text.DynamicLayout.Builder setJustificationMode(int);
    method @NonNull public android.text.DynamicLayout.Builder setLineBreakConfig(@NonNull android.graphics.text.LineBreakConfig);
    method @NonNull public android.text.DynamicLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
    method @NonNull public android.text.DynamicLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
    method @NonNull public android.text.DynamicLayout.Builder setUseLineSpacingFromFallbacks(boolean);
+37 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.text.LineBreakConfig;
import android.os.Build;
import android.text.method.OffsetMapping;
import android.text.style.ReplacementSpan;
@@ -88,6 +89,7 @@ public class DynamicLayout extends Layout {
            b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
            b.mHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;
            b.mJustificationMode = Layout.JUSTIFICATION_MODE_NONE;
            b.mLineBreakConfig = LineBreakConfig.NONE;
            return b;
        }

@@ -267,6 +269,22 @@ public class DynamicLayout extends Layout {
            return this;
        }

        /**
         * Set the line break configuration. The line break will be passed to native used for
         * calculating the text wrapping. The default value of the line break style is
         * {@link LineBreakConfig#LINE_BREAK_STYLE_NONE}
         *
         * @param lineBreakConfig the line break configuration for text wrapping.
         * @return this builder, useful for chaining.
         * @see android.widget.TextView#setLineBreakStyle
         * @see android.widget.TextView#setLineBreakWordStyle
         */
        @NonNull
        public Builder setLineBreakConfig(@NonNull LineBreakConfig lineBreakConfig) {
            mLineBreakConfig = lineBreakConfig;
            return this;
        }

        /**
         * Build the {@link DynamicLayout} after options have been set.
         *
@@ -298,6 +316,7 @@ public class DynamicLayout extends Layout {
        private int mJustificationMode;
        private TextUtils.TruncateAt mEllipsize;
        private int mEllipsizedWidth;
        private LineBreakConfig mLineBreakConfig = LineBreakConfig.NONE;

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

@@ -344,7 +363,7 @@ public class DynamicLayout extends Layout {
        this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR,
                spacingmult, spacingadd, includepad,
                Layout.BREAK_STRATEGY_SIMPLE, Layout.HYPHENATION_FREQUENCY_NONE,
                Layout.JUSTIFICATION_MODE_NONE, ellipsize, ellipsizedWidth);
                Layout.JUSTIFICATION_MODE_NONE, LineBreakConfig.NONE, ellipsize, ellipsizedWidth);
    }

    /**
@@ -365,6 +384,7 @@ public class DynamicLayout extends Layout {
                         boolean includepad, @BreakStrategy int breakStrategy,
                         @HyphenationFrequency int hyphenationFrequency,
                         @JustificationMode int justificationMode,
                         @NonNull LineBreakConfig lineBreakConfig,
                         @Nullable TextUtils.TruncateAt ellipsize,
                         @IntRange(from = 0) int ellipsizedWidth) {
        super(createEllipsizer(ellipsize, display),
@@ -381,6 +401,7 @@ public class DynamicLayout extends Layout {
        mBreakStrategy = breakStrategy;
        mJustificationMode = justificationMode;
        mHyphenationFrequency = hyphenationFrequency;
        mLineBreakConfig = lineBreakConfig;

        generate(b);

@@ -396,6 +417,7 @@ public class DynamicLayout extends Layout {
        mBreakStrategy = b.mBreakStrategy;
        mJustificationMode = b.mJustificationMode;
        mHyphenationFrequency = b.mHyphenationFrequency;
        mLineBreakConfig = b.mLineBreakConfig;

        generate(b);
    }
@@ -608,6 +630,7 @@ public class DynamicLayout extends Layout {
                .setBreakStrategy(mBreakStrategy)
                .setHyphenationFrequency(mHyphenationFrequency)
                .setJustificationMode(mJustificationMode)
                .setLineBreakConfig(mLineBreakConfig)
                .setAddLastLineLineSpacing(!islast);

        reflowed.generate(b, false /*includepad*/, true /*trackpad*/);
@@ -1209,6 +1232,18 @@ public class DynamicLayout extends Layout {
        return mInts.getValue(line, ELLIPSIS_COUNT);
    }

    /**
     * Gets the {@link LineBreakconfig} used in this DynamicLayout.
     * Use this only to consult the LineBreakConfig's properties and not
     * to change them.
     *
     * @return The line break config in this DynamicLayout.
     */
    @NonNull
    public LineBreakConfig getLineBreakConfig() {
        return mLineBreakConfig;
    }

    private CharSequence mBase;
    private CharSequence mDisplay;
    private ChangeWatcher mWatcher;
@@ -1220,6 +1255,7 @@ public class DynamicLayout extends Layout {
    private int mBreakStrategy;
    private int mHyphenationFrequency;
    private int mJustificationMode;
    private LineBreakConfig mLineBreakConfig;

    private PackedIntVector mInts;
    private PackedObjectVector<Directions> mObjects;
+9 −3
Original line number Diff line number Diff line
@@ -10688,6 +10688,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            boolean useSaved) {
        Layout result = null;
        if (useDynamicLayout()) {
            final boolean autoPhraseBreaking = isAutoPhraseBreakingEnabled();
            final DynamicLayout.Builder builder = DynamicLayout.Builder.obtain(mText, mTextPaint,
                    wantWidth)
                    .setDisplayText(mTransformed)
@@ -10699,6 +10700,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                    .setBreakStrategy(mBreakStrategy)
                    .setHyphenationFrequency(mHyphenationFrequency)
                    .setJustificationMode(mJustificationMode)
                    .setLineBreakConfig(LineBreakConfig.getLineBreakConfig(
                            mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking))
                    .setEllipsize(getKeyListener() == null ? effectiveEllipsize : null)
                    .setEllipsizedWidth(ellipsisWidth);
            result = builder.build();
@@ -10743,9 +10746,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            }
        }
        if (result == null) {
            final boolean autoPhraseBreaking =
                    !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext,
                            FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING);
            final boolean autoPhraseBreaking = isAutoPhraseBreakingEnabled();
            StaticLayout.Builder builder = StaticLayout.Builder.obtain(mTransformed,
                    0, mTransformed.length(), mTextPaint, wantWidth)
                    .setAlignment(alignment)
@@ -10768,6 +10769,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        return result;
    }
    private boolean isAutoPhraseBreakingEnabled() {
        return !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext,
                FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING);
    }
    @UnsupportedAppUsage
    private boolean compressText(float width) {
        if (isHardwareAccelerated()) return false;