Merge "TeleService: Reset the duration after the CDMA call is accepted" am: 34401800a1 am: 6392a72771
am: b4b0905f4d

Change-Id: Iacca0fa8a35d727ed1809d4cd1ad60ddda803632
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index 4c869a9..19c750b 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -40,6 +40,7 @@
 
     private static final int MSG_CALL_WAITING_MISSED = 1;
     private static final int MSG_DTMF_SEND_CONFIRMATION = 2;
+    private static final int MSG_CDMA_LINE_CONTROL_INFO_REC = 3;
     private static final int TIMEOUT_CALL_WAITING_MILLIS = 20 * 1000;
 
     private final Handler mHandler = new Handler() {
@@ -54,6 +55,9 @@
                 case MSG_DTMF_SEND_CONFIRMATION:
                     handleBurstDtmfConfirmation();
                     break;
+                case MSG_CDMA_LINE_CONTROL_INFO_REC:
+                    handleCdmaConnectionTimeReset();
+                    break;
                 default:
                     break;
             }
@@ -72,6 +76,7 @@
     // Indicates that the DTMF confirmation from telephony is pending.
     private boolean mDtmfBurstConfirmationPending = false;
     private boolean mIsCallWaiting;
+    private boolean mIsConnectionTimeReset = false;
 
     CdmaConnection(
             Connection connection,
@@ -299,4 +304,33 @@
         mAllowMute = true;
         super.handleExitedEcmMode();
     }
+
+    private void handleCdmaConnectionTimeReset() {
+        boolean isImsCall = getOriginalConnection() instanceof ImsPhoneConnection;
+        if (!isImsCall && !mIsConnectionTimeReset && mIsOutgoing
+                && getOriginalConnection() != null
+                && getOriginalConnection().getState() == Call.State.ACTIVE
+                && getOriginalConnection().getDurationMillis() > 0) {
+            mIsConnectionTimeReset = true;
+            getOriginalConnection().resetConnectionTime();
+            resetConnectionTime();
+        }
+    }
+
+    @Override
+    void setOriginalConnection(com.android.internal.telephony.Connection originalConnection) {
+        super.setOriginalConnection(originalConnection);
+        if (getPhone() != null) {
+            getPhone().registerForLineControlInfo(mHandler, MSG_CDMA_LINE_CONTROL_INFO_REC, null);
+        }
+    }
+
+    @Override
+    protected void close() {
+        mIsConnectionTimeReset = false;
+        if (getPhone() != null) {
+            getPhone().unregisterForLineControlInfo(mHandler);
+        }
+        super.close();
+    }
 }
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index e7a4d1c..c7fc428 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1676,7 +1676,7 @@
         setActive();
     }
 
-    private void close() {
+    protected void close() {
         Log.v(this, "close");
         clearOriginalConnection();
         destroy();