113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati/*
213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * Copyright (C) 2014 The Android Open Source Project
313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati *
413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * Licensed under the Apache License, Version 2.0 (the "License");
513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * you may not use this file except in compliance with the License.
613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * You may obtain a copy of the License at
713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati *
813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati *      http://www.apache.org/licenses/LICENSE-2.0
913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati *
1013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * Unless required by applicable law or agreed to in writing, software
1113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * distributed under the License is distributed on an "AS IS" BASIS,
1213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * See the License for the specific language governing permissions and
1413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * limitations under the License.
1513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati */
1613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
1713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatipackage com.android.phone.common.dialpad;
1813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
1913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.animation.AnimatorListenerAdapter;
2013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.content.Context;
2113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.content.res.ColorStateList;
22e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunnimport android.content.res.Configuration;
2313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.content.res.Resources;
2413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.content.res.TypedArray;
2513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.graphics.drawable.RippleDrawable;
26e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunnimport android.text.TextUtils;
2713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.util.AttributeSet;
2813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.util.Log;
2913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.view.MotionEvent;
3013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.view.View;
31972e8730b305c921e094690ae09abf2c44b0dc12Evan Charltonimport android.view.ViewGroup;
32e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunnimport android.view.ViewPropertyAnimator;
33690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awadimport android.view.accessibility.AccessibilityManager;
3413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.widget.EditText;
3513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.widget.ImageButton;
3613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.widget.LinearLayout;
3713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport android.widget.TextView;
3813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
3913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport com.android.phone.common.R;
4013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatiimport com.android.phone.common.animation.AnimUtils;
4113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
42e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunnimport java.util.Locale;
43e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn
4413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati/**
4513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati * View that displays a twelve-key phone dialpad.
4613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati */
4713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapatipublic class DialpadView extends LinearLayout {
4813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private static final String TAG = DialpadView.class.getSimpleName();
4913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
5013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private static final double DELAY_MULTIPLIER = 0.66;
5113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private static final double DURATION_MULTIPLIER = 0.8;
5213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
53e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    /**
54e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * {@code True} if the dialpad is in landscape orientation.
55e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     */
56e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    private final boolean mIsLandscape;
57e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn
58e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    /**
59e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * {@code True} if the dialpad is showing in a right-to-left locale.
60e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     */
61e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    private final boolean mIsRtl;
62e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn
6313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private EditText mDigits;
6413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private ImageButton mDelete;
6513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private View mOverflowMenuButton;
6613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private ColorStateList mRippleColor;
6713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
68972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton    private ViewGroup mRateContainer;
69972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton    private TextView mIldCountry;
70972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton    private TextView mIldRate;
71972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton
7213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private boolean mCanDigitsBeEdited;
7313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
7413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private final int[] mButtonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three,
7513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star,
7613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            R.id.pound};
7713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
7813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    // For animation.
7913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private static final int KEY_FRAME_DURATION = 33;
8013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
8113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private int mTranslateDistance;
8213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
8313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public DialpadView(Context context) {
8413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        this(context, null);
8513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
8613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
8713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public DialpadView(Context context, AttributeSet attrs) {
8813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        this(context, attrs, 0);
8913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
9013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
9113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public DialpadView(Context context, AttributeSet attrs, int defStyle) {
9213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        super(context, attrs, defStyle);
9313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
9413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Dialpad);
9513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mRippleColor = a.getColorStateList(R.styleable.Dialpad_dialpad_key_button_touch_tint);
9613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        a.recycle();
9713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
9813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mTranslateDistance = getResources().getDimensionPixelSize(
9913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.dimen.dialpad_key_button_translate_y);
100e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn
101e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        mIsLandscape = getResources().getConfiguration().orientation ==
102e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                Configuration.ORIENTATION_LANDSCAPE;
103e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        mIsRtl = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) ==
104e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                View.LAYOUT_DIRECTION_RTL;
10513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
10613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
10713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    @Override
10813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    protected void onFinishInflate() {
10913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        setupKeypad();
11013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mDigits = (EditText) findViewById(R.id.digits);
11113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mDelete = (ImageButton) findViewById(R.id.deleteButton);
11213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mOverflowMenuButton = findViewById(R.id.dialpad_overflow);
113972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mRateContainer = (ViewGroup) findViewById(R.id.rate_container);
114972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mIldCountry = (TextView) mRateContainer.findViewById(R.id.ild_country);
115972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mIldRate = (TextView) mRateContainer.findViewById(R.id.ild_rate);
116690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad
117690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad        AccessibilityManager accessibilityManager = (AccessibilityManager)
118690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad                getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
119690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad        if (accessibilityManager.isEnabled()) {
120690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad            // The text view must be selected to send accessibility events.
121690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad            mDigits.setSelected(true);
122690b2c6971c6c8a8ef447a15b24d8dd1506f2d0bIhab Awad        }
12313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
12413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
12513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private void setupKeypad() {
12613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
12713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
12813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
12913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
13013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_pound_number};
13113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
13213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
13313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
13413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
13513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_8_letters, R.string.dialpad_9_letters,
13613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
13713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
13813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final Resources resources = getContext().getResources();
13913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
14013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        DialpadKeyButton dialpadKey;
14113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        TextView numberView;
14213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        TextView lettersView;
14313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
14413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        for (int i = 0; i < mButtonIds.length; i++) {
14513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
14613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
14713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
14813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            final String numberString = resources.getString(numberIds[i]);
14913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            final RippleDrawable rippleBackground =
150fe91e00f6b5720db70e276d8d99482a3abc662e2Yorke Lee                    (RippleDrawable) getContext().getDrawable(R.drawable.btn_dialpad_key);
15113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            if (mRippleColor != null) {
15213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                rippleBackground.setColor(mRippleColor);
15313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            }
15413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
15513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            numberView.setText(numberString);
15613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            numberView.setElegantTextHeight(false);
15713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            dialpadKey.setContentDescription(numberString);
15813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            dialpadKey.setBackground(rippleBackground);
15913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
16013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            if (lettersView != null) {
16113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                lettersView.setText(resources.getString(letterIds[i]));
16213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            }
16313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        }
16413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
16513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final DialpadKeyButton one = (DialpadKeyButton) findViewById(R.id.one);
16613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        one.setLongHoverContentDescription(
16713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                resources.getText(R.string.description_voicemail_button));
16813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
16913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final DialpadKeyButton zero = (DialpadKeyButton) findViewById(R.id.zero);
17013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        zero.setLongHoverContentDescription(
17113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                resources.getText(R.string.description_image_button_plus));
17213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
17313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
17413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
17513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public void setShowVoicemailButton(boolean show) {
17613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        View view = findViewById(R.id.dialpad_key_voicemail);
17713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        if (view != null) {
17813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            view.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
17913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        }
18013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
18113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
18213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    /**
18313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     * Whether or not the digits above the dialer can be edited.
18413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     *
18513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     * @param canBeEdited If true, the backspace button will be shown and the digits EditText
18613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     *         will be configured to allow text manipulation.
18713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     */
18813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public void setCanDigitsBeEdited(boolean canBeEdited) {
18913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        View deleteButton = findViewById(R.id.deleteButton);
19013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        deleteButton.setVisibility(canBeEdited ? View.VISIBLE : View.GONE);
19113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        View overflowMenuButton = findViewById(R.id.dialpad_overflow);
19213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        overflowMenuButton.setVisibility(canBeEdited ? View.VISIBLE : View.GONE);
19313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
19413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        EditText digits = (EditText) findViewById(R.id.digits);
19513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        digits.setClickable(canBeEdited);
19613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        digits.setLongClickable(canBeEdited);
19713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        digits.setFocusableInTouchMode(canBeEdited);
19813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        digits.setCursorVisible(false);
19913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
20013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        mCanDigitsBeEdited = canBeEdited;
20113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
20213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
203972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton    public void setCallRateInformation(String countryName, String displayRate) {
204972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        if (TextUtils.isEmpty(countryName) && TextUtils.isEmpty(displayRate)) {
205972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton            mRateContainer.setVisibility(View.GONE);
206972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton            return;
207972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        }
208972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mRateContainer.setVisibility(View.VISIBLE);
209972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mIldCountry.setText(countryName);
210972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton        mIldRate.setText(displayRate);
211972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton    }
212972e8730b305c921e094690ae09abf2c44b0dc12Evan Charlton
21313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public boolean canDigitsBeEdited() {
21413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return mCanDigitsBeEdited;
21513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
21613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
21713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    /**
21813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     * Always returns true for onHoverEvent callbacks, to fix problems with accessibility due to
21913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     * the dialpad overlaying other fragments.
22013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati     */
22113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    @Override
22213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public boolean onHoverEvent(MotionEvent event) {
22313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return true;
22413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
22513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
22613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public void animateShow() {
22713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        // This is a hack; without this, the setTranslationY is delayed in being applied, and the
22813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        // numbers appear at their original position (0) momentarily before animating.
22913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        final AnimatorListenerAdapter showListener = new AnimatorListenerAdapter() {};
23013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
23113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        for (int i = 0; i < mButtonIds.length; i++) {
23213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            int delay = (int)(getKeyButtonAnimationDelay(mButtonIds[i]) * DELAY_MULTIPLIER);
23313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            int duration =
23413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                    (int)(getKeyButtonAnimationDuration(mButtonIds[i]) * DURATION_MULTIPLIER);
23513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati            final DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
23613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
237e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            ViewPropertyAnimator animator = dialpadKey.animate();
238e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            if (mIsLandscape) {
239e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                // Landscape orientation requires translation along the X axis.
240e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                // For RTL locales, ensure we translate negative on the X axis.
241e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                dialpadKey.setTranslationX((mIsRtl ? -1 : 1) * mTranslateDistance);
242e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                animator.translationX(0);
243e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            } else {
244e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                // Portrait orientation requires translation along the Y axis.
245e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                dialpadKey.setTranslationY(mTranslateDistance);
246e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                animator.translationY(0);
247e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            }
248e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            animator.setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
24913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                    .setStartDelay(delay)
25013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                    .setDuration(duration)
25113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                    .setListener(showListener)
25213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati                    .start();
25313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        }
25413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
25513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
25613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public EditText getDigits() {
25713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return mDigits;
25813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
25913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
26013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public ImageButton getDeleteButton() {
26113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return mDelete;
26213b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
26313b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
26413b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    public View getOverflowMenuButton() {
26513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return mOverflowMenuButton;
26613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
26713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
268e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    /**
269e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * Get the animation delay for the buttons, taking into account whether the dialpad is in
270e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * landscape left-to-right, landscape right-to-left, or portrait.
271e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     *
272e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * @param buttonId The button ID.
273e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * @return The animation delay.
274e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     */
27513b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private int getKeyButtonAnimationDelay(int buttonId) {
276e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        if (mIsLandscape) {
277e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            if (mIsRtl) {
278e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                switch (buttonId) {
279e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.three: return KEY_FRAME_DURATION * 1;
280e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.six: return KEY_FRAME_DURATION * 2;
281e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.nine: return KEY_FRAME_DURATION * 3;
282e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.pound: return KEY_FRAME_DURATION * 4;
283e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.two: return KEY_FRAME_DURATION * 5;
284e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.five: return KEY_FRAME_DURATION * 6;
285e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.eight: return KEY_FRAME_DURATION * 7;
286e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.zero: return KEY_FRAME_DURATION * 8;
287e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.one: return KEY_FRAME_DURATION * 9;
288e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.four: return KEY_FRAME_DURATION * 10;
289e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.seven:
290e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.star:
291e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 11;
292e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                }
293e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            } else {
294e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                switch (buttonId) {
295e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.one: return KEY_FRAME_DURATION * 1;
296e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.four: return KEY_FRAME_DURATION * 2;
297e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.seven: return KEY_FRAME_DURATION * 3;
298e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.star: return KEY_FRAME_DURATION * 4;
299e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.two: return KEY_FRAME_DURATION * 5;
300e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.five: return KEY_FRAME_DURATION * 6;
301e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.eight: return KEY_FRAME_DURATION * 7;
302e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.zero: return KEY_FRAME_DURATION * 8;
303e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.three: return KEY_FRAME_DURATION * 9;
304e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.six: return KEY_FRAME_DURATION * 10;
305e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.nine:
306e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.pound:
307e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 11;
308e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                }
309e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            }
310e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        } else {
311e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            switch (buttonId) {
312e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.one: return KEY_FRAME_DURATION * 1;
313e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.two: return KEY_FRAME_DURATION * 2;
314e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.three: return KEY_FRAME_DURATION * 3;
315e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.four: return KEY_FRAME_DURATION * 4;
316e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.five: return KEY_FRAME_DURATION * 5;
317e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.six: return KEY_FRAME_DURATION * 6;
318e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.seven: return KEY_FRAME_DURATION * 7;
319e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.eight: return KEY_FRAME_DURATION * 8;
320e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.nine: return KEY_FRAME_DURATION * 9;
321e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.star: return KEY_FRAME_DURATION * 10;
322e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.zero:
323e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.pound:
324e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    return KEY_FRAME_DURATION * 11;
325e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            }
32613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        }
32713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
32813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        Log.wtf(TAG, "Attempted to get animation delay for invalid key button id.");
32913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return 0;
33013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
33113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
332e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn    /**
333e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * Get the button animation duration, taking into account whether the dialpad is in landscape
334e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * left-to-right, landscape right-to-left, or portrait.
335e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     *
336e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * @param buttonId The button ID.
337e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     * @return The animation duration.
338e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn     */
33913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    private int getKeyButtonAnimationDuration(int buttonId) {
340e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        if (mIsLandscape) {
341e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            if (mIsRtl) {
342e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                switch (buttonId) {
343e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.one:
344e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.four:
345e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.seven:
346e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.star:
347e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 8;
348e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.two:
349e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.five:
350e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.eight:
351e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.zero:
352e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 9;
353e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.three:
354e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.six:
355e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.nine:
356e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.pound:
357e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 10;
358e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                }
359e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            } else {
360e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                switch (buttonId) {
361e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.one:
362e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.four:
363e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.seven:
364e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.star:
365e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 10;
366e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.two:
367e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.five:
368e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.eight:
369e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.zero:
370e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 9;
371e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.three:
372e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.six:
373e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.nine:
374e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    case R.id.pound:
375e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                        return KEY_FRAME_DURATION * 8;
376e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                }
377e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            }
378e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn        } else {
379e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            switch (buttonId) {
380e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.one:
381e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.two:
382e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.three:
383e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.four:
384e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.five:
385e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.six:
386e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    return KEY_FRAME_DURATION * 10;
387e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.seven:
388e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.eight:
389e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.nine:
390e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    return KEY_FRAME_DURATION * 9;
391e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.star:
392e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.zero:
393e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                case R.id.pound:
394e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn                    return KEY_FRAME_DURATION * 8;
395e8efa9a75c79e9a34b7ad4148b4338e4db74665eTyler Gunn            }
39613b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        }
39713b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati
39813b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        Log.wtf(TAG, "Attempted to get animation duration for invalid key button id.");
39913b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati        return 0;
40013b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati    }
40113b8948c0cc543f62a68fa32c4692ba16a2e93c6Sai Cheemalapati}
402