From 62be439d26a9e0748d4626bed8ffa117e39764a2 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Mon, 5 Dec 2016 13:59:52 -0800 Subject: Notifications: Fix bad layout for long texts Fixes a bug where the max lines restriction was not properly passed to ImageFloatingTextView's layout, causing the TextView to improperly apply bottom padding. Change-Id: Ibe07515866a4599047712a0482332ed4430c9056 Test: runtest -x core/tests/coretests/src/com/android/internal/widget/ImageFloatingTextViewTest.java Fixes: 32658499 Bug: 32658499 --- .../internal/widget/ImageFloatingTextView.java | 10 +- .../internal/widget/ImageFloatingTextViewTest.java | 116 +++++++++++++++++++++ 2 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 core/tests/coretests/src/com/android/internal/widget/ImageFloatingTextViewTest.java diff --git a/core/java/com/android/internal/widget/ImageFloatingTextView.java b/core/java/com/android/internal/widget/ImageFloatingTextView.java index 358be604f847..a5d2bf3b68d3 100644 --- a/core/java/com/android/internal/widget/ImageFloatingTextView.java +++ b/core/java/com/android/internal/widget/ImageFloatingTextView.java @@ -71,10 +71,14 @@ public class ImageFloatingTextView extends TextView { .setTextDirection(getTextDirectionHeuristic()) .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) .setIncludePad(getIncludeFontPadding()) - .setEllipsize(shouldEllipsize ? effectiveEllipsize : null) - .setEllipsizedWidth(ellipsisWidth) .setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY) - .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL); + .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL) + .setMaxLines(getMaxLines() >= 0 ? getMaxLines() : Integer.MAX_VALUE); + if (shouldEllipsize) { + builder.setEllipsize(effectiveEllipsize) + .setEllipsizedWidth(ellipsisWidth); + } + // we set the endmargin on the requested number of lines. int endMargin = getContext().getResources().getDimensionPixelSize( R.dimen.notification_content_picture_margin); diff --git a/core/tests/coretests/src/com/android/internal/widget/ImageFloatingTextViewTest.java b/core/tests/coretests/src/com/android/internal/widget/ImageFloatingTextViewTest.java new file mode 100644 index 000000000000..5dc07c235c16 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/widget/ImageFloatingTextViewTest.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.widget; + +import static org.junit.Assert.assertEquals; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.SmallTest; +import android.view.View.MeasureSpec; +import android.widget.TextView; + +import org.junit.Before; +import org.junit.Test; + +@SmallTest +public class ImageFloatingTextViewTest { + + private Context mContext; + private ImageFloatingTextView mView; + private TextView mTextView; + + @Before + public void setup() { + mContext = InstrumentationRegistry.getTargetContext(); + mView = new ImageFloatingTextView(mContext, null, 0, 0); + mTextView = new TextView(mContext, null, 0, 0); + mTextView.setMaxLines(9); + } + + @Test + public void testEmpty() { + parametrizedTest(""); + } + + @Test + public void testSingleLine() { + parametrizedTest("Hello, World!"); + } + + @Test + public void testTwoLine() { + parametrizedTest("Hello, World!\nWhat a nice day!"); + } + + @Test + public void testShort() { + parametrizedTest("Hello, World! What a nice day! Let's try some more text. " + + "Yada yada, yada yada. Lorem ipsum dolor sit amet."); + } + + @Test + public void testLong() { + parametrizedTest("Hello, World! What a nice day! Let's try some more text. " + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet." + + "Yada yada, yada yada. Lorem ipsum dolor sit amet."); + } + + private void parametrizedTest(CharSequence text) { + int heightMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST); + int widthMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.EXACTLY); + + mTextView.setText(text); + mView.setText(text); + + mTextView.measure(widthMeasureSpec, heightMeasureSpec); + mView.measure(widthMeasureSpec, heightMeasureSpec); + + assertEquals(mTextView.getMeasuredHeight(), mView.getMeasuredHeight()); + } +} -- cgit v1.2.3-59-g8ed1b