diff options
Diffstat (limited to 'src/java/com/android/internal/telephony/GsmCdmaCallTracker.java')
-rwxr-xr-x | src/java/com/android/internal/telephony/GsmCdmaCallTracker.java | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java b/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java index 1ed421057..090ea30b9 100755 --- a/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java +++ b/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java @@ -88,6 +88,8 @@ public class GsmCdmaCallTracker extends CallTracker { public PhoneConstants.State mState = PhoneConstants.State.IDLE; + private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance(); + // Following member variables are for CDMA only private RegistrantList mCallWaitingRegistrants = new RegistrantList(); private boolean mPendingCallInEcm; @@ -303,6 +305,8 @@ public class GsmCdmaCallTracker extends CallTracker { mPendingMO = new GsmCdmaConnection(mPhone, checkForTestEmergencyNumber(dialString), this, mForegroundCall, isEmergencyCall); mHangupPendingMO = false; + mMetrics.writeRilDial(mPhone.getPhoneId(), mPendingMO, clirMode, uusInfo); + if ( mPendingMO.getAddress() == null || mPendingMO.getAddress().length() == 0 || mPendingMO.getAddress().indexOf(PhoneNumberUtils.WILD) >= 0) { @@ -715,7 +719,7 @@ public class GsmCdmaCallTracker extends CallTracker { } if (mState != oldState) { mPhone.notifyPhoneStateChanged(); - TelephonyMetrics.getInstance().writePhoneState(mPhone.getPhoneId(), mState); + mMetrics.writePhoneState(mPhone.getPhoneId(), mState); } } @@ -863,9 +867,6 @@ public class GsmCdmaCallTracker extends CallTracker { // Connection missing in CLCC response that we were // tracking. mDroppedDuringPoll.add(conn); - // Dropped connections are removed from the CallTracker - // list but kept in the GsmCdmaCall list - mConnections[i] = null; } else { // This case means the RIL has no more active call anymore and // we need to clean up the foregroundCall and ringingCall. @@ -892,12 +893,10 @@ public class GsmCdmaCallTracker extends CallTracker { } // If emergency call is not going through while dialing checkAndEnableDataCallAfterEmergencyCallDropped(); - - // Dropped connections are removed from the CallTracker - // list but kept in the Call list - mConnections[i] = null; - } + // Dropped connections are removed from the CallTracker + // list but kept in the Call list + mConnections[i] = null; } else if (conn != null && dc != null && !conn.compareTo(dc) && isPhoneTypeGsm()) { // Connection in CLCC response does not match what // we were tracking. Assume dropped call and new call @@ -987,6 +986,7 @@ public class GsmCdmaCallTracker extends CallTracker { // clear the "local hangup" and "missed/rejected call" // cases from the "dropped during poll" list // These cases need no "last call fail" reason + ArrayList<GsmCdmaConnection> locallyDisconnectedConnections = new ArrayList<>(); for (int i = mDroppedDuringPoll.size() - 1; i >= 0 ; i--) { GsmCdmaConnection conn = mDroppedDuringPoll.get(i); //CDMA @@ -1008,11 +1008,13 @@ public class GsmCdmaCallTracker extends CallTracker { mDroppedDuringPoll.remove(i); hasAnyCallDisconnected |= conn.onDisconnect(cause); wasDisconnected = true; + locallyDisconnectedConnections.add(conn); } else if (conn.mCause == DisconnectCause.LOCAL || conn.mCause == DisconnectCause.INVALID_NUMBER) { mDroppedDuringPoll.remove(i); hasAnyCallDisconnected |= conn.onDisconnect(conn.mCause); wasDisconnected = true; + locallyDisconnectedConnections.add(conn); } if (!isPhoneTypeGsm() && wasDisconnected && unknownConnectionAppeared @@ -1021,6 +1023,9 @@ public class GsmCdmaCallTracker extends CallTracker { newUnknownConnectionCdma = null; } } + if (locallyDisconnectedConnections.size() > 0) { + mMetrics.writeRilCallList(mPhone.getPhoneId(), locallyDisconnectedConnections); + } /* Disconnect any pending Handover connections */ for (Iterator<Connection> it = mHandoverConnections.iterator(); @@ -1033,6 +1038,7 @@ public class GsmCdmaCallTracker extends CallTracker { } else { hoConnection.onDisconnect(DisconnectCause.NOT_VALID); } + // TODO: Do we need to update these hoConnections in Metrics ? it.remove(); } @@ -1071,6 +1077,7 @@ public class GsmCdmaCallTracker extends CallTracker { if (hasNonHangupStateChanged || newRinging != null || hasAnyCallDisconnected) { mPhone.notifyPreciseCallStateChanged(); + updateMetrics(mConnections); } // If all handover connections are mapped during this poll process clean it up @@ -1083,6 +1090,14 @@ public class GsmCdmaCallTracker extends CallTracker { //dumpState(); } + private void updateMetrics(GsmCdmaConnection []connections) { + ArrayList<GsmCdmaConnection> activeConnections = new ArrayList<>(); + for(GsmCdmaConnection conn : connections) { + if(conn != null) activeConnections.add(conn); + } + mMetrics.writeRilCallList(mPhone.getPhoneId(), activeConnections); + } + private void handleRadioNotAvailable() { // handlePollCalls will clear out its // call list when it gets the CommandException @@ -1156,6 +1171,7 @@ public class GsmCdmaCallTracker extends CallTracker { return; } else { try { + mMetrics.writeRilHangup(mPhone.getPhoneId(), conn, conn.getGsmCdmaIndex()); mCi.hangupConnection (conn.getGsmCdmaIndex(), obtainCompleteMessage()); } catch (CallStateException ex) { // Ignore "connection not found" @@ -1204,6 +1220,7 @@ public class GsmCdmaCallTracker extends CallTracker { if (call == mRingingCall) { if (Phone.DEBUG_PHONE) log("(ringing) hangup waiting or background"); + logHangupEvent(call); mCi.hangupWaitingOrBackground(obtainCompleteMessage()); } else if (call == mForegroundCall) { if (call.isDialingOrAlerting()) { @@ -1217,6 +1234,7 @@ public class GsmCdmaCallTracker extends CallTracker { log("hangup all conns in active/background call, without affecting ringing call"); hangupAllConnections(call); } else { + logHangupEvent(call); hangupForegroundResumeBackground(); } } else if (call == mBackgroundCall) { @@ -1237,8 +1255,24 @@ public class GsmCdmaCallTracker extends CallTracker { mPhone.notifyPreciseCallStateChanged(); } + private void logHangupEvent(GsmCdmaCall call) { + int count = call.mConnections.size(); + for (int i = 0; i < count; i++) { + GsmCdmaConnection cn = (GsmCdmaConnection) call.mConnections.get(i); + int call_index; + try { + call_index = cn.getGsmCdmaIndex(); + } catch (CallStateException ex) { + call_index = -1; + } + mMetrics.writeRilHangup(mPhone.getPhoneId(), cn, call_index); + } + if (VDBG) Rlog.v(LOG_TAG, "logHangupEvent logged " + count + " Connections "); + } + public void hangupWaitingOrBackground() { if (Phone.DEBUG_PHONE) log("hangupWaitingOrBackground"); + logHangupEvent(mBackgroundCall); mCi.hangupWaitingOrBackground(obtainCompleteMessage()); } @@ -1253,6 +1287,7 @@ public class GsmCdmaCallTracker extends CallTracker { for (int i = 0; i < count; i++) { GsmCdmaConnection cn = (GsmCdmaConnection)call.mConnections.get(i); if (cn.getGsmCdmaIndex() == index) { + mMetrics.writeRilHangup(mPhone.getPhoneId(), cn, cn.getGsmCdmaIndex()); mCi.hangupConnection(index, obtainCompleteMessage()); return; } @@ -1266,6 +1301,7 @@ public class GsmCdmaCallTracker extends CallTracker { int count = call.mConnections.size(); for (int i = 0; i < count; i++) { GsmCdmaConnection cn = (GsmCdmaConnection)call.mConnections.get(i); + mMetrics.writeRilHangup(mPhone.getPhoneId(), cn, cn.getGsmCdmaIndex()); mCi.hangupConnection(cn.getGsmCdmaIndex(), obtainCompleteMessage()); } } catch (CallStateException ex) { @@ -1422,6 +1458,7 @@ public class GsmCdmaCallTracker extends CallTracker { updatePhoneState(); mPhone.notifyPreciseCallStateChanged(); + mMetrics.writeRilCallList(mPhone.getPhoneId(), mDroppedDuringPoll); mDroppedDuringPoll.clear(); break; |