Merge change 8121 into donut

* changes:
  Fixes #1818201. Do not attempt to display the popup until after the first layout.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d8ed4f0..3fab692 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -2443,7 +2443,13 @@
         }
 
         if (ss.error != null) {
-            setError(ss.error);
+            final CharSequence error = ss.error;
+            // Display the error later, after the first layout pass
+            post(new Runnable() {
+                public void run() {
+                    setError(error);
+                }
+            });
         }
     }
 
@@ -3263,7 +3269,9 @@
             final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint,
                     null);
 
-            mPopup = new ErrorPopup(err, 200, 50);
+            final float scale = getResources().getDisplayMetrics().density;
+            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.
@@ -3317,11 +3325,12 @@
          * The "25" is the distance between the point and the right edge
          * of the background
          */
+        final float scale = getResources().getDisplayMetrics().density;
 
         final Drawables dr = mDrawables;
         return getWidth() - mPopup.getWidth()
                 - getPaddingRight()
-                - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + 25;
+                - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f);
     }
 
     /**