Merge "Fix TextAppearanceInfo#getTextColor is wrong when there is a hint text" into udc-qpr-dev
diff --git a/core/java/android/view/inputmethod/TextAppearanceInfo.java b/core/java/android/view/inputmethod/TextAppearanceInfo.java
index 05717dd..7eee33f 100644
--- a/core/java/android/view/inputmethod/TextAppearanceInfo.java
+++ b/core/java/android/view/inputmethod/TextAppearanceInfo.java
@@ -238,7 +238,10 @@
.setFontFeatureSettings(textPaint.getFontFeatureSettings())
.setFontVariationSettings(textPaint.getFontVariationSettings())
.setTextScaleX(textPaint.getTextScaleX())
- .setTextColor(textPaint.getColor())
+ // When there is a hint text (text length is 0), the text color should be the normal
+ // text color rather than hint text color.
+ .setTextColor(text.length() == 0
+ ? textView.getCurrentTextColor() : textPaint.getColor())
.setLinkTextColor(textPaint.linkColor)
.setAllCaps(textView.isAllCaps())
.setFallbackLineSpacing(textView.isFallbackLineSpacing())
diff --git a/core/tests/coretests/src/android/view/inputmethod/TextAppearanceInfoTest.java b/core/tests/coretests/src/android/view/inputmethod/TextAppearanceInfoTest.java
index f93cd18..0750cf1 100644
--- a/core/tests/coretests/src/android/view/inputmethod/TextAppearanceInfoTest.java
+++ b/core/tests/coretests/src/android/view/inputmethod/TextAppearanceInfoTest.java
@@ -37,6 +37,7 @@
import android.text.style.ScaleXSpan;
import android.text.style.StyleSpan;
import android.text.style.TypefaceSpan;
+import android.text.util.Linkify;
import android.view.ViewGroup;
import android.widget.EditText;
@@ -53,7 +54,7 @@
@RunWith(AndroidJUnit4.class)
public class TextAppearanceInfoTest {
private static final float EPSILON = 0.0000001f;
- private static final String TEST_TEXT = "Happy birthday!";
+ private static final String TEST_TEXT = "Hello: google.com";
private static final float TEXT_SIZE = 16.5f;
private static final LocaleList TEXT_LOCALES = LocaleList.forLanguageTags("en,ja");
private static final String FONT_FAMILY_NAME = "sans-serif";
@@ -84,39 +85,7 @@
@Before
public void setUp() {
- mEditText.setText(mSpannableText);
- mEditText.getPaint().setTextSize(TEXT_SIZE);
- mEditText.setTextLocales(TEXT_LOCALES);
- Typeface family = Typeface.create(FONT_FAMILY_NAME, Typeface.NORMAL);
- mEditText.setTypeface(
- Typeface.create(family, TEXT_WEIGHT, (TEXT_STYLE & Typeface.ITALIC) != 0));
- mEditText.setAllCaps(ALL_CAPS);
- mEditText.setShadowLayer(SHADOW_RADIUS, SHADOW_DX, SHADOW_DY, SHADOW_COLOR);
- mEditText.setElegantTextHeight(ELEGANT_TEXT_HEIGHT);
- mEditText.setFallbackLineSpacing(FALLBACK_LINE_SPACING);
- mEditText.setLetterSpacing(LETTER_SPACING);
- mEditText.setFontFeatureSettings(FONT_FEATURE_SETTINGS);
- mEditText.setFontVariationSettings(FONT_VARIATION_SETTINGS);
- mEditText.setLineBreakStyle(LINE_BREAK_STYLE);
- mEditText.setLineBreakWordStyle(LINE_BREAK_WORD_STYLE);
- mEditText.setTextScaleX(TEXT_SCALEX);
- mEditText.setHighlightColor(HIGHLIGHT_TEXT_COLOR);
- mEditText.setTextColor(TEXT_COLOR);
- mEditText.setHintTextColor(HINT_TEXT_COLOR);
- mEditText.setLinkTextColor(LINK_TEXT_COLOR);
- ViewGroup.LayoutParams params =
- new ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- mEditText.setLayoutParams(params);
- mEditText.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- Bitmap bitmap =
- Bitmap.createBitmap(
- Math.max(1, mEditText.getMeasuredWidth()),
- Math.max(1, mEditText.getMeasuredHeight()),
- Bitmap.Config.ARGB_8888);
- mEditText.layout(0, 0, mEditText.getMeasuredWidth(), mEditText.getMeasuredHeight());
- mCanvas = new Canvas(bitmap);
- mEditText.draw(mCanvas);
+ initEditText(mSpannableText);
}
@Test
@@ -233,6 +202,43 @@
assertEquals(info1.getSystemFontFamilyName(), FONT_FAMILY_NAME);
}
+ private void initEditText(CharSequence text) {
+ mEditText.setText(text);
+ mEditText.getPaint().setTextSize(TEXT_SIZE);
+ mEditText.setTextLocales(TEXT_LOCALES);
+ Typeface family = Typeface.create(FONT_FAMILY_NAME, Typeface.NORMAL);
+ mEditText.setTypeface(
+ Typeface.create(family, TEXT_WEIGHT, (TEXT_STYLE & Typeface.ITALIC) != 0));
+ mEditText.setAllCaps(ALL_CAPS);
+ mEditText.setShadowLayer(SHADOW_RADIUS, SHADOW_DX, SHADOW_DY, SHADOW_COLOR);
+ mEditText.setElegantTextHeight(ELEGANT_TEXT_HEIGHT);
+ mEditText.setFallbackLineSpacing(FALLBACK_LINE_SPACING);
+ mEditText.setLetterSpacing(LETTER_SPACING);
+ mEditText.setFontFeatureSettings(FONT_FEATURE_SETTINGS);
+ mEditText.setFontVariationSettings(FONT_VARIATION_SETTINGS);
+ mEditText.setLineBreakStyle(LINE_BREAK_STYLE);
+ mEditText.setLineBreakWordStyle(LINE_BREAK_WORD_STYLE);
+ mEditText.setTextScaleX(TEXT_SCALEX);
+ mEditText.setHighlightColor(HIGHLIGHT_TEXT_COLOR);
+ mEditText.setTextColor(TEXT_COLOR);
+ mEditText.setHintTextColor(HINT_TEXT_COLOR);
+ mEditText.setHint("Hint text");
+ mEditText.setLinkTextColor(LINK_TEXT_COLOR);
+ mEditText.setAutoLinkMask(Linkify.WEB_URLS);
+ ViewGroup.LayoutParams params =
+ new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ mEditText.setLayoutParams(params);
+ mEditText.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ Bitmap bitmap =
+ Bitmap.createBitmap(
+ Math.max(1, mEditText.getMeasuredWidth()),
+ Math.max(1, mEditText.getMeasuredHeight()),
+ Bitmap.Config.ARGB_8888);
+ mEditText.layout(0, 0, mEditText.getMeasuredWidth(), mEditText.getMeasuredHeight());
+ mCanvas = new Canvas(bitmap);
+ mEditText.draw(mCanvas);
+ }
private void assertTextAppearanceInfoContentsEqual(TextAppearanceInfo textAppearanceInfo) {
assertEquals(textAppearanceInfo.getTextSize(), TEXT_SIZE, EPSILON);
assertEquals(textAppearanceInfo.getTextLocales(), TEXT_LOCALES);
@@ -258,6 +264,15 @@
assertEquals(textAppearanceInfo.getLinkTextColor(), LINK_TEXT_COLOR);
}
+ @Test
+ public void testCreateFromTextView_withHintText() {
+ // Make hint text display
+ initEditText("");
+
+ // The text color should not be hint color
+ assertTextAppearanceInfoContentsEqual(TextAppearanceInfo.createFromTextView(mEditText));
+ }
+
static class CustomForegroundColorSpan extends ForegroundColorSpan {
@Nullable public TextPaint lastTextPaint = null;