Animate dialpad in when shown.
- Provide for duration/translation of key buttons.
- Set opacity fade in on the entire dialpadfragment.
- Don't clip children on the dialpad view.
Bug: 14471388
Change-Id: I0cce5e13e0047b64e76c272a6da8e0e3ee5aca63
diff --git a/src/com/android/contacts/common/dialpad/DialpadView.java b/src/com/android/contacts/common/dialpad/DialpadView.java
index 3b87d3c..eefaaa4 100644
--- a/src/com/android/contacts/common/dialpad/DialpadView.java
+++ b/src/com/android/contacts/common/dialpad/DialpadView.java
@@ -19,8 +19,11 @@
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
+import android.view.animation.Interpolator;
+import android.view.animation.PathInterpolator;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
@@ -40,6 +43,14 @@
private boolean mCanDigitsBeEdited;
+ private final int[] mButtonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three,
+ R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star,
+ R.id.pound};
+
+ // For animation.
+ private static final int KEY_FRAME_DURATION = 33;
+ private final Interpolator mButtonPathInterpolator = new PathInterpolator(0.4f, 0, 0.2f, 1);
+
public DialpadView(Context context) {
this(context, null);
}
@@ -60,9 +71,6 @@
}
private void setupKeypad() {
- final int[] buttonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
- R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.pound};
-
final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
@@ -81,8 +89,8 @@
TextView numberView;
TextView lettersView;
- for (int i = 0; i < buttonIds.length; i++) {
- dialpadKey = (DialpadKeyButton) findViewById(buttonIds[i]);
+ for (int i = 0; i < mButtonIds.length; i++) {
+ dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
final String numberString = resources.getString(numberIds[i]);
@@ -146,6 +154,25 @@
return true;
}
+ public void animateShow() {
+ DialpadKeyButton dialpadKey;
+ final int translateDistance = getResources().getDimensionPixelSize(
+ R.dimen.dialpad_key_button_translate_y);
+
+ for (int i = 0; i < mButtonIds.length; i++) {
+ dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
+ dialpadKey.setTranslationY(translateDistance);
+ dialpadKey.animate()
+ .translationY(0)
+ .setInterpolator(mButtonPathInterpolator)
+ .setStartDelay(getKeyButtonAnimationDelay(mButtonIds[i]))
+ .setDuration(getKeyButtonAnimationDuration(mButtonIds[i]));
+ }
+
+ setAlpha(0);
+ animate().alpha(1.0f).setDuration(KEY_FRAME_DURATION * 20);
+ }
+
public EditText getDigits() {
return mDigits;
}
@@ -153,4 +180,48 @@
public ImageButton getDeleteButton() {
return mDelete;
}
+
+ private int getKeyButtonAnimationDelay(int buttonId) {
+ switch(buttonId) {
+ case R.id.one: return KEY_FRAME_DURATION * 1;
+ case R.id.two: return KEY_FRAME_DURATION * 2;
+ case R.id.three: return KEY_FRAME_DURATION * 3;
+ case R.id.four: return KEY_FRAME_DURATION * 4;
+ case R.id.five: return KEY_FRAME_DURATION * 5;
+ case R.id.six: return KEY_FRAME_DURATION * 6;
+ case R.id.seven: return KEY_FRAME_DURATION * 7;
+ case R.id.eight: return KEY_FRAME_DURATION * 8;
+ case R.id.nine: return KEY_FRAME_DURATION * 9;
+ case R.id.star: return KEY_FRAME_DURATION * 10;
+ case R.id.zero:
+ case R.id.pound:
+ return KEY_FRAME_DURATION * 11;
+ }
+
+ Log.wtf(TAG, "Attempted to get animation delay for invalid key button id.");
+ return 0;
+ }
+
+ private int getKeyButtonAnimationDuration(int buttonId) {
+ switch(buttonId) {
+ case R.id.one:
+ case R.id.two:
+ case R.id.three:
+ case R.id.four:
+ case R.id.five:
+ case R.id.six:
+ return KEY_FRAME_DURATION * 10;
+ case R.id.seven:
+ case R.id.eight:
+ case R.id.nine:
+ return KEY_FRAME_DURATION * 9;
+ case R.id.star:
+ case R.id.zero:
+ case R.id.pound:
+ return KEY_FRAME_DURATION * 8;
+ }
+
+ Log.wtf(TAG, "Attempted to get animation duration for invalid key button id.");
+ return 0;
+ }
}