Merge "Correcting issue where businesses with business photo URLs show a person avatar until the photo loads."
diff --git a/src/com/android/contacts/common/dialpad/DialpadView.java b/src/com/android/contacts/common/dialpad/DialpadView.java
index eefaaa4..4efa024 100644
--- a/src/com/android/contacts/common/dialpad/DialpadView.java
+++ b/src/com/android/contacts/common/dialpad/DialpadView.java
@@ -40,6 +40,7 @@
 
     private EditText mDigits;
     private ImageButton mDelete;
+    private View mOverflowMenuButton;
 
     private boolean mCanDigitsBeEdited;
 
@@ -68,6 +69,7 @@
         setupKeypad();
         mDigits = (EditText) findViewById(R.id.digits);
         mDelete = (ImageButton) findViewById(R.id.deleteButton);
+        mOverflowMenuButton = findViewById(R.id.dialpad_overflow);
     }
 
     private void setupKeypad() {
@@ -162,15 +164,15 @@
         for (int i = 0; i < mButtonIds.length; i++) {
             dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
             dialpadKey.setTranslationY(translateDistance);
+            dialpadKey.setAlpha(0);
             dialpadKey.animate()
+                    .withLayer()
                     .translationY(0)
+                    .alpha(1.0f)
                     .setInterpolator(mButtonPathInterpolator)
                     .setStartDelay(getKeyButtonAnimationDelay(mButtonIds[i]))
                     .setDuration(getKeyButtonAnimationDuration(mButtonIds[i]));
         }
-
-        setAlpha(0);
-        animate().alpha(1.0f).setDuration(KEY_FRAME_DURATION * 20);
     }
 
     public EditText getDigits() {
@@ -181,6 +183,10 @@
         return mDelete;
     }
 
+    public View getOverflowMenuButton() {
+        return mOverflowMenuButton;
+    }
+
     private int getKeyButtonAnimationDelay(int buttonId) {
         switch(buttonId) {
             case R.id.one: return KEY_FRAME_DURATION * 1;
diff --git a/src/com/android/contacts/common/dialpad/DigitsEditText.java b/src/com/android/contacts/common/dialpad/DigitsEditText.java
index b7b9aff..6f99895 100644
--- a/src/com/android/contacts/common/dialpad/DigitsEditText.java
+++ b/src/com/android/contacts/common/dialpad/DigitsEditText.java
@@ -17,17 +17,24 @@
 package com.android.contacts.common.dialpad;
 
 import android.content.Context;
+import android.graphics.Paint;
 import android.graphics.Rect;
 import android.text.InputType;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 
+import com.android.contacts.common.R;
+
 /**
  * EditText which suppresses IME show up.
  */
 public class DigitsEditText extends EditText {
+    // Only scale the text down to 66% smaller at most.
+    private static final float MIN_TEXT_RESIZE_RATIO = 0.66f;
+
     public DigitsEditText(Context context, AttributeSet attrs) {
         super(context, attrs);
         setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
@@ -55,4 +62,31 @@
         }
         return ret;
     }
+
+    @Override
+    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
+        super.onTextChanged(text, start, lengthBefore, lengthAfter);
+        resizeText(getWidth());
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        resizeText(w);
+    }
+
+    private void resizeText(int width) {
+        if (width == 0) {
+            return;
+        }
+        final Paint paint = getPaint();
+        setTextScaleX(1);
+        setScaleY(1);
+
+        float ratio = width / paint.measureText(getText().toString());
+        if (ratio <= 1.0f) {
+            setTextScaleX(Math.max(MIN_TEXT_RESIZE_RATIO, ratio));
+            setScaleY(Math.max(MIN_TEXT_RESIZE_RATIO, ratio));
+        }
+    }
 }