aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/android/internal/telephony/GsmCdmaCallTracker.java')
-rwxr-xr-xsrc/java/com/android/internal/telephony/GsmCdmaCallTracker.java55
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;