diff --git a/core/java/com/android/internal/widget/ImageFloatingTextView.java b/core/java/com/android/internal/widget/ImageFloatingTextView.java index 358be604f8472..a5d2bf3b68d3c 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 0000000000000..5dc07c235c161 --- /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()); + } +}