Call setFeatureValue() even if turning off IMS.
Amit Mahajan [Sat, 13 Aug 2016 00:08:23 +0000 (00:08 +0000)]
am: 9cba36d1c6

Change-Id: I9cc91770bbf5239aee86e97e9b31f7c2784ab7a0

src/java/com/android/ims/ImsCall.java

index 266245d..7461458 100644 (file)
@@ -562,6 +562,15 @@ public class ImsCall implements ICall {
     private ImsCallSessionListenerProxy mImsCallSessionListenerProxy;
 
     /**
+     * When calling {@link #terminate(int, int)}, an override for the termination reason which the
+     * modem returns.
+     *
+     * Necessary because passing in an unexpected {@link ImsReasonInfo} reason code to
+     * {@link #terminate(int)} will cause the modem to ignore the terminate request.
+     */
+    private int mOverrideReason = ImsReasonInfo.CODE_UNSPECIFIED;
+
+    /**
      * Create an IMS call object.
      *
      * @param context the context for accessing system services
@@ -1145,6 +1154,12 @@ public class ImsCall implements ICall {
         }
     }
 
+    public void terminate(int reason, int overrideReason) throws ImsException {
+        logi("terminate :: reason=" + reason + " ; overrideReadon=" + overrideReason);
+        mOverrideReason = overrideReason;
+        terminate(reason);
+    }
+
     /**
      * Terminates an IMS call (e.g. user initiated).
      *
@@ -2207,6 +2222,12 @@ public class ImsCall implements ICall {
                 return;
             }
 
+            if (mOverrideReason != ImsReasonInfo.CODE_UNSPECIFIED) {
+                logi("callSessionTerminated :: overrideReasonInfo=" + mOverrideReason);
+                reasonInfo = new ImsReasonInfo(mOverrideReason, reasonInfo.getExtraCode(),
+                        reasonInfo.getExtraMessage());
+            }
+
             // Process the termination first.  If we are in the midst of establishing a conference
             // call, we may bury this callback until we are done.  If there so no conference
             // call, the code after this function will be a NOOP.