AnswerPresenter.java revision e9c6c1ba7262093ff199df81d3e6b74dd83f1103
17df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng/* 27df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * Copyright (C) 2013 The Android Open Source Project 37df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * 47df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 57df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * you may not use this file except in compliance with the License. 67df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * You may obtain a copy of the License at 77df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * 87df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 97df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * 107df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * Unless required by applicable law or agreed to in writing, software 117df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 127df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * See the License for the specific language governing permissions and 147df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng * limitations under the License 157df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng */ 167df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng 17dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Chengpackage com.android.incallui; 18dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng 19fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Leeimport android.content.Context; 20189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee 21a064920e8e428d73dc89484ad80cd27985df96d5Yorke Leeimport com.android.dialer.util.TelecomUtil; 22189e1efe04d1073a2abd100eb33b267435951ff3Yorke Leeimport com.android.incallui.InCallPresenter.InCallState; 23f66b7ca229eccd343bdffa8591aaa4ab6395488eTyler Gunn 248bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumarimport android.telecom.VideoProfile; 25b48e2280930b5ed0b04dd34d59dc5980b379a475Sailesh Nepal 2634f735625b79f7250b72d9471fab837b90139de3Santos Cordonimport java.util.List; 2710196fd2f7cc922693e2a7c6c932725a52157943Christine Chen 28dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng/** 29189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * Presenter for the Incoming call widget. The {@link AnswerPresenter} handles the logic during 30189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * incoming calls. It is also in charge of responding to incoming calls, so there needs to be 31189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * an instance alive so that it can receive onIncomingCall callbacks. 32189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * 33189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * An instance of {@link AnswerPresenter} is created by InCallPresenter at startup, registers 34189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * for callbacks via InCallPresenter, and shows/hides the {@link AnswerFragment} via IncallActivity. 35189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee * 36dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng */ 37671b221ccadea34fb9327ef5342b26419eb5ca99Santos Cordonpublic class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> 38189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee implements CallList.CallUpdateListener, InCallPresenter.InCallUiListener, 39a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham InCallPresenter.IncomingCallListener, 40a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham CallList.Listener { 41671b221ccadea34fb9327ef5342b26419eb5ca99Santos Cordon 428b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng private static final String TAG = AnswerPresenter.class.getSimpleName(); 438b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 446af0c61c32da6cfb400168ae3b0cf9f802abfed4Sailesh Nepal private String mCallId; 45647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen private Call mCall = null; 463034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee private boolean mHasTextMessages = false; 47dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng 48150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon @Override 49189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee public void onUiShowing(boolean showing) { 50189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee if (showing) { 51189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee final CallList calls = CallList.getInstance(); 52189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee Call call; 53189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee call = calls.getIncomingCall(); 54189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee if (call != null) { 55189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee processIncomingCall(call); 56189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 57189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee call = calls.getVideoUpgradeRequestCall(); 585468d9beac7c4e9efe3dfe25a74c87ff94a0f9efPrerepa Viswanadham Log.d(this, "getVideoUpgradeRequestCall call =" + call); 59d0f2cf0c175451321f8395b57c48571d1a5c9a0fAndrew Lee if (call != null) { 60189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee processVideoUpgradeRequestCall(call); 61189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 62189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } else { 63189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee // This is necessary because the activity can be destroyed while an incoming call exists. 64189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee // This happens when back button is pressed while incoming call is still being shown. 65189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee if (mCallId != null) { 66189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee CallList.getInstance().removeCallUpdateListener(mCallId, this); 67189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 680b03b7a58d1e1432a8380c2bfc72b3a425fd6646Chiao Cheng } 690b03b7a58d1e1432a8380c2bfc72b3a425fd6646Chiao Cheng } 700b03b7a58d1e1432a8380c2bfc72b3a425fd6646Chiao Cheng 710b03b7a58d1e1432a8380c2bfc72b3a425fd6646Chiao Cheng @Override 72189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee public void onIncomingCall(InCallState oldState, InCallState newState, Call call) { 73871698737d5d9fdd878ead5399da465f0d887924Christine Chen Log.d(this, "onIncomingCall: " + this); 74e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee Call modifyCall = CallList.getInstance().getVideoUpgradeRequestCall(); 75e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee if (modifyCall != null) { 76e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee showAnswerUi(false); 77e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee Log.d(this, "declining upgrade request id: "); 78e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee CallList.getInstance().removeCallUpdateListener(mCallId, this); 79e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee InCallPresenter.getInstance().declineUpgradeRequest(getUi().getContext()); 80e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee } 81e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee if (!call.getId().equals(mCallId)) { 82e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee // A new call is coming in. 83e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee processIncomingCall(call); 848b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 858b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 868b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 87a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham @Override 88a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham public void onIncomingCall(Call call) { 89a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham } 90a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham 91a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham @Override 92a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham public void onCallListChange(CallList list) { 93a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham } 94a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham 95a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham @Override 96a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham public void onDisconnect(Call call) { 97a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham // no-op 98a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham } 99e9c6c1ba7262093ff199df81d3e6b74dd83f1103Yorke Lee 1001a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn public void onSessionModificationStateChange(int sessionModificationState) { 1011a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn boolean isUpgradePending = sessionModificationState == 1021a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST; 1031a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn 1041a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn if (!isUpgradePending) { 1051a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn // Stop listening for updates. 1061a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn CallList.getInstance().removeCallUpdateListener(mCallId, this); 1071a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn showAnswerUi(false); 1081a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn } 1091a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn } 110a45890b8f8cd7d56e2f7f756788d9855eb5b0bc4Prerepa Viswanadham 1118bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar private boolean isVideoUpgradePending(Call call) { 1128bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar return call.getSessionModificationState() 1138bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST; 1148bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1158bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1168bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar @Override 1178bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar public void onUpgradeToVideo(Call call) { 1188bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.d(this, "onUpgradeToVideo: " + this + " call=" + call); 1198bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (getUi() == null) { 1208bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.d(this, "onUpgradeToVideo ui is null"); 1218bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar return; 1228bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1238bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar boolean isUpgradePending = isVideoUpgradePending(call); 1248bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar InCallPresenter inCallPresenter = InCallPresenter.getInstance(); 1258bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (isUpgradePending 1268bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar && inCallPresenter.getInCallState() == InCallPresenter.InCallState.INCOMING) { 1278bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.d(this, "declining upgrade request"); 1288bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar //If there is incoming call reject upgrade request 1298bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar inCallPresenter.declineUpgradeRequest(getUi().getContext()); 1308bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } else if (isUpgradePending) { 1318bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.d(this, "process upgrade request as no MT call"); 1328bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar processVideoUpgradeRequestCall(call); 1338bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1348bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1358bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1368b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng private void processIncomingCall(Call call) { 137df06e232852a93d8238f3cacaab4d704de7e1216Ihab Awad mCallId = call.getId(); 138647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen mCall = call; 139bcceccb84a73f1fa045180b8e61ad6595211f721Santos Cordon 140bcceccb84a73f1fa045180b8e61ad6595211f721Santos Cordon // Listen for call updates for the current call. 141bcceccb84a73f1fa045180b8e61ad6595211f721Santos Cordon CallList.getInstance().addCallUpdateListener(mCallId, this); 142bcceccb84a73f1fa045180b8e61ad6595211f721Santos Cordon 143871698737d5d9fdd878ead5399da465f0d887924Christine Chen Log.d(TAG, "Showing incoming for call id: " + mCallId + " " + this); 144189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee if (showAnswerUi(true)) { 145189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId()); 146189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee configureAnswerTargetsForSms(call, textMsgs); 147189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 148189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 149189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee 150189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee private boolean showAnswerUi(boolean show) { 151189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee final InCallActivity activity = InCallPresenter.getInstance().getActivity(); 152189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee if (activity != null) { 153189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee activity.showAnswerFragment(show); 1546176020b6ce9e9e28d6c2ae80f13313c75615492Yorke Lee if (getUi() != null) { 1556176020b6ce9e9e28d6c2ae80f13313c75615492Yorke Lee getUi().onShowAnswerUi(show); 1566176020b6ce9e9e28d6c2ae80f13313c75615492Yorke Lee } 157189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee return true; 158189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } else { 159189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee return false; 160189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee } 1618b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1628b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 163fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee private void processVideoUpgradeRequestCall(Call call) { 1648bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.d(this, " processVideoUpgradeRequestCall call=" + call); 165fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee mCallId = call.getId(); 166fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee mCall = call; 167fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee 168fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee // Listen for call updates for the current call. 169fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee CallList.getInstance().addCallUpdateListener(mCallId, this); 170fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee 1718bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar final int currentVideoState = call.getVideoState(); 1728bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar final int modifyToVideoState = call.getModifyToVideoState(); 1738bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1748bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (currentVideoState == modifyToVideoState) { 1758bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar Log.w(this, "processVideoUpgradeRequestCall: Video states are same. Return."); 1768bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar return; 1778bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1788bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1791a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn AnswerUi ui = getUi(); 1808bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1811a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn if (ui == null) { 1821a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn Log.e(this, "Ui is null. Can't process upgrade request"); 1831a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn return; 1848bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1851a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn showAnswerUi(true); 1861a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn ui.showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_ACCEPT_REJECT_REQUEST, 1871a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn modifyToVideoState); 1888bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 1898bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar 1908bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar private boolean isEnabled(int videoState, int mask) { 1918bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar return (videoState & mask) == mask; 192fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee } 193fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee 1948b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng @Override 1957b2d519fe9e74a12d4e09aa212e6be46627674aaIhab Awad public void onCallChanged(Call call) { 196871698737d5d9fdd878ead5399da465f0d887924Christine Chen Log.d(this, "onCallStateChange() " + call + " " + this); 1973034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee if (call.getState() != Call.State.INCOMING) { 1988bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar boolean isUpgradePending = isVideoUpgradePending(call); 1998bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (!isUpgradePending) { 2008bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar // Stop listening for updates. 2018bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar CallList.getInstance().removeCallUpdateListener(mCallId, this); 2028bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 2038b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 2048bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar final Call incall = CallList.getInstance().getIncomingCall(); 2058bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (incall != null || isUpgradePending) { 2065468d9beac7c4e9efe3dfe25a74c87ff94a0f9efPrerepa Viswanadham showAnswerUi(true); 2078bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } else { 2085468d9beac7c4e9efe3dfe25a74c87ff94a0f9efPrerepa Viswanadham showAnswerUi(false); 2098bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 210647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen 2113034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee mHasTextMessages = false; 2123034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } else if (!mHasTextMessages) { 2133034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId()); 2143034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee if (textMsgs != null) { 2153034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee configureAnswerTargetsForSms(call, textMsgs); 2163034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } 217671b221ccadea34fb9327ef5342b26419eb5ca99Santos Cordon } 218671b221ccadea34fb9327ef5342b26419eb5ca99Santos Cordon } 219671b221ccadea34fb9327ef5342b26419eb5ca99Santos Cordon 220fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee public void onAnswer(int videoState, Context context) { 2216af0c61c32da6cfb400168ae3b0cf9f802abfed4Sailesh Nepal if (mCallId == null) { 222e286f91abd12dee037de19c3836d8002e450a9c9Santos Cordon return; 223e286f91abd12dee037de19c3836d8002e450a9c9Santos Cordon } 224e286f91abd12dee037de19c3836d8002e450a9c9Santos Cordon 225fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee if (mCall.getSessionModificationState() 226fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) { 2271a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn Log.d(this, "onAnswer (upgradeCall) mCallId=" + mCallId + " videoState=" + videoState); 2288bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar InCallPresenter.getInstance().acceptUpgradeRequest(videoState, context); 229fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee } else { 2301a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn Log.d(this, "onAnswer (answerCall) mCallId=" + mCallId + " videoState=" + videoState); 2316cddf46812634fadc194830774110780f14e9462Tyler Gunn TelecomAdapter.getInstance().answerCall(mCall.getId(), videoState); 232fe4982c221c8ee734afedc4d005661d9c6c1ac31Andrew Lee } 233dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng } 234dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng 235e553d43bc397e769a8ad416e3a4f9515d6da8ebaSantos Cordon /** 23612947a3d7ca33792fabf594b413c1e9a4b8235bfSantos Cordon * TODO: We are using reject and decline interchangeably. We should settle on 237e553d43bc397e769a8ad416e3a4f9515d6da8ebaSantos Cordon * reject since it seems to be more prevalent. 238e553d43bc397e769a8ad416e3a4f9515d6da8ebaSantos Cordon */ 2398bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar public void onDecline(Context context) { 2408b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng Log.d(this, "onDecline " + mCallId); 2418bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar if (mCall.getSessionModificationState() 2428bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) { 2438bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar InCallPresenter.getInstance().declineUpgradeRequest(context); 2448bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } else { 2458bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar TelecomAdapter.getInstance().rejectCall(mCall.getId(), false, null); 2468bef461247ec597f4fbbc604ee6e37fbdbc27d1eRekha Kumar } 247dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng } 248dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng 249dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng public void onText() { 25054601f653bb8cc6b37b56b8de6515a2d6aa9fbb1Christine Chen if (getUi() != null) { 251a064920e8e428d73dc89484ad80cd27985df96d5Yorke Lee TelecomUtil.silenceRinger(getUi().getContext()); 252ef1b5e0afd8e824979d1acda015eda314e61955bDavid Braun getUi().showMessageDialog(); 25354601f653bb8cc6b37b56b8de6515a2d6aa9fbb1Christine Chen } 25410196fd2f7cc922693e2a7c6c932725a52157943Christine Chen } 25510196fd2f7cc922693e2a7c6c932725a52157943Christine Chen 25610196fd2f7cc922693e2a7c6c932725a52157943Christine Chen public void rejectCallWithMessage(String message) { 2571a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng Log.d(this, "sendTextToDefaultActivity()..."); 2586cddf46812634fadc194830774110780f14e9462Tyler Gunn TelecomAdapter.getInstance().rejectCall(mCall.getId(), true, message); 259647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen 260647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen onDismissDialog(); 261647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen } 262647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen 263647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen public void onDismissDialog() { 264647462d7ca1cfaf28c76d573bd9a4e11d493a623Christine Chen InCallPresenter.getInstance().onDismissDialog(); 265dba5a7df121b4904b94e14439cca8996d843c1c9Chiao Cheng } 2667df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng 2673034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee private void configureAnswerTargetsForSms(Call call, List<String> textMsgs) { 2683034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee mHasTextMessages = textMsgs != null; 269737f56760b617688aac7218021a5e615ed750810Ihab Awad boolean withSms = 270737f56760b617688aac7218021a5e615ed750810Ihab Awad call.can(android.telecom.Call.Details.CAPABILITY_RESPOND_VIA_TEXT) 271737f56760b617688aac7218021a5e615ed750810Ihab Awad && mHasTextMessages; 272eb019fc0807fbf1aafff8afbca4e7491fc2944e7Tyler Gunn 273eb019fc0807fbf1aafff8afbca4e7491fc2944e7Tyler Gunn // Only present the user with the option to answer as a video call if the incoming call is 274eb019fc0807fbf1aafff8afbca4e7491fc2944e7Tyler Gunn // a bi-directional video call. 275f66b7ca229eccd343bdffa8591aaa4ab6395488eTyler Gunn if (VideoProfile.isBidirectional((call.getVideoState()))) { 27604746eec88c92d9130168455432db6f0cf9db04cYorke Lee if (withSms) { 2773034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_WITH_SMS); 2783034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().configureMessageDialog(textMsgs); 2793034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } else { 2803034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_WITHOUT_SMS); 2813034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } 2823034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } else { 28304746eec88c92d9130168455432db6f0cf9db04cYorke Lee if (withSms) { 2843034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().showTargets(AnswerFragment.TARGET_SET_FOR_AUDIO_WITH_SMS); 2853034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().configureMessageDialog(textMsgs); 2863034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } else { 2873034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee getUi().showTargets(AnswerFragment.TARGET_SET_FOR_AUDIO_WITHOUT_SMS); 2883034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } 2893034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } 2903034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee } 2913034f16f6b74004738ca8e85cefc3f503679f44fYorke Lee 292150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon interface AnswerUi extends Ui { 293189e1efe04d1073a2abd100eb33b267435951ff3Yorke Lee public void onShowAnswerUi(boolean shown); 294efe6a5d64851519eea0fe9d349b7b8f904193a36Andrew Lee public void showTargets(int targetSet); 2951a723f1586c812510bd0791a4ef8420d36f83cf9Tyler Gunn public void showTargets(int targetSet, int videoState); 296ef1b5e0afd8e824979d1acda015eda314e61955bDavid Braun public void showMessageDialog(); 29734f735625b79f7250b72d9471fab837b90139de3Santos Cordon public void configureMessageDialog(List<String> textResponses); 29835224e8ff0e3707b92626767f048f1bf83352a2dTyler Gunn public Context getContext(); 2997df3ac3f95c9d23396e1319beb6ca34435d965f5Chiao Cheng } 300e286f91abd12dee037de19c3836d8002e450a9c9Santos Cordon} 301