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
This commit is contained in:
@@ -71,10 +71,14 @@ public class ImageFloatingTextView extends TextView {
|
|||||||
.setTextDirection(getTextDirectionHeuristic())
|
.setTextDirection(getTextDirectionHeuristic())
|
||||||
.setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier())
|
.setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier())
|
||||||
.setIncludePad(getIncludeFontPadding())
|
.setIncludePad(getIncludeFontPadding())
|
||||||
.setEllipsize(shouldEllipsize ? effectiveEllipsize : null)
|
|
||||||
.setEllipsizedWidth(ellipsisWidth)
|
|
||||||
.setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY)
|
.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.
|
// we set the endmargin on the requested number of lines.
|
||||||
int endMargin = getContext().getResources().getDimensionPixelSize(
|
int endMargin = getContext().getResources().getDimensionPixelSize(
|
||||||
R.dimen.notification_content_picture_margin);
|
R.dimen.notification_content_picture_margin);
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user