summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/services/telephony/HoldAndAnswerHandler.java2
-rw-r--r--src/com/android/services/telephony/TelephonyConnection.java31
2 files changed, 32 insertions, 1 deletions
diff --git a/src/com/android/services/telephony/HoldAndAnswerHandler.java b/src/com/android/services/telephony/HoldAndAnswerHandler.java
index 94633972ac..93f17317a4 100644
--- a/src/com/android/services/telephony/HoldAndAnswerHandler.java
+++ b/src/com/android/services/telephony/HoldAndAnswerHandler.java
@@ -57,7 +57,7 @@ public class HoldAndAnswerHandler extends HoldHandlerBase {
public void accept() {
Log.i(this, "hold " + mConnToHold.getTelecomCallId() + " to answer " +
mConnToAnswer.getTelecomCallId());
- mConnToHold.onHold();
+ mConnToHold.performHoldAcrossSub();
}
private void cleanup() {
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index d1211b2cac..35abf056df 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1359,6 +1359,37 @@ abstract class TelephonyConnection extends Connection implements Holdable,
}
}
+ /**
+ * Use cases for which this API is applicable
+ * is when call to be Held and call to be Accepted are in different subs
+ * For same active + held cases, onHold() needs to be used
+ * 1 - WAITING + ACTIVE on Sub1 | INCOMING on Sub2, accept sub 2 call
+ * 2 - ACTIVE on Sub1 | INCOMING on Sub2, accept sub 2 call
+ */
+ public void performHoldAcrossSub() {
+ Log.v(this, "performHoldAcrossSub");
+ try {
+ Phone phone = mOriginalConnection.getCall().getPhone();
+ // For DSDA use cases accross sub we need to differentiate between
+ // this hold api and performHold. Call.State.WAITING is required for
+ // same sub use cases, which will make sure that hold is taken care by
+ // phonecalltracker, different sub cases will be taken care through this api
+ if (isContextBasedSwapDisabled() &&
+ phone.getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) {
+ ImsPhone imsPhone = (ImsPhone) phone;
+ imsPhone.holdActiveCallOnly();
+ }
+ } catch (CallStateException e) {
+ Log.e(this, e, "Exception occurred while trying to put call on hold.");
+ }
+ }
+
+ /**
+ * Use cases for which this API is applicable
+ * is when call to be Held and call to be accepted are on the same sub
+ * 1 - WAITING + ACTIVE on Sub1 | INCOMING on Sub2, accept sub 1 call
+ * 2 - ACTIVE + INCOMING on either sub, accept incoming call
+ */
public void performHold() {
Log.v(this, "performHold");
// TODO: Can dialing calls be put on hold as well since they take up the