diff options
author | Sandeep Kunta <skunta@codeaurora.org> | 2014-09-01 17:18:43 +0530 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2014-11-04 08:50:03 -0700 |
commit | dd7741709bc82da066efd184b14bdee828edfcd1 (patch) | |
tree | 1e42680b83e3275f8d22992c07c0c119c4d82eb7 /src/com/android/incallui/AnswerPresenter.java | |
parent | 2f9c69ccd4d536ab623aa646a888a6fde71f3f91 (diff) | |
download | packages_apps_InCallUI-dd7741709bc82da066efd184b14bdee828edfcd1.tar.gz packages_apps_InCallUI-dd7741709bc82da066efd184b14bdee828edfcd1.tar.bz2 packages_apps_InCallUI-dd7741709bc82da066efd184b14bdee828edfcd1.zip |
Add support for DSDA.
Add support to show calls from both subscriptions
in a tabbed view format to user. when ever user
swithces sub, inform telecomm service that subscription
is switched.
Conflicts:
src/com/android/incallui/CallButtonPresenter.java
Change-Id: I3bea71501ce159e189f75db58e710ffc94e8137c
Diffstat (limited to 'src/com/android/incallui/AnswerPresenter.java')
-rw-r--r-- | src/com/android/incallui/AnswerPresenter.java | 132 |
1 files changed, 105 insertions, 27 deletions
diff --git a/src/com/android/incallui/AnswerPresenter.java b/src/com/android/incallui/AnswerPresenter.java index d5efd00d..619e75f3 100644 --- a/src/com/android/incallui/AnswerPresenter.java +++ b/src/com/android/incallui/AnswerPresenter.java @@ -26,12 +26,13 @@ import java.util.List; * Presenter for the Incoming call widget. */ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> - implements CallList.CallUpdateListener, CallList.Listener { + implements CallList.CallUpdateListener, CallList.Listener, + CallList.ActiveSubChangeListener { private static final String TAG = AnswerPresenter.class.getSimpleName(); - private String mCallId; - private Call mCall = null; + private String mCallId[] = new String[CallList.PHONE_COUNT]; + private Call mCall[] = new Call[CallList.PHONE_COUNT]; private boolean mHasTextMessages = false; @Override @@ -40,9 +41,15 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> final CallList calls = CallList.getInstance(); Call call; - call = calls.getIncomingCall(); - if (call != null) { - processIncomingCall(call); + for (int i = 0; i < CallList.PHONE_COUNT; i++) { + long[] subId = CallList.getInstance().getSubId(i); + call = calls.getCallWithState(Call.State.INCOMING, 0, subId[0]); + if (call == null) { + call = calls.getCallWithState(Call.State.CALL_WAITING, 0, subId[0]); + } + if (call != null) { + processIncomingCall(call); + } } call = calls.getVideoUpgradeRequestCall(); if (call != null) { @@ -51,6 +58,7 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> // Listen for incoming calls. calls.addListener(this); + CallList.getInstance().addActiveSubChangeListener(this); } @Override @@ -61,9 +69,12 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> // This is necessary because the activity can be destroyed while an incoming call exists. // This happens when back button is pressed while incoming call is still being shown. - if (mCallId != null) { - CallList.getInstance().removeCallUpdateListener(mCallId, this); + for (int i = 0; i < CallList.PHONE_COUNT; i++) { + if (mCallId[i] != null) { + CallList.getInstance().removeCallUpdateListener(mCallId[i], this); + } } + CallList.getInstance().removeActiveSubChangeListener(this); } @Override @@ -78,11 +89,13 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> @Override public void onIncomingCall(Call call) { + long subId = call.getSubId(); + int phoneId = CallList.getInstance().getPhoneId(subId); // TODO: Ui is being destroyed when the fragment detaches. Need clean up step to stop // getting updates here. Log.d(this, "onIncomingCall: " + this); if (getUi() != null) { - if (!call.getId().equals(mCallId)) { + if (!call.getId().equals(mCallId[phoneId])) { // A new call is coming in. processIncomingCall(call); } @@ -90,24 +103,28 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> } private void processIncomingCall(Call call) { - mCallId = call.getId(); - mCall = call; + long subId = call.getSubId(); + int phoneId = CallList.getInstance().getPhoneId(subId); + mCallId[phoneId] = call.getId(); + mCall[phoneId] = call; // Listen for call updates for the current call. - CallList.getInstance().addCallUpdateListener(mCallId, this); + CallList.getInstance().addCallUpdateListener(mCallId[phoneId], this); - Log.d(TAG, "Showing incoming for call id: " + mCallId + " " + this); + Log.d(TAG, "Showing incoming for call id: " + mCallId[phoneId] + " " + this); final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId()); getUi().showAnswerUi(true); configureAnswerTargetsForSms(call, textMsgs); } private void processVideoUpgradeRequestCall(Call call) { - mCallId = call.getId(); - mCall = call; + long subId = call.getSubId(); + int phoneId = CallList.getInstance().getPhoneId(subId); + mCallId[phoneId] = call.getId(); + mCall[phoneId] = call; // Listen for call updates for the current call. - CallList.getInstance().addCallUpdateListener(mCallId, this); + CallList.getInstance().addCallUpdateListener(mCallId[phoneId], this); getUi().showAnswerUi(true); getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_UPGRADE_REQUEST); @@ -117,14 +134,21 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> public void onCallChanged(Call call) { Log.d(this, "onCallStateChange() " + call + " " + this); if (call.getState() != Call.State.INCOMING) { + long subId = call.getSubId(); + int phoneId = CallList.getInstance().getPhoneId(subId); // Stop listening for updates. - CallList.getInstance().removeCallUpdateListener(mCallId, this); + CallList.getInstance().removeCallUpdateListener(mCallId[phoneId], this); - getUi().showAnswerUi(false); + final Call incall = CallList.getInstance().getIncomingCall(); + if (incall != null) { + getUi().showAnswerUi(true); + } else { + getUi().showAnswerUi(false); + } // mCallId will hold the state of the call. We don't clear the mCall variable here as // it may be useful for sending text messages after phone disconnects. - mCallId = null; + mCallId[phoneId] = null; mHasTextMessages = false; } else if (!mHasTextMessages) { final List<String> textMsgs = CallList.getInstance().getTextResponses(call.getId()); @@ -134,17 +158,34 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> } } + // get active phoneId, for which call is visible to user + private int getActivePhoneId() { + int phoneId = -1; + if (CallList.getInstance().isDsdaEnabled()) { + long subId = CallList.getInstance().getActiveSubscription(); + phoneId = CallList.getInstance().getPhoneId(subId); + } else { + for (int i = 0; i < mCall.length; i++) { + if (mCall[i] != null) { + phoneId = i; + } + } + } + return phoneId; + } + public void onAnswer(int videoState, Context context) { - if (mCallId == null) { + int phoneId = getActivePhoneId(); + Log.i(this, "onAnswer mCallId:" + mCallId + "phoneId:" + phoneId); + if (mCallId == null || phoneId == -1) { return; } - Log.d(this, "onAnswer " + mCallId); - if (mCall.getSessionModificationState() + if (mCall[phoneId].getSessionModificationState() == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) { InCallPresenter.getInstance().acceptUpgradeRequest(context); } else { - TelecomAdapter.getInstance().answerCall(mCall.getId(), videoState); + TelecomAdapter.getInstance().answerCall(mCall[phoneId].getId(), videoState); } } @@ -163,8 +204,9 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> * reject since it seems to be more prevalent. */ public void onDecline() { - Log.d(this, "onDecline " + mCallId); - TelecomAdapter.getInstance().rejectCall(mCall.getId(), false, null); + int phoneId = getActivePhoneId(); + Log.i(this, "onDecline mCallId:" + mCallId + "phoneId:" + phoneId); + TelecommAdapter.getInstance().rejectCall(mCall[phoneId].getId(), false, null); } public void onText() { @@ -174,8 +216,9 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> } public void rejectCallWithMessage(String message) { - Log.d(this, "sendTextToDefaultActivity()..."); - TelecomAdapter.getInstance().rejectCall(mCall.getId(), true, message); + int phoneId = getActivePhoneId(); + Log.i(this, "sendTextToDefaultActivity()...phoneId:" + phoneId); + TelecommAdapter.getInstance().rejectCall(mCall[phoneId].getId(), true, message); onDismissDialog(); } @@ -213,4 +256,39 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi> public void configureMessageDialog(List<String> textResponses); public Context getContext(); } + + @Override + public void onActiveSubChanged(long subId) { + final CallList calls = CallList.getInstance(); + final Call call = calls.getIncomingCall(); + int phoneId = CallList.getInstance().getPhoneId(subId); + if ((call != null) && (call.getId() == mCallId[phoneId])) { + Log.i(this, "Show incoming for call id: " + mCallId[phoneId] + " " + this); + final List<String> textMsgs = CallList.getInstance().getTextResponses( + call.getId()); + getUi().showAnswerUi(true); + + boolean withSms = call.can(PhoneCapabilities.RESPOND_VIA_TEXT) && textMsgs != null; + if (call.isVideoCall(getUi().getContext())) { + if (withSms) { + getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_WITH_SMS); + getUi().configureMessageDialog(textMsgs); + } else { + getUi().showTargets(AnswerFragment.TARGET_SET_FOR_VIDEO_WITHOUT_SMS); + } + } else { + if (withSms) { + getUi().showTargets(AnswerFragment.TARGET_SET_FOR_AUDIO_WITH_SMS); + getUi().configureMessageDialog(textMsgs); + } else { + getUi().showTargets(AnswerFragment.TARGET_SET_FOR_AUDIO_WITHOUT_SMS); + } + } + } else if ((call == null) && (calls.hasAnyLiveCall(subId))) { + Log.i(this, "Hide incoming for call id: " + mCallId[phoneId] + " " + this); + getUi().showAnswerUi(false); + } else { + Log.i(this, "No incoming call present for sub = " + subId + " " + this); + } + } } |