15b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen/*
25b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * Copyright (C) 2013 The Android Open Source Project
35b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen *
45b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * Licensed under the Apache License, Version 2.0 (the "License");
55b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * you may not use this file except in compliance with the License.
65b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * You may obtain a copy of the License at
75b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen *
85b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen *      http://www.apache.org/licenses/LICENSE-2.0
95b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen *
105b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * Unless required by applicable law or agreed to in writing, software
115b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * distributed under the License is distributed on an "AS IS" BASIS,
125b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * See the License for the specific language governing permissions and
145b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * limitations under the License
155b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen */
165b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
175b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chenpackage com.android.incallui;
185b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
195b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chenimport android.telephony.PhoneNumberUtils;
205b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
215b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen/**
225b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen * Logic for call buttons.
235b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen */
245b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chenpublic class DialpadPresenter extends Presenter<DialpadPresenter.DialpadUi>
255b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        implements InCallPresenter.InCallStateListener {
265b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
27af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad    private Call mCall;
28af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad
295b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    @Override
305b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    public void onUiReady(DialpadUi ui) {
315b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        super.onUiReady(ui);
32ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal        InCallPresenter.getInstance().addListener(this);
338c24233d5532c5576091c4097cd4cf91ccf57586Yorke Lee        mCall = CallList.getInstance().getOutgoingOrActive();
345b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    }
355b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
365b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    @Override
37ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal    public void onUiUnready(DialpadUi ui) {
38ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal        super.onUiUnready(ui);
39ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal        InCallPresenter.getInstance().removeListener(this);
40ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal    }
41ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal
42ead9566e8836bae422b3e06c19e196bc0131a077Sailesh Nepal    @Override
43f3d0654f2b6d77b7eef8bdcb4c39ee59e55017deNancy Chen    public void onStateChange(InCallPresenter.InCallState oldState,
44f3d0654f2b6d77b7eef8bdcb4c39ee59e55017deNancy Chen            InCallPresenter.InCallState newState, CallList callList) {
458c24233d5532c5576091c4097cd4cf91ccf57586Yorke Lee        mCall = callList.getOutgoingOrActive();
46af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad        Log.d(this, "DialpadPresenter mCall = " + mCall);
475b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    }
485b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
495b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    /**
505b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     * Processes the specified digit as a DTMF key, by playing the
515b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     * appropriate DTMF tone, and appending the digit to the EditText
525b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     * field that displays the DTMF digits sent so far.
535b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     *
545b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     */
555b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    public final void processDtmf(char c) {
561a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng        Log.d(this, "Processing dtmf key " + c);
575b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        // if it is a valid key, then update the display and send the dtmf tone.
58af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad        if (PhoneNumberUtils.is12Key(c) && mCall != null) {
59fc22ba88566ef70e202128335231c367de6c52afSailesh Nepal            Log.d(this, "updating display and sending dtmf tone for '" + c + "'");
60fc22ba88566ef70e202128335231c367de6c52afSailesh Nepal
61fc22ba88566ef70e202128335231c367de6c52afSailesh Nepal            // Append this key to the "digits" widget.
62fc22ba88566ef70e202128335231c367de6c52afSailesh Nepal            getUi().appendDigitsToField(c);
63fc22ba88566ef70e202128335231c367de6c52afSailesh Nepal            // Plays the tone through Telecomm.
646cddf46812634fadc194830774110780f14e9462Tyler Gunn            TelecomAdapter.getInstance().playDtmfTone(mCall.getId(), c);
655b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        } else {
661a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng            Log.d(this, "ignoring dtmf request for '" + c + "'");
675b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        }
685b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    }
695b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
705b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    /**
715b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     * Stops the local tone based on the phone type.
725b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen     */
7357d98887da3799f2c88877cde3234c3069c7d9ffSantos Cordon    public void stopDtmf() {
74af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad        if (mCall != null) {
75af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad            Log.d(this, "stopping remote tone");
766cddf46812634fadc194830774110780f14e9462Tyler Gunn            TelecomAdapter.getInstance().stopDtmfTone(mCall.getId());
77af680f72473efbcd0acd125dc5a3dc434cf94f9dIhab Awad        }
785b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    }
795b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen
805b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    public interface DialpadUi extends Ui {
815b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        void setVisible(boolean on);
825b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen        void appendDigitsToField(char digit);
835b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen    }
845b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen}
85