Add Support for Smart DDS switch during voice call

Change-Id: I58d7eb82c71a1485c9ee8249bec095e533dd696f
CRs-Fixed: 3059070
diff --git a/extphone/src/com/qti/extphone/ExtPhoneCallbackBase.java b/extphone/src/com/qti/extphone/ExtPhoneCallbackBase.java
index 791579c..1aebe8d 100644
--- a/extphone/src/com/qti/extphone/ExtPhoneCallbackBase.java
+++ b/extphone/src/com/qti/extphone/ExtPhoneCallbackBase.java
@@ -169,4 +169,23 @@
     @Override
     public void onImeiTypeChanged(QtiImeiInfo[] imeiInfo) throws RemoteException {
     }
+
+    public void onSendUserPreferenceForDataDuringVoiceCall(int slotId, Token token,
+            Status status) throws RemoteException {
+    }
+
+    @Override
+    public void onDdsSwitchCapabilityChange(int slotId, Token token, Status status,
+            boolean support) throws RemoteException {
+    }
+
+    @Override
+    public void onDdsSwitchCriteriaChange(int slotId, boolean telephonyDdsSwitch)
+            throws RemoteException {
+    }
+
+    @Override
+    public void onDdsSwitchRecommendation(int slotId,
+            int recommendedSlotId) throws RemoteException {
+    }
 }
diff --git a/extphone/src/com/qti/extphone/ExtTelephonyManager.java b/extphone/src/com/qti/extphone/ExtTelephonyManager.java
index 9d74c74..7df3bf5 100644
--- a/extphone/src/com/qti/extphone/ExtTelephonyManager.java
+++ b/extphone/src/com/qti/extphone/ExtTelephonyManager.java
@@ -792,6 +792,38 @@
         }
     }
 
+    public Token getDdsSwitchCapability(int slot, Client client) {
+        Token token = null;
+        if (!isServiceConnected()) {
+            Log.e(LOG_TAG, "service not connected!");
+            return token;
+        }
+        try {
+            token = mExtTelephonyService.getDdsSwitchCapability(slot, client);
+        } catch(RemoteException e) {
+            Log.e(LOG_TAG, "getDdsSwitchCapability, remote exception");
+            e.printStackTrace();
+        }
+        return token;
+    }
+
+    public Token sendUserPreferenceForDataDuringVoiceCall(int slot,
+            boolean userPreference, Client client) {
+        Token token = null;
+        if (!isServiceConnected()) {
+            Log.e(LOG_TAG, "service not connected!");
+            return token;
+        }
+        try {
+            token = mExtTelephonyService.sendUserPreferenceForDataDuringVoiceCall(slot,
+                    userPreference, client);
+        } catch(RemoteException e) {
+            Log.e(LOG_TAG, "getDdsSwitchCapability, remote exception");
+            e.printStackTrace();
+        }
+        return token;
+    }
+
     public Client registerCallback(String packageName, IExtPhoneCallback callback) {
         Client client = null;
         if (!isServiceConnected()) {
diff --git a/extphone/src/com/qti/extphone/IExtPhone.aidl b/extphone/src/com/qti/extphone/IExtPhone.aidl
index e5e901f..8e72fa2 100644
--- a/extphone/src/com/qti/extphone/IExtPhone.aidl
+++ b/extphone/src/com/qti/extphone/IExtPhone.aidl
@@ -349,4 +349,24 @@
     * Requires Permission: android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
     */
     QtiImeiInfo[] getImeiInfo();
+
+    /**
+     * Request for smart DDS switch capability supported by modem.
+     * @param - slotId slot ID
+     * @return - Integer Token can be used to compare with the response.
+     */
+    Token getDdsSwitchCapability(int slotId, in Client client);
+
+    /**
+     * Inform modem if user enabled/disabled UI preference for data during voice call.
+     * if its enabled then modem can send recommendations to switch DDS during
+     * voice call on nonDDS.
+     * @param - slotId slot ID
+     * @param - userPreference true/false based on UI preference
+     * @param - client registered with packagename to receive
+     *         callbacks.
+     * @return - Integer Token can be used to compare with the response.
+     */
+     Token sendUserPreferenceForDataDuringVoiceCall(int slotId,
+             boolean userPreference, in Client client);
 }
diff --git a/extphone/src/com/qti/extphone/IExtPhoneCallback.aidl b/extphone/src/com/qti/extphone/IExtPhoneCallback.aidl
index 5923db5..bcebb82 100644
--- a/extphone/src/com/qti/extphone/IExtPhoneCallback.aidl
+++ b/extphone/src/com/qti/extphone/IExtPhoneCallback.aidl
@@ -162,11 +162,11 @@
      */
     void getFacilityLockForAppResponse(in Status status, in int[] response);
 
-   /**
-    * Response to setSmartDdsSwitchToggle
-    * @param - token is the same token which is recived in setSmartDdsSwitchToggle
-    * @param - result SUCCESS/FAILURE based on the CnE HAL response
-    */
+    /**
+     * Response to setSmartDdsSwitchToggle
+     * @param - token is the same token which is recived in setSmartDdsSwitchToggle
+     * @param - result SUCCESS/FAILURE based on the CnE HAL response
+     */
     void setSmartDdsSwitchToggleResponse(in Token token, boolean result);
 
    /**
@@ -179,4 +179,44 @@
     * corresponds to a slot.
     */
     void onImeiTypeChanged(in QtiImeiInfo[] imeiInfo);
+
+    /**
+     * Response to sendUserPreferenceForDataDuringVoiceCall
+     * @param - slotId slot ID on whcih this callback is recevied.
+     * @param - token is the same token which is recived in
+     *          sendUserPreferenceForDataDuringVoiceCall
+     * @param - status SUCCESS/FAILURE based on RIL data module response
+     */
+    void onSendUserPreferenceForDataDuringVoiceCall(int slotId, in Token token,
+            in Status status);
+
+    /**
+     * Indicates DDS switch capability could be changed to Smart DDS
+     * Upon receiving this message, HLOS has to inform modem if user has enabled/disabled
+     * UI preference for data during voice call.
+     * @param - slotId slot ID on whcih this callback is recevied.
+     * @param - token is the same token which is recived in
+     *          getDdsSwitchCapability
+     * @param - status SUCCESS/FAILURE based on the modem Result code
+     * @param - support true/false if smart DDS switch is supported or not
+     */
+    void onDdsSwitchCapabilityChange(int slotId, in Token token, in Status status,
+            boolean support);
+
+    /**
+     * Indicates if telephony has to enable/disable its temp DDS switch logic
+     * If telephony temp DDS switch is disabled, then telephony will wait for modem recommendations
+     * in seperate indication to perform temp DDS switch.
+     * @param - slotId
+     * @param - telephonyDdsSwitch true/false based on telephony temp DDS switch
+     *          logic should be enabled/disabled.
+     */
+    void onDdsSwitchCriteriaChange(int slotId, boolean telephonyDdsSwitch);
+
+    /**
+     * Indicates modem recommendation for temp DDS switch during voice call on non-DDS.
+     * @param - slotId slot ID on whcih this callback is recevied.
+     * @param - recommendedSlotId slot ID to which DDS has to be switched.
+     */
+    void onDdsSwitchRecommendation(int slotId, int recommendedSlotId);
 }