summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Cheng Yang <chengyang@motorola.com> 2009-07-17 10:27:38 -0700
committer Wink Saville <wink@google.com> 2009-07-17 10:27:38 -0700
commit84d5585b99f08caba384c933906c0da175fce995 (patch)
treeafa67e87d0aa1f0a9d0ef96574710ed7c17fb265
parentf3ea3e09684c82016e13140d68019b968c793190 (diff)
Fix MT Call screen stuck issue.
The issue this change fixes can be reproduced by following steps: 1. Originate and connect a call to remote party #1 that is not in Contacts. 2. Receive a call from the remote party #2 that is not in Contacts, the call waiting tone is sounded and the call waiting screen is displayed. 3. Press menu key and ignore the call, and the call waiting screen is dismissed and the remote party #2 is forwarded to voice mail. When we ignore the incoming call, Phone gets stuck with incoming call screen. The fix is: 1. Update phone state promotly based on the call waiting state. 2. Remove new call handling in handlePollCalls() function because in CDMA, the call drop should be determnited by the number of calls in the call list.
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java14
1 files changed, 3 insertions, 11 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index a5f9c11a9935..cc456c5f5b19 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -262,6 +262,7 @@ public final class CdmaCallTracker extends CallTracker {
// triggered by updateParent.
cwConn.updateParent(ringingCall, foregroundCall);
cwConn.onConnectedInOrOut();
+ updatePhoneState();
switchWaitingOrHoldingAndActive();
} else {
throw new CallStateException("phone not ringing");
@@ -531,17 +532,6 @@ public final class CdmaCallTracker extends CallTracker {
// Dropped connections are removed from the CallTracker
// list but kept in the Call list
connections[i] = null;
- } else if (conn != null && dc != null && !conn.compareTo(dc)) {
- // Connection in CLCC response does not match what
- // we were tracking. Assume dropped call and new call
-
- droppedDuringPoll.add(conn);
- connections[i] = new CdmaConnection (phone.getContext(), dc, this, i);
-
- if (connections[i].getCall() == ringingCall) {
- newRinging = connections[i];
- } // else something strange happened
- hasNonHangupStateChanged = true;
} else if (conn != null && dc != null) { /* implicit conn.compareTo(dc) */
boolean changed;
changed = conn.update(dc);
@@ -679,6 +669,7 @@ public final class CdmaCallTracker extends CallTracker {
// is not called here. Instead, conn.onLocalDisconnect() is called.
conn.onLocalDisconnect();
phone.notifyPreciseCallStateChanged();
+ updatePhoneState();
return;
} else {
try {
@@ -865,6 +856,7 @@ public final class CdmaCallTracker extends CallTracker {
// Create a new CdmaConnection which attaches itself to ringingCall.
ringingCall.setGeneric(false);
new CdmaConnection(phone.getContext(), cw, this, ringingCall);
+ updatePhoneState();
// Finally notify application
notifyCallWaitingInfo(cw);