Merge "Remove TextWrapping automation" into udc-qpr-dev

This commit is contained in:
Allen Su
2023-07-03 01:48:53 +00:00
committed by Android (Google) Code Review
5 changed files with 8 additions and 161 deletions

View File

@@ -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;
@@ -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;
@@ -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() {}
/**
@@ -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 = mLineBreakConfig.getLineBreakWordStyle();
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;

View File

@@ -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
@@ -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");
@@ -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);

View File

@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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) {
@@ -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);
}
@@ -5147,7 +5132,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
LineBreakConfig lineBreakConfig = params.getLineBreakConfig();
mLineBreakStyle = lineBreakConfig.getLineBreakStyle();
mLineBreakWordStyle = lineBreakConfig.getLineBreakWordStyle();
mUserSpeficiedLineBreakwordStyle = true;
if (mLayout != null) {
nullLayouts();
requestLayout();
@@ -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(
@@ -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)
@@ -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);
@@ -10759,9 +10737,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
if (result == null) {
final boolean autoPhraseBreaking =
!mUserSpeficiedLineBreakwordStyle && FeatureFlagUtils.isEnabled(mContext,
FeatureFlagUtils.SETTINGS_AUTO_TEXT_WRAPPING);
StaticLayout.Builder builder = StaticLayout.Builder.obtain(mTransformed,
0, mTransformed.length(), mTextPaint, wantWidth)
.setAlignment(alignment)
@@ -10774,7 +10749,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);
@@ -11132,9 +11107,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())
@@ -11145,7 +11117,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();

View File

@@ -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;
@@ -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());
}
}
}

View File

@@ -94,11 +94,6 @@ public final class LineBreakConfig {
private @LineBreakWordStyle int mLineBreakWordStyle =
LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE;
// 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.
*/
@@ -127,23 +122,13 @@ 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.
*
* @return The {@code LineBreakConfig} instance.
*/
public @NonNull LineBreakConfig build() {
return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle, mAutoPhraseBreaking);
return new LineBreakConfig(mLineBreakStyle, mLineBreakWordStyle);
}
}
@@ -164,23 +149,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)
@@ -188,7 +156,6 @@ public final class LineBreakConfig {
private final @LineBreakStyle int mLineBreakStyle;
private final @LineBreakWordStyle int mLineBreakWordStyle;
private final boolean mAutoPhraseBreaking;
/**
* Constructor with line-break parameters.
@@ -197,10 +164,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;
}
/**
@@ -221,17 +187,6 @@ public final class LineBreakConfig {
return mLineBreakWordStyle;
}
/**
* 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;
}
@Override
public boolean equals(Object o) {
if (o == null) return false;
@@ -239,8 +194,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