Reset StaticLayout.mEllipsized during generate()
StaticLayout.mEllipsized and mMaxLineHeight was set for proper
calculation of static ellipsized text height. However, since
DynamicLayout uses a static instance of StaticLayout, and nobody reset
the mEllipsized, this caused configuration discrepancies for different
DynamicLayout instances.
Test: bit -t CtsTextTestCases:android.text.cts.DynamicLayoutTest
Test: bit -t CtsTextTestCases:android.text.cts.StaticLayoutTest
Fixes: 64372088
Bug: 64312574
Change-Id: I8ea6697d29da2ccbb433b64f17b4d1d6f254e8e1
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 3474c2b..9ebf04d 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -621,6 +621,8 @@
b.setLocales(paint.getTextLocales());
mLineCount = 0;
+ mEllipsized = false;
+ mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT;
int v = 0;
boolean needMultiply = (spacingmult != 1 || spacingadd != 0);
@@ -1403,7 +1405,7 @@
* The value is the same as getLineTop(maxLines) for ellipsized version where structurally no
* more than maxLines is contained.
*/
- private int mMaxLineHeight = -1;
+ private int mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT;
private static final int COLUMNS_NORMAL = 5;
private static final int COLUMNS_ELLIPSIZE = 7;
@@ -1432,6 +1434,8 @@
private static final double EXTRA_ROUNDING = 0.5;
+ private static final int DEFAULT_MAX_LINE_HEIGHT = -1;
+
// This is used to return three arrays from a single JNI call when
// performing line breaking
/*package*/ static class LineBreaks {