DTMFTwelveKeyDialerView.java revision cb51464babc6683ecf60bf69ab46697fdb65eb77
1b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/*
2b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
4b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * you may not use this file except in compliance with the License.
6b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * You may obtain a copy of the License at
7b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
8b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
10b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * See the License for the specific language governing permissions and
14b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * limitations under the License.
15b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */
16b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
17b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpackage com.android.phone;
18b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
19b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Context;
20b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.graphics.Rect;
212c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Cataniaimport android.graphics.drawable.Drawable;
22b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.AttributeSet;
23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.Log;
24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.FocusFinder;
25b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.KeyEvent;
26b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.MotionEvent;
27b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.View;
28b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.ViewConfiguration;
29b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.ViewGroup;
30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.LinearLayout;
31b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
32b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport java.util.ArrayList;
33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
342c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania/**
35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * DTMFTwelveKeyDialerView is the view logic that the DTMFDialer uses.
36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * This is really a thin wrapper around Linear Layout that intercepts
37b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * some user interactions to provide the correct UI behaviour for the
38b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * dialer.
39b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */
40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectclass DTMFTwelveKeyDialerView extends LinearLayout {
412c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
42b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final String LOG_TAG = "PHONE/DTMFTwelveKeyDialerView";
43b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final boolean DBG = false;
44b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
45b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private DTMFTwelveKeyDialer mDialer;
46cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa
472c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public DTMFTwelveKeyDialerView (Context context) {
49b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super(context);
50b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
512c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
52b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public DTMFTwelveKeyDialerView(Context context, AttributeSet attrs) {
53b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super(context, attrs);
54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
552c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
56b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    void setDialer (DTMFTwelveKeyDialer dialer) {
57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mDialer = dialer;
58b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
592c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
602c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania    /**
61b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Normally we ignore everything except for the BACK and CALL keys.
62b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * For those, we pass them to the model (and then the InCallScreen).
63b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
64b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    @Override
65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public boolean dispatchKeyEvent(KeyEvent event) {
66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (DBG) log("dispatchKeyEvent(" + event + ")...");
67b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        int keyCode = event.getKeyCode();
69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (mDialer != null) {
70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            switch (keyCode) {
71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                case KeyEvent.KEYCODE_BACK:
72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                case KeyEvent.KEYCODE_CALL:
732c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania                    return event.isDown() ? mDialer.onKeyDown(keyCode, event) :
742c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania                        mDialer.onKeyUp(keyCode, event);
75b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
76b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
77b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
78b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (DBG) log("==> dispatchKeyEvent: forwarding event to the DTMFDialer");
79b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return super.dispatchKeyEvent(event);
80b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
812c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
822c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania    /**
832b0deb7fcec5a2589a726fc412e6b9ce80584714Nicolas Catania     * Set the background of all the dialpad keys. Typically a selector to
842b0deb7fcec5a2589a726fc412e6b9ce80584714Nicolas Catania     * change the background based on some combination of the
852b0deb7fcec5a2589a726fc412e6b9ce80584714Nicolas Catania     * attributes.
862b0deb7fcec5a2589a726fc412e6b9ce80584714Nicolas Catania     * @param resid Is a resource id to be used for each button's background.
872c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania     */
882b0deb7fcec5a2589a726fc412e6b9ce80584714Nicolas Catania    public void setKeysBackgroundResource(int resid) {
89cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa        final View[] buttons = new View[] {
90cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa                findViewById(R.id.one), findViewById(R.id.two), findViewById(R.id.three),
91cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa                findViewById(R.id.four), findViewById(R.id.five), findViewById(R.id.six),
92cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa                findViewById(R.id.seven), findViewById(R.id.eight), findViewById(R.id.nine),
93cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa                findViewById(R.id.star), findViewById(R.id.zero), findViewById(R.id.pound) };
94cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa        for (View button : buttons) {
95cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa            button.setBackgroundResource(resid);
96cb51464babc6683ecf60bf69ab46697fdb65eb77Daisuke Miyakawa        }
972c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania    }
982c76ab3fb8e86f630b027aec1c4ac8e294501f1eNicolas Catania
99b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private void log(String msg) {
100b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        Log.d(LOG_TAG, msg);
101b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
102b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project}
103