Merge "advance panel touch feedback color" into lmp-preview-dev
diff --git a/res/values/styles.xml b/res/values/styles.xml
index a4f6dcf..06f2b8a 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -18,6 +18,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 
     <style name="CalculatorTheme" parent="@android:style/Theme.Material.Light.NoActionBar">
+        <item name="android:colorPrimary">@color/calculator_accent_color</item>
         <item name="android:navigationBarColor">@android:color/black</item>
         <item name="android:statusBarColor">@color/calculator_accent_color</item>
         <item name="android:windowContentOverlay">@null</item>
diff --git a/src/com/android/calculator2/CalculatorActivity.java b/src/com/android/calculator2/CalculatorActivity.java
index a9837b7..cace369 100644
--- a/src/com/android/calculator2/CalculatorActivity.java
+++ b/src/com/android/calculator2/CalculatorActivity.java
@@ -35,9 +35,13 @@
 import android.view.View.OnLongClickListener;
 import android.view.animation.AccelerateDecelerateInterpolator;
 import android.widget.Button;
+import android.widget.TextView;
+
+import com.android.calculator2.CalculatorEditText.OnTextSizeChangeListener;
+import com.android.calculator2.CalculatorExpressionEvaluator.EvaluateCallback;
 
 public class CalculatorActivity extends Activity
-        implements CalculatorExpressionEvaluator.EvaluateCallback, OnLongClickListener {
+        implements OnTextSizeChangeListener, EvaluateCallback, OnLongClickListener {
 
     public static final String CALCULATOR_ACTIVITY_CURRENT_STATE =
             CalculatorActivity.class.getSimpleName() + "_currentState";
@@ -95,6 +99,8 @@
 
         mFormulaEditText.setEditableFactory(new CalculatorExpressionBuilder.Factory(this));
         mFormulaEditText.addTextChangedListener(mFormulaTextWatcher);
+        mFormulaEditText.setOnTextSizeChangeListener(this);
+
         mDeleteButton.setOnLongClickListener(this);
     }
 
@@ -217,6 +223,32 @@
         }
     }
 
+    @Override
+    public void onTextSizeChanged(final TextView textView, float oldSize) {
+        if (mCurrentState != CalculatorState.INPUT) {
+            // Only animate text changes that occur from user input.
+            return;
+        }
+
+        // Calculate the values needed to perform the scale and translation animations,
+        // maintaining the same apparent baseline for the displayed text.
+        final float textScale = oldSize / textView.getTextSize();
+        final float translationX = (1.0f - textScale) *
+                (textView.getWidth() / 2.0f - textView.getPaddingEnd());
+        final float translationY = (1.0f - textScale) *
+                (textView.getHeight() / 2.0f - textView.getPaddingBottom());
+
+        final AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.playTogether(
+                ObjectAnimator.ofFloat(textView, View.SCALE_X, textScale, 1.0f),
+                ObjectAnimator.ofFloat(textView, View.SCALE_Y, textScale, 1.0f),
+                ObjectAnimator.ofFloat(textView, View.TRANSLATION_X, translationX, 0.0f),
+                ObjectAnimator.ofFloat(textView, View.TRANSLATION_Y, translationY, 0.0f));
+        animatorSet.setDuration(getResources().getInteger(android.R.integer.config_shortAnimTime));
+        animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
+        animatorSet.start();
+    }
+
     private void onClear(View sourceView) {
         final int[] clearLocation = new int[2];
         sourceView.getLocationInWindow(clearLocation);
diff --git a/src/com/android/calculator2/CalculatorEditText.java b/src/com/android/calculator2/CalculatorEditText.java
index e31d571..63a5ae5 100644
--- a/src/com/android/calculator2/CalculatorEditText.java
+++ b/src/com/android/calculator2/CalculatorEditText.java
@@ -30,6 +30,7 @@
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.widget.EditText;
+import android.widget.TextView;
 
 public class CalculatorEditText extends EditText {
 
@@ -60,6 +61,7 @@
     private final float mStepTextSize;
 
     private int mWidthConstraint = -1;
+    private OnTextSizeChangeListener mOnTextSizeChangeListener;
 
     public CalculatorEditText(Context context) {
         this(context, null);
@@ -126,6 +128,20 @@
         setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(text.toString()));
     }
 
+    @Override
+    public void setTextSize(int unit, float size) {
+        final float oldTextSize = getTextSize();
+        super.setTextSize(unit, size);
+
+        if (mOnTextSizeChangeListener != null && getTextSize() != oldTextSize) {
+            mOnTextSizeChangeListener.onTextSizeChanged(this, oldTextSize);
+        }
+    }
+
+    public void setOnTextSizeChangeListener(OnTextSizeChangeListener listener) {
+        mOnTextSizeChangeListener = listener;
+    }
+
     public float getVariableTextSize(String text) {
         if (mWidthConstraint < 0 || mMaximumTextSize <= mMinimumTextSize) {
             // Not measured, bail early.
@@ -167,4 +183,8 @@
         final FontMetricsInt fontMetrics = getPaint().getFontMetricsInt();
         return super.getCompoundPaddingBottom() - Math.min(getPaddingBottom(), fontMetrics.descent);
     }
+
+    public interface OnTextSizeChangeListener {
+        void onTextSizeChanged(TextView textView, float oldSize);
+    }
 }