Set disable add call during video call extra from carrier config

Bug: 29047863

Change-Id: Ic32f01c40337eccd197cc2573f5a01f81b35f3ea
diff --git a/src/java/com/android/internal/telephony/Connection.java b/src/java/com/android/internal/telephony/Connection.java
index e0b5bb8..35a0f01 100644
--- a/src/java/com/android/internal/telephony/Connection.java
+++ b/src/java/com/android/internal/telephony/Connection.java
@@ -186,6 +186,7 @@
     private Bundle mExtras;
     private int mPhoneType;
     private boolean mAnsweringDisconnectsActiveCall;
+    private boolean mAllowAddCallDuringVideoCall;
 
     protected Connection(int phoneType) {
         mPhoneType = phoneType;
@@ -758,11 +759,12 @@
      * listeners.
      */
     public void setConnectionExtras(Bundle extras) {
-        if(extras != null) {
+        if (extras != null) {
             mExtras = new Bundle(extras);
         } else {
             mExtras = null;
         }
+
         for (Listener l : mListeners) {
             l.onExtrasChanged(mExtras);
         }
@@ -773,7 +775,7 @@
      * @return the connection extras.
      */
     public Bundle getConnectionExtras() {
-        return mExtras;
+        return mExtras == null ? null : new Bundle(mExtras);
     }
 
     /**
@@ -796,6 +798,14 @@
         mAnsweringDisconnectsActiveCall = answeringDisconnectsActiveCall;
     }
 
+    public boolean shouldAllowAddCallDuringVideoCall() {
+        return mAllowAddCallDuringVideoCall;
+    }
+
+    public void setAllowAddCallDuringVideoCall(boolean allowAddCallDuringVideoCall) {
+        mAllowAddCallDuringVideoCall = allowAddCallDuringVideoCall;
+    }
+
     /**
      * Sets the call substate for the current connection and reports the changes to all listeners.
      * Valid call substates are defined in {@link android.telecom.Connection}.
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 8f96305..deeb5e5 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -137,6 +137,7 @@
                                 shouldDisconnectActiveCallOnAnswer(activeCall, imsCall);
                         conn.setActiveCallDisconnectedOnAnswer(answeringWillDisconnect);
                     }
+                    conn.setAllowAddCallDuringVideoCall(mAllowAddCallDuringVideoCall);
                     addConnection(conn);
 
                     setVideoCallProvider(conn, imsCall);
@@ -240,6 +241,12 @@
      */
     private boolean mDropVideoCallWhenAnsweringAudioCall = false;
 
+    /**
+     * Carrier configuration option which determines whether adding a call during a video call
+     * should be allowed.
+     */
+    private boolean mAllowAddCallDuringVideoCall = true;
+
     //***** Events
 
 
@@ -483,6 +490,9 @@
         mDropVideoCallWhenAnsweringAudioCall =
                 carrierConfig.getBoolean(
                         CarrierConfigManager.KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL);
+        mAllowAddCallDuringVideoCall =
+                carrierConfig.getBoolean(
+                        CarrierConfigManager.KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL);
     }
 
     private void handleEcmTimer(int action) {
@@ -557,6 +567,7 @@
             mEventLog.writeOnImsCallStart(imsCall.getSession(), callees[0]);
 
             setVideoCallProvider(conn, imsCall);
+            conn.setAllowAddCallDuringVideoCall(mAllowAddCallDuringVideoCall);
         } catch (ImsException e) {
             loge("dialInternal : " + e);
             conn.setDisconnectCause(DisconnectCause.ERROR_UNSPECIFIED);