Loading core/java/android/text/StaticLayout.java +0 −53 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.graphics.Paint; import android.graphics.text.LineBreakConfig; import android.graphics.text.LineBreaker; import android.os.Build; import android.os.SystemProperties; import android.text.style.LeadingMarginSpan; import android.text.style.LeadingMarginSpan.LeadingMarginSpan2; import android.text.style.LineHeightSpan; Loading @@ -33,7 +32,6 @@ import android.text.style.TabStopSpan; import android.util.Log; import android.util.Pools.SynchronizedPool; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; Loading Loading @@ -75,13 +73,6 @@ public class StaticLayout extends Layout { * default values. */ public final static class Builder { // The content length threshold to enable LINE_BREAK_WORD_STYLE_PHRASE. private static final int DEFAULT_LINECOUNT_THRESHOLD_FOR_PHRASE = 3; // The property of content length threshold to enable LINE_BREAK_WORD_STYLE_PHRASE. private static final String PROPERTY_LINECOUNT_THRESHOLD_FOR_PHRASE = "android.phrase.linecount.threshold"; private Builder() {} /** Loading Loading @@ -440,55 +431,11 @@ public class StaticLayout extends Layout { */ @NonNull public StaticLayout build() { reviseLineBreakConfig(); StaticLayout result = new StaticLayout(this); Builder.recycle(this); return result; } private void reviseLineBreakConfig() { boolean autoPhraseBreaking = mLineBreakConfig.getAutoPhraseBreaking(); int wordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(mLineBreakConfig); if (autoPhraseBreaking) { if (wordStyle != LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE) { if (shouldEnablePhraseBreaking()) { mLineBreakConfig = LineBreakConfig.getLineBreakConfig( mLineBreakConfig.getLineBreakStyle(), LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE, mLineBreakConfig.getAutoPhraseBreaking()); } } } } private boolean shouldEnablePhraseBreaking() { if (TextUtils.isEmpty(mText) || mWidth <= 0) { return false; } int lineLimit = SystemProperties.getInt( PROPERTY_LINECOUNT_THRESHOLD_FOR_PHRASE, DEFAULT_LINECOUNT_THRESHOLD_FOR_PHRASE); double desiredWidth = (double) Layout.getDesiredWidth(mText, mStart, mEnd, mPaint, mTextDir); int lineCount = (int) Math.ceil(desiredWidth / mWidth); if (lineCount > 0 && lineCount <= lineLimit) { return true; } return false; } /** * Get the line break word style. * * @return The current line break word style. * * @hide */ @VisibleForTesting public int getLineBreakWordStyle() { return mLineBreakConfig.getLineBreakWordStyle(); } private CharSequence mText; private int mStart; private int mEnd; Loading core/java/android/util/FeatureFlagUtils.java +0 −5 Original line number Diff line number Diff line Loading @@ -86,9 +86,6 @@ public class FeatureFlagUtils { public static final String SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST = "settings_need_connected_ble_device_for_broadcast"; /** @hide */ public static final String SETTINGS_AUTO_TEXT_WRAPPING = "settings_auto_text_wrapping"; /** * Enable new language and keyboard settings UI * @hide Loading Loading @@ -225,7 +222,6 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); DEFAULT_FLAGS.put(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME, "true"); DEFAULT_FLAGS.put(SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, "true"); DEFAULT_FLAGS.put(SETTINGS_AUTO_TEXT_WRAPPING, "false"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_UI, "true"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_MODIFIER_KEY, "true"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_TRACKPAD, "true"); Loading Loading @@ -253,7 +249,6 @@ public class FeatureFlagUtils { PERSISTENT_FLAGS.add(SETTINGS_SUPPORT_LARGE_SCREEN); PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); PERSISTENT_FLAGS.add(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME); PERSISTENT_FLAGS.add(SETTINGS_AUTO_TEXT_WRAPPING); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_UI); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_MODIFIER_KEY); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_TRACKPAD); Loading core/java/android/widget/TextView.java +6 −38 Original line number Diff line number Diff line Loading @@ -156,7 +156,6 @@ import android.text.util.Linkify; import android.util.ArraySet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.FeatureFlagUtils; import android.util.IntArray; import android.util.Log; import android.util.SparseIntArray; Loading Loading @@ -831,11 +830,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private int mLineBreakStyle = DEFAULT_LINE_BREAK_STYLE; private int mLineBreakWordStyle = DEFAULT_LINE_BREAK_WORD_STYLE; // The auto option for LINE_BREAK_WORD_STYLE_PHRASE may not be applied in recycled view due to // one-way flag flipping. This is a tentative limitation during experiment and will not have the // issue once this is finalized to LINE_BREAK_WORD_STYLE_PHRASE_AUTO option. private boolean mUserSpeficiedLineBreakwordStyle = false; // This is used to reflect the current user preference for changing font weight and making text // more bold. private int mFontWeightAdjustment; Loading Loading @@ -1546,9 +1540,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case com.android.internal.R.styleable.TextView_lineBreakWordStyle: if (a.hasValue(attr)) { mUserSpeficiedLineBreakwordStyle = true; } mLineBreakWordStyle = a.getInt(attr, LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE); break; Loading Loading @@ -4350,7 +4341,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case com.android.internal.R.styleable.TextAppearance_lineBreakWordStyle: attributes.mHasLineBreakWordStyle = true; mUserSpeficiedLineBreakwordStyle = true; attributes.mLineBreakWordStyle = appearance.getInt(attr, attributes.mLineBreakWordStyle); break; Loading Loading @@ -5086,7 +5076,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @param lineBreakWordStyle The line-break word style for the text. */ public void setLineBreakWordStyle(@LineBreakConfig.LineBreakWordStyle int lineBreakWordStyle) { mUserSpeficiedLineBreakwordStyle = true; if (mLineBreakWordStyle != lineBreakWordStyle) { mLineBreakWordStyle = lineBreakWordStyle; if (mLayout != null) { Loading Loading @@ -5122,12 +5111,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @see PrecomputedText */ public @NonNull PrecomputedText.Params getTextMetricsParams() { final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); return new PrecomputedText.Params(new TextPaint(mTextPaint), LineBreakConfig.getLineBreakConfig(mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking), LineBreakConfig.getLineBreakConfig(mLineBreakStyle, mLineBreakWordStyle), getTextDirectionHeuristic(), mBreakStrategy, mHyphenationFrequency); } Loading @@ -5147,7 +5132,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener LineBreakConfig lineBreakConfig = params.getLineBreakConfig(); mLineBreakStyle = LineBreakConfig.getResolvedLineBreakStyle(lineBreakConfig); mLineBreakWordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(lineBreakConfig); mUserSpeficiedLineBreakwordStyle = true; if (mLayout != null) { nullLayouts(); requestLayout(); Loading Loading @@ -7077,13 +7061,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mTextDir == null) { mTextDir = getTextDirectionHeuristic(); } final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); final @PrecomputedText.Params.CheckResultUsableResult int checkResult = precomputed.getParams().checkResultUsable(getPaint(), mTextDir, mBreakStrategy, mHyphenationFrequency, LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); switch (checkResult) { case PrecomputedText.Params.UNUSABLE: throw new IllegalArgumentException( Loading Loading @@ -10640,9 +10621,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } // TODO: code duplication with makeSingleLayout() if (mHintLayout == null) { final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); StaticLayout.Builder builder = StaticLayout.Builder.obtain(mHint, 0, mHint.length(), mTextPaint, hintWidth) .setAlignment(alignment) Loading @@ -10655,7 +10633,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(mEllipsize) .setEllipsizedWidth(ellipsisWidth); Loading Loading @@ -10704,7 +10682,6 @@ 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) Loading @@ -10717,7 +10694,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setHyphenationFrequency(mHyphenationFrequency) .setJustificationMode(mJustificationMode) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)) mLineBreakStyle, mLineBreakWordStyle)) .setEllipsize(getKeyListener() == null ? effectiveEllipsize : null) .setEllipsizedWidth(ellipsisWidth); result = builder.build(); Loading Loading @@ -10762,7 +10739,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } if (result == null) { final boolean autoPhraseBreaking = isAutoPhraseBreakingEnabled(); StaticLayout.Builder builder = StaticLayout.Builder.obtain(mTransformed, 0, mTransformed.length(), mTextPaint, wantWidth) .setAlignment(alignment) Loading @@ -10775,7 +10751,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(effectiveEllipsize) .setEllipsizedWidth(ellipsisWidth); Loading @@ -10785,11 +10761,6 @@ 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; Loading Loading @@ -11138,9 +11109,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain( text, 0, text.length(), mTempTextPaint, Math.round(availableSpace.right)); final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); layoutBuilder.setAlignment(getLayoutAlignment()) .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) .setIncludePad(getIncludeFontPadding()) Loading @@ -11151,7 +11119,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setTextDirection(getTextDirectionHeuristic()) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); final StaticLayout layout = layoutBuilder.build(); Loading core/tests/coretests/src/android/text/StaticLayoutTest.java +0 −21 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import static org.junit.Assert.assertTrue; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.text.LineBreakConfig; import android.os.LocaleList; import android.platform.test.annotations.Presubmit; import android.text.Layout.Alignment; Loading Loading @@ -926,24 +925,4 @@ public class StaticLayoutTest { assertEquals(0, layout.getHeight(true)); assertEquals(2, layout.getLineCount()); } @Test public void testBuilder_autoPhraseBreaking() { { // setAutoPhraseBreaking true LineBreakConfig lineBreakConfig = new LineBreakConfig.Builder() .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_STYLE_NONE) .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE) .setAutoPhraseBreaking(true) .build(); final String text = "これが正解。"; // Obtain. StaticLayout.Builder builder = StaticLayout.Builder.obtain(text, 0, text.length(), mDefaultPaint, DEFAULT_OUTER_WIDTH); builder.setLineBreakConfig(lineBreakConfig); builder.build(); assertEquals(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE, builder.getLineBreakWordStyle()); } } } graphics/java/android/graphics/text/LineBreakConfig.java +4 −52 Original line number Diff line number Diff line Loading @@ -147,11 +147,6 @@ public final class LineBreakConfig { private @LineBreakWordStyle int mLineBreakWordStyle = LineBreakConfig.LINE_BREAK_WORD_STYLE_UNSPECIFIED; // Whether or not enabling phrase breaking automatically. // TODO(b/226012260): Remove this and add LINE_BREAK_WORD_STYLE_PHRASE_AUTO after // the experiment. private boolean mAutoPhraseBreaking = false; /** * Builder constructor. */ Loading Loading @@ -243,16 +238,6 @@ public final class LineBreakConfig { return this; } /** * Enables or disables the automation of {@link #LINE_BREAK_WORD_STYLE_PHRASE}. * * @hide */ public @NonNull Builder setAutoPhraseBreaking(boolean autoPhraseBreaking) { mAutoPhraseBreaking = autoPhraseBreaking; return this; } /** * Builds a {@link LineBreakConfig} instance. * Loading @@ -262,7 +247,7 @@ public final class LineBreakConfig { * @return The {@code LineBreakConfig} instance. */ public @NonNull LineBreakConfig build() { return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle, mAutoPhraseBreaking); return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle); } } Loading @@ -283,23 +268,6 @@ public final class LineBreakConfig { .build(); } /** * Create the LineBreakConfig instance. * * @param lineBreakStyle the line break style for text wrapping. * @param lineBreakWordStyle the line break word style for text wrapping. * @return the {@link LineBreakConfig} instance. * * @hide */ public static @NonNull LineBreakConfig getLineBreakConfig(@LineBreakStyle int lineBreakStyle, @LineBreakWordStyle int lineBreakWordStyle, boolean autoPhraseBreaking) { LineBreakConfig.Builder builder = new LineBreakConfig.Builder(); return builder.setLineBreakStyle(lineBreakStyle) .setLineBreakWordStyle(lineBreakWordStyle) .setAutoPhraseBreaking(autoPhraseBreaking) .build(); } /** @hide */ public static final LineBreakConfig NONE = new Builder().setLineBreakStyle(LINE_BREAK_STYLE_NONE) Loading @@ -307,7 +275,6 @@ public final class LineBreakConfig { private final @LineBreakStyle int mLineBreakStyle; private final @LineBreakWordStyle int mLineBreakWordStyle; private final boolean mAutoPhraseBreaking; /** * Constructor with line-break parameters. Loading @@ -316,10 +283,9 @@ public final class LineBreakConfig { * {@code LineBreakConfig} instance. */ private LineBreakConfig(@LineBreakStyle int lineBreakStyle, @LineBreakWordStyle int lineBreakWordStyle, boolean autoPhraseBreaking) { @LineBreakWordStyle int lineBreakWordStyle) { mLineBreakStyle = lineBreakStyle; mLineBreakWordStyle = lineBreakWordStyle; mAutoPhraseBreaking = autoPhraseBreaking; } /** Loading Loading @@ -400,20 +366,7 @@ public final class LineBreakConfig { config.mLineBreakStyle == LINE_BREAK_STYLE_UNSPECIFIED ? mLineBreakStyle : config.mLineBreakStyle, config.mLineBreakWordStyle == LINE_BREAK_WORD_STYLE_UNSPECIFIED ? mLineBreakWordStyle : config.mLineBreakWordStyle, config.mAutoPhraseBreaking ); } /** * Used to identify if the automation of {@link #LINE_BREAK_WORD_STYLE_PHRASE} is enabled. * * @return The result that records whether or not the automation of * {@link #LINE_BREAK_WORD_STYLE_PHRASE} is enabled. * @hide */ public boolean getAutoPhraseBreaking() { return mAutoPhraseBreaking; ? mLineBreakWordStyle : config.mLineBreakWordStyle); } @Override Loading @@ -423,8 +376,7 @@ public final class LineBreakConfig { if (!(o instanceof LineBreakConfig)) return false; LineBreakConfig that = (LineBreakConfig) o; return (mLineBreakStyle == that.mLineBreakStyle) && (mLineBreakWordStyle == that.mLineBreakWordStyle) && (mAutoPhraseBreaking == that.mAutoPhraseBreaking); && (mLineBreakWordStyle == that.mLineBreakWordStyle); } @Override Loading Loading
core/java/android/text/StaticLayout.java +0 −53 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.graphics.Paint; import android.graphics.text.LineBreakConfig; import android.graphics.text.LineBreaker; import android.os.Build; import android.os.SystemProperties; import android.text.style.LeadingMarginSpan; import android.text.style.LeadingMarginSpan.LeadingMarginSpan2; import android.text.style.LineHeightSpan; Loading @@ -33,7 +32,6 @@ import android.text.style.TabStopSpan; import android.util.Log; import android.util.Pools.SynchronizedPool; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; Loading Loading @@ -75,13 +73,6 @@ public class StaticLayout extends Layout { * default values. */ public final static class Builder { // The content length threshold to enable LINE_BREAK_WORD_STYLE_PHRASE. private static final int DEFAULT_LINECOUNT_THRESHOLD_FOR_PHRASE = 3; // The property of content length threshold to enable LINE_BREAK_WORD_STYLE_PHRASE. private static final String PROPERTY_LINECOUNT_THRESHOLD_FOR_PHRASE = "android.phrase.linecount.threshold"; private Builder() {} /** Loading Loading @@ -440,55 +431,11 @@ public class StaticLayout extends Layout { */ @NonNull public StaticLayout build() { reviseLineBreakConfig(); StaticLayout result = new StaticLayout(this); Builder.recycle(this); return result; } private void reviseLineBreakConfig() { boolean autoPhraseBreaking = mLineBreakConfig.getAutoPhraseBreaking(); int wordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(mLineBreakConfig); if (autoPhraseBreaking) { if (wordStyle != LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE) { if (shouldEnablePhraseBreaking()) { mLineBreakConfig = LineBreakConfig.getLineBreakConfig( mLineBreakConfig.getLineBreakStyle(), LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE, mLineBreakConfig.getAutoPhraseBreaking()); } } } } private boolean shouldEnablePhraseBreaking() { if (TextUtils.isEmpty(mText) || mWidth <= 0) { return false; } int lineLimit = SystemProperties.getInt( PROPERTY_LINECOUNT_THRESHOLD_FOR_PHRASE, DEFAULT_LINECOUNT_THRESHOLD_FOR_PHRASE); double desiredWidth = (double) Layout.getDesiredWidth(mText, mStart, mEnd, mPaint, mTextDir); int lineCount = (int) Math.ceil(desiredWidth / mWidth); if (lineCount > 0 && lineCount <= lineLimit) { return true; } return false; } /** * Get the line break word style. * * @return The current line break word style. * * @hide */ @VisibleForTesting public int getLineBreakWordStyle() { return mLineBreakConfig.getLineBreakWordStyle(); } private CharSequence mText; private int mStart; private int mEnd; Loading
core/java/android/util/FeatureFlagUtils.java +0 −5 Original line number Diff line number Diff line Loading @@ -86,9 +86,6 @@ public class FeatureFlagUtils { public static final String SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST = "settings_need_connected_ble_device_for_broadcast"; /** @hide */ public static final String SETTINGS_AUTO_TEXT_WRAPPING = "settings_auto_text_wrapping"; /** * Enable new language and keyboard settings UI * @hide Loading Loading @@ -225,7 +222,6 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); DEFAULT_FLAGS.put(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME, "true"); DEFAULT_FLAGS.put(SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, "true"); DEFAULT_FLAGS.put(SETTINGS_AUTO_TEXT_WRAPPING, "false"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_UI, "true"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_MODIFIER_KEY, "true"); DEFAULT_FLAGS.put(SETTINGS_NEW_KEYBOARD_TRACKPAD, "true"); Loading Loading @@ -253,7 +249,6 @@ public class FeatureFlagUtils { PERSISTENT_FLAGS.add(SETTINGS_SUPPORT_LARGE_SCREEN); PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); PERSISTENT_FLAGS.add(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME); PERSISTENT_FLAGS.add(SETTINGS_AUTO_TEXT_WRAPPING); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_UI); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_MODIFIER_KEY); PERSISTENT_FLAGS.add(SETTINGS_NEW_KEYBOARD_TRACKPAD); Loading
core/java/android/widget/TextView.java +6 −38 Original line number Diff line number Diff line Loading @@ -156,7 +156,6 @@ import android.text.util.Linkify; import android.util.ArraySet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.FeatureFlagUtils; import android.util.IntArray; import android.util.Log; import android.util.SparseIntArray; Loading Loading @@ -831,11 +830,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private int mLineBreakStyle = DEFAULT_LINE_BREAK_STYLE; private int mLineBreakWordStyle = DEFAULT_LINE_BREAK_WORD_STYLE; // The auto option for LINE_BREAK_WORD_STYLE_PHRASE may not be applied in recycled view due to // one-way flag flipping. This is a tentative limitation during experiment and will not have the // issue once this is finalized to LINE_BREAK_WORD_STYLE_PHRASE_AUTO option. private boolean mUserSpeficiedLineBreakwordStyle = false; // This is used to reflect the current user preference for changing font weight and making text // more bold. private int mFontWeightAdjustment; Loading Loading @@ -1546,9 +1540,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case com.android.internal.R.styleable.TextView_lineBreakWordStyle: if (a.hasValue(attr)) { mUserSpeficiedLineBreakwordStyle = true; } mLineBreakWordStyle = a.getInt(attr, LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE); break; Loading Loading @@ -4350,7 +4341,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case com.android.internal.R.styleable.TextAppearance_lineBreakWordStyle: attributes.mHasLineBreakWordStyle = true; mUserSpeficiedLineBreakwordStyle = true; attributes.mLineBreakWordStyle = appearance.getInt(attr, attributes.mLineBreakWordStyle); break; Loading Loading @@ -5086,7 +5076,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @param lineBreakWordStyle The line-break word style for the text. */ public void setLineBreakWordStyle(@LineBreakConfig.LineBreakWordStyle int lineBreakWordStyle) { mUserSpeficiedLineBreakwordStyle = true; if (mLineBreakWordStyle != lineBreakWordStyle) { mLineBreakWordStyle = lineBreakWordStyle; if (mLayout != null) { Loading Loading @@ -5122,12 +5111,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @see PrecomputedText */ public @NonNull PrecomputedText.Params getTextMetricsParams() { final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); return new PrecomputedText.Params(new TextPaint(mTextPaint), LineBreakConfig.getLineBreakConfig(mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking), LineBreakConfig.getLineBreakConfig(mLineBreakStyle, mLineBreakWordStyle), getTextDirectionHeuristic(), mBreakStrategy, mHyphenationFrequency); } Loading @@ -5147,7 +5132,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener LineBreakConfig lineBreakConfig = params.getLineBreakConfig(); mLineBreakStyle = LineBreakConfig.getResolvedLineBreakStyle(lineBreakConfig); mLineBreakWordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(lineBreakConfig); mUserSpeficiedLineBreakwordStyle = true; if (mLayout != null) { nullLayouts(); requestLayout(); Loading Loading @@ -7077,13 +7061,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mTextDir == null) { mTextDir = getTextDirectionHeuristic(); } final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); final @PrecomputedText.Params.CheckResultUsableResult int checkResult = precomputed.getParams().checkResultUsable(getPaint(), mTextDir, mBreakStrategy, mHyphenationFrequency, LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); switch (checkResult) { case PrecomputedText.Params.UNUSABLE: throw new IllegalArgumentException( Loading Loading @@ -10640,9 +10621,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } // TODO: code duplication with makeSingleLayout() if (mHintLayout == null) { final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); StaticLayout.Builder builder = StaticLayout.Builder.obtain(mHint, 0, mHint.length(), mTextPaint, hintWidth) .setAlignment(alignment) Loading @@ -10655,7 +10633,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(mEllipsize) .setEllipsizedWidth(ellipsisWidth); Loading Loading @@ -10704,7 +10682,6 @@ 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) Loading @@ -10717,7 +10694,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setHyphenationFrequency(mHyphenationFrequency) .setJustificationMode(mJustificationMode) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)) mLineBreakStyle, mLineBreakWordStyle)) .setEllipsize(getKeyListener() == null ? effectiveEllipsize : null) .setEllipsizedWidth(ellipsisWidth); result = builder.build(); Loading Loading @@ -10762,7 +10739,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } if (result == null) { final boolean autoPhraseBreaking = isAutoPhraseBreakingEnabled(); StaticLayout.Builder builder = StaticLayout.Builder.obtain(mTransformed, 0, mTransformed.length(), mTextPaint, wantWidth) .setAlignment(alignment) Loading @@ -10775,7 +10751,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setJustificationMode(mJustificationMode) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); if (shouldEllipsize) { builder.setEllipsize(effectiveEllipsize) .setEllipsizedWidth(ellipsisWidth); Loading @@ -10785,11 +10761,6 @@ 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; Loading Loading @@ -11138,9 +11109,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain( text, 0, text.length(), mTempTextPaint, Math.round(availableSpace.right)); final boolean autoPhraseBreaking = !mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING); layoutBuilder.setAlignment(getLayoutAlignment()) .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) .setIncludePad(getIncludeFontPadding()) Loading @@ -11151,7 +11119,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setTextDirection(getTextDirectionHeuristic()) .setLineBreakConfig(LineBreakConfig.getLineBreakConfig( mLineBreakStyle, mLineBreakWordStyle, autoPhraseBreaking)); mLineBreakStyle, mLineBreakWordStyle)); final StaticLayout layout = layoutBuilder.build(); Loading
core/tests/coretests/src/android/text/StaticLayoutTest.java +0 −21 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import static org.junit.Assert.assertTrue; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.text.LineBreakConfig; import android.os.LocaleList; import android.platform.test.annotations.Presubmit; import android.text.Layout.Alignment; Loading Loading @@ -926,24 +925,4 @@ public class StaticLayoutTest { assertEquals(0, layout.getHeight(true)); assertEquals(2, layout.getLineCount()); } @Test public void testBuilder_autoPhraseBreaking() { { // setAutoPhraseBreaking true LineBreakConfig lineBreakConfig = new LineBreakConfig.Builder() .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_STYLE_NONE) .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE) .setAutoPhraseBreaking(true) .build(); final String text = "これが正解。"; // Obtain. StaticLayout.Builder builder = StaticLayout.Builder.obtain(text, 0, text.length(), mDefaultPaint, DEFAULT_OUTER_WIDTH); builder.setLineBreakConfig(lineBreakConfig); builder.build(); assertEquals(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE, builder.getLineBreakWordStyle()); } } }
graphics/java/android/graphics/text/LineBreakConfig.java +4 −52 Original line number Diff line number Diff line Loading @@ -147,11 +147,6 @@ public final class LineBreakConfig { private @LineBreakWordStyle int mLineBreakWordStyle = LineBreakConfig.LINE_BREAK_WORD_STYLE_UNSPECIFIED; // Whether or not enabling phrase breaking automatically. // TODO(b/226012260): Remove this and add LINE_BREAK_WORD_STYLE_PHRASE_AUTO after // the experiment. private boolean mAutoPhraseBreaking = false; /** * Builder constructor. */ Loading Loading @@ -243,16 +238,6 @@ public final class LineBreakConfig { return this; } /** * Enables or disables the automation of {@link #LINE_BREAK_WORD_STYLE_PHRASE}. * * @hide */ public @NonNull Builder setAutoPhraseBreaking(boolean autoPhraseBreaking) { mAutoPhraseBreaking = autoPhraseBreaking; return this; } /** * Builds a {@link LineBreakConfig} instance. * Loading @@ -262,7 +247,7 @@ public final class LineBreakConfig { * @return The {@code LineBreakConfig} instance. */ public @NonNull LineBreakConfig build() { return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle, mAutoPhraseBreaking); return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle); } } Loading @@ -283,23 +268,6 @@ public final class LineBreakConfig { .build(); } /** * Create the LineBreakConfig instance. * * @param lineBreakStyle the line break style for text wrapping. * @param lineBreakWordStyle the line break word style for text wrapping. * @return the {@link LineBreakConfig} instance. * * @hide */ public static @NonNull LineBreakConfig getLineBreakConfig(@LineBreakStyle int lineBreakStyle, @LineBreakWordStyle int lineBreakWordStyle, boolean autoPhraseBreaking) { LineBreakConfig.Builder builder = new LineBreakConfig.Builder(); return builder.setLineBreakStyle(lineBreakStyle) .setLineBreakWordStyle(lineBreakWordStyle) .setAutoPhraseBreaking(autoPhraseBreaking) .build(); } /** @hide */ public static final LineBreakConfig NONE = new Builder().setLineBreakStyle(LINE_BREAK_STYLE_NONE) Loading @@ -307,7 +275,6 @@ public final class LineBreakConfig { private final @LineBreakStyle int mLineBreakStyle; private final @LineBreakWordStyle int mLineBreakWordStyle; private final boolean mAutoPhraseBreaking; /** * Constructor with line-break parameters. Loading @@ -316,10 +283,9 @@ public final class LineBreakConfig { * {@code LineBreakConfig} instance. */ private LineBreakConfig(@LineBreakStyle int lineBreakStyle, @LineBreakWordStyle int lineBreakWordStyle, boolean autoPhraseBreaking) { @LineBreakWordStyle int lineBreakWordStyle) { mLineBreakStyle = lineBreakStyle; mLineBreakWordStyle = lineBreakWordStyle; mAutoPhraseBreaking = autoPhraseBreaking; } /** Loading Loading @@ -400,20 +366,7 @@ public final class LineBreakConfig { config.mLineBreakStyle == LINE_BREAK_STYLE_UNSPECIFIED ? mLineBreakStyle : config.mLineBreakStyle, config.mLineBreakWordStyle == LINE_BREAK_WORD_STYLE_UNSPECIFIED ? mLineBreakWordStyle : config.mLineBreakWordStyle, config.mAutoPhraseBreaking ); } /** * Used to identify if the automation of {@link #LINE_BREAK_WORD_STYLE_PHRASE} is enabled. * * @return The result that records whether or not the automation of * {@link #LINE_BREAK_WORD_STYLE_PHRASE} is enabled. * @hide */ public boolean getAutoPhraseBreaking() { return mAutoPhraseBreaking; ? mLineBreakWordStyle : config.mLineBreakWordStyle); } @Override Loading @@ -423,8 +376,7 @@ public final class LineBreakConfig { if (!(o instanceof LineBreakConfig)) return false; LineBreakConfig that = (LineBreakConfig) o; return (mLineBreakStyle == that.mLineBreakStyle) && (mLineBreakWordStyle == that.mLineBreakWordStyle) && (mAutoPhraseBreaking == that.mAutoPhraseBreaking); && (mLineBreakWordStyle == that.mLineBreakWordStyle); } @Override Loading