diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index b2170521a97fa..4ba907f3008e8 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -3489,8 +3489,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener com.android.internal.R.layout.textview_hint, null); final float scale = getResources().getDisplayMetrics().density; - mPopup = new ErrorPopup(err, (int) (200 * scale + 0.5f), - (int) (50 * scale + 0.5f)); + mPopup = new ErrorPopup(err, (int) (200 * scale + 0.5f), (int) (50 * scale + 0.5f)); mPopup.setFocusable(false); // The user is entering text, so the input method is needed. We // don't want the popup to be displayed on top of it. @@ -3514,6 +3513,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ErrorPopup(TextView v, int width, int height) { super(v, width, height); mView = v; + // Make sure the TextView has a background set as it will be used the first time it is + // shown and positionned. Initialized with below background, which should have + // dimensions identical to the above version for this to work (and is more likely). + mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId, + com.android.internal.R.styleable.Theme_errorMessageBackground); + mView.setBackgroundResource(mPopupInlineErrorBackgroundId); } void fixDirection(boolean above) { @@ -3521,18 +3526,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (above) { mPopupInlineErrorAboveBackgroundId = - getResourceId(mPopupInlineErrorAboveBackgroundId, com.android.internal.R.styleable.Theme_errorMessageAboveBackground); + getResourceId(mPopupInlineErrorAboveBackgroundId, + com.android.internal.R.styleable.Theme_errorMessageAboveBackground); } else { - mPopupInlineErrorBackgroundId = - getResourceId(mPopupInlineErrorBackgroundId, com.android.internal.R.styleable.Theme_errorMessageBackground); + mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId, + com.android.internal.R.styleable.Theme_errorMessageBackground); } - mView.setBackgroundResource(above ? mPopupInlineErrorAboveBackgroundId : mPopupInlineErrorBackgroundId); + mView.setBackgroundResource(above ? mPopupInlineErrorAboveBackgroundId : + mPopupInlineErrorBackgroundId); } private int getResourceId(int currentId, int index) { if (currentId == 0) { - TypedArray styledAttributes = mView.getContext().obtainStyledAttributes(R.styleable.Theme); + TypedArray styledAttributes = mView.getContext().obtainStyledAttributes( + R.styleable.Theme); currentId = styledAttributes.getResourceId(index, 0); styledAttributes.recycle(); } @@ -3562,9 +3570,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final float scale = getResources().getDisplayMetrics().density; final Drawables dr = mDrawables; - return getWidth() - mPopup.getWidth() - - getPaddingRight() - - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f); + return getWidth() - mPopup.getWidth() - getPaddingRight() - + (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f); } /** @@ -3576,20 +3583,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * Compound, not extended, because the icon is not clipped * if the text height is smaller. */ - int vspace = mBottom - mTop - - getCompoundPaddingBottom() - getCompoundPaddingTop(); + final int compoundPaddingTop = getCompoundPaddingTop(); + int vspace = mBottom - mTop - getCompoundPaddingBottom() - compoundPaddingTop; final Drawables dr = mDrawables; - int icontop = getCompoundPaddingTop() - + (vspace - (dr != null ? dr.mDrawableHeightRight : 0)) / 2; + int icontop = compoundPaddingTop + + (vspace - (dr != null ? dr.mDrawableHeightRight : 0)) / 2; /* * The "2" is the distance between the point and the top edge * of the background. */ - - return icontop + (dr != null ? dr.mDrawableHeightRight : 0) - - getHeight() - 2; + final float scale = getResources().getDisplayMetrics().density; + return icontop + (dr != null ? dr.mDrawableHeightRight : 0) - getHeight() - + (int) (2 * scale + 0.5f); } private void hideError() { diff --git a/core/res/res/drawable-hdpi/indicator_input_error.png b/core/res/res/drawable-hdpi/indicator_input_error.png index 213976c70adc2..878537649c901 100644 Binary files a/core/res/res/drawable-hdpi/indicator_input_error.png and b/core/res/res/drawable-hdpi/indicator_input_error.png differ diff --git a/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png new file mode 100644 index 0000000000000..61ea2b0fdf754 Binary files /dev/null and b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_dark.9.png differ diff --git a/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png new file mode 100644 index 0000000000000..83b2bce82588b Binary files /dev/null and b/core/res/res/drawable-hdpi/popup_inline_error_above_holo_light.9.png differ diff --git a/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png b/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png new file mode 100644 index 0000000000000..daa47b7100c46 Binary files /dev/null and b/core/res/res/drawable-hdpi/popup_inline_error_holo_dark.9.png differ diff --git a/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png b/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png new file mode 100644 index 0000000000000..6c459357edb4c Binary files /dev/null and b/core/res/res/drawable-hdpi/popup_inline_error_holo_light.9.png differ diff --git a/core/res/res/drawable-mdpi/indicator_input_error.png b/core/res/res/drawable-mdpi/indicator_input_error.png index ee60165e72840..775e41756a4bd 100755 Binary files a/core/res/res/drawable-mdpi/indicator_input_error.png and b/core/res/res/drawable-mdpi/indicator_input_error.png differ diff --git a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png index dd4af6d04d670..c03e658ab3d51 100644 Binary files a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png and b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_dark.9.png differ diff --git a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png index 892511270d3a2..19b153b3ba4ea 100644 Binary files a/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png and b/core/res/res/drawable-mdpi/popup_inline_error_above_holo_light.9.png differ diff --git a/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png b/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png index 66c2c09b52a46..4092728be2222 100755 Binary files a/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png and b/core/res/res/drawable-mdpi/popup_inline_error_holo_dark.9.png differ diff --git a/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png b/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png index c5113f2919e3e..67a2cd445dca8 100755 Binary files a/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png and b/core/res/res/drawable-mdpi/popup_inline_error_holo_light.9.png differ diff --git a/core/res/res/layout/textview_hint.xml b/core/res/res/layout/textview_hint.xml index f9c4406a0925d..b94dfc9cbfae9 100644 --- a/core/res/res/layout/textview_hint.xml +++ b/core/res/res/layout/textview_hint.xml @@ -18,5 +18,5 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceSmall" - android:textColor="@color/primary_text_light" + android:textColor="?android:attr/textColorPrimaryInverse" />