From 72093af5c244558224f795b49c46aa4e495f10a4 Mon Sep 17 00:00:00 2001 From: Siyamed Sinir Date: Thu, 3 Aug 2017 22:01:56 -0700 Subject: [PATCH 1/2] 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 Bug: 64372088 Change-Id: I8ea6697d29da2ccbb433b64f17b4d1d6f254e8e1 Merged-In: a19cd51d2c511777201c09e258a4e8286249fd9a (cherry picked from commit a19cd51d2c511777201c09e258a4e8286249fd9a) --- core/java/android/text/StaticLayout.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index a8c6aa6cbbbb7..16f40ba6bcf04 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -608,6 +608,8 @@ public class StaticLayout extends Layout { b.setLocales(paint.getTextLocales()); mLineCount = 0; + mEllipsized = false; + mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT; int v = 0; boolean needMultiply = (spacingmult != 1 || spacingadd != 0); @@ -1366,7 +1368,7 @@ public class StaticLayout extends Layout { * 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 = 4; private static final int COLUMNS_ELLIPSIZE = 6; @@ -1394,6 +1396,8 @@ public class StaticLayout extends Layout { 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 { From 261118009def6217cdd70e3b3e76ef4648a223f5 Mon Sep 17 00:00:00 2001 From: Siyamed Sinir Date: Mon, 21 Aug 2017 18:50:45 -0700 Subject: [PATCH 2/2] StaticLayout capped height should be 0 when maxLines=0 Previously we added mMaxLineHeight to track the line height at the maxLines value. However when maxLines is set to zero, mMaxLineHeight is not calculated and remains 0. When maxLines is set to zero, the capped height of the layout should be 0. Test: Added a test case to coretests/StaticLayoutTest Test: bit FrameworksCoreTests:android.text.StaticLayoutTest Test: bit FrameworksCoreTests:android.text.DynamicLayoutTest Test: bit FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest Test: bit FrameworksCoreTests:android.text.StaticLayoutBidiTest Test: bit FrameworksCoreTests:android.text.StaticLayoutTextMeasuringTest Test: bit FrameworksCoreTests:android.text.StaticLayoutDirectionsTest Test: bit CtsTextTestCases:android.text.cts.StaticLayoutTest Test: bit CtsTextTestCases:android.text.cts.DynamicLayoutTest Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest Bug: 64822158 Change-Id: Id9240ee7b893f8af9cd0d91329617c24da80c7d2 Merged-In: a8d982d6c850c8b3822d9ad01f8579c003da45db (cherry picked from commit a8d982d6c850c8b3822d9ad01f8579c003da45db) --- core/java/android/text/StaticLayout.java | 2 +- .../coretests/src/android/text/StaticLayoutTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index 16f40ba6bcf04..a03a4fbd52437 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -609,7 +609,7 @@ public class StaticLayout extends Layout { mLineCount = 0; mEllipsized = false; - mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT; + mMaxLineHeight = mMaximumVisibleLineCount < 1 ? 0 : DEFAULT_MAX_LINE_HEIGHT; int v = 0; boolean needMultiply = (spacingmult != 1 || spacingadd != 0); diff --git a/core/tests/coretests/src/android/text/StaticLayoutTest.java b/core/tests/coretests/src/android/text/StaticLayoutTest.java index fb60e38fcbf60..f1c4e56fc6c93 100644 --- a/core/tests/coretests/src/android/text/StaticLayoutTest.java +++ b/core/tests/coretests/src/android/text/StaticLayoutTest.java @@ -746,4 +746,15 @@ public class StaticLayoutTest { assertEquals(numEnglishLines, numPrivateLocaleLines); } } + + @Test + public void testGetHeight_zeroMaxLines() { + final String text = "a\nb"; + final TextPaint paint = new TextPaint(); + final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), paint, + Integer.MAX_VALUE).setMaxLines(0).build(); + + assertEquals(0, layout.getHeight(true)); + assertEquals(2, layout.getLineCount()); + } }