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