summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-06-25 00:00:31 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-06-25 00:00:31 -0700
commit2377dc999e5943edc6292561257f5186089682bc (patch)
treea144a80ef906a34eb133543a65dd3212e73daff7 /telephony
parentb3222875943efba066896c140b7cf7d58b423870 (diff)
parent6184a2ad42ee7b83f9db5a6fd9c99013a914c49e (diff)
downloadframeworks_base-2377dc999e5943edc6292561257f5186089682bc.zip
frameworks_base-2377dc999e5943edc6292561257f5186089682bc.tar.gz
frameworks_base-2377dc999e5943edc6292561257f5186089682bc.tar.bz2
am 6184a2ad: Merge change 5339 into donut
Merge commit '6184a2ad42ee7b83f9db5a6fd9c99013a914c49e' * commit '6184a2ad42ee7b83f9db5a6fd9c99013a914c49e': Fix intermittent crash related to call waiting
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java18
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java30
2 files changed, 31 insertions, 17 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index da9fd0c..ed2ea90 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -253,11 +253,7 @@ public final class CdmaCallTracker extends CallTracker {
// Always unmute when answering a new call
setMute(false);
cm.acceptCall(obtainCompleteMessage());
- } else if ((foregroundCall.connections.size() > 0) &&
- (ringingCall.getState() == CdmaCall.State.WAITING)) {
- // TODO(Moto): jsh asks, "Is this check necessary? I don't think it should be
- // possible to have no fg connection and a WAITING call, but if we should hit
- // this situation, is a CallStateExcetion appropriate?"
+ } else if (ringingCall.getState() == CdmaCall.State.WAITING) {
CdmaConnection cwConn = (CdmaConnection)(ringingCall.getLatestConnection());
// Since there is no network response for supplimentary
@@ -530,10 +526,6 @@ public final class CdmaCallTracker extends CallTracker {
CdmaConnection cn = (CdmaConnection)foregroundCall.connections.get(n);
droppedDuringPoll.add(cn);
}
- // TODO(Moto): jsh asks, "Are we sure we don't need to do this for
- // ringingCall as well? What if there's a WAITING call (ie, UI timer
- // hasn't expired, moving it to DISCONNECTED)? How/when will it
- // transition to DISCONNECTED?"
}
foregroundCall.setGeneric(false);
// Dropped connections are removed from the CallTracker
@@ -681,8 +673,12 @@ public final class CdmaCallTracker extends CallTracker {
// set the ringing call state to IDLE here to avoid a race condition
// where a new call waiting could get a hang up from an old call
// waiting ringingCall.
- // TODO(Moto): jsh asks, "Should we call conn.ondisconnect() here or Somewhere?"
- ringingCall.detach(conn);
+ //
+ // PhoneApp does the call log itself since only PhoneApp knows
+ // the hangup reason is user ignoring or timing out. So conn.onDisconnect()
+ // is not called here. Instead, conn.onLocalDisconnect() is called.
+ conn.onLocalDisconnect();
+ phone.notifyCallStateChanged();
return;
} else {
try {
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
index 588bdf0..025382d 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
@@ -452,12 +452,7 @@ public class CdmaConnection extends Connection {
this.cause = cause;
if (!disconnected) {
- index = -1;
-
- disconnectTime = System.currentTimeMillis();
- duration = SystemClock.elapsedRealtime() - connectTimeReal;
- disconnected = true;
-
+ doDisconnect();
if (Config.LOGD) Log.d(LOG_TAG,
"[CDMAConn] onDisconnect: cause=" + cause);
@@ -470,6 +465,21 @@ public class CdmaConnection extends Connection {
releaseWakeLock();
}
+ /** Called when the call waiting connection has been hung up */
+ /*package*/ void
+ onLocalDisconnect() {
+ if (!disconnected) {
+ doDisconnect();
+ if (Config.LOGD) Log.d(LOG_TAG,
+ "[CDMAConn] onLoalDisconnect" );
+
+ if (parent != null) {
+ parent.detach(this);
+ }
+ }
+ releaseWakeLock();
+ }
+
// Returns true if state has changed, false if nothing changed
/*package*/ boolean
update (DriverCall dc) {
@@ -587,6 +597,14 @@ public class CdmaConnection extends Connection {
}
private void
+ doDisconnect() {
+ index = -1;
+ disconnectTime = System.currentTimeMillis();
+ duration = SystemClock.elapsedRealtime() - connectTimeReal;
+ disconnected = true;
+ }
+
+ private void
onStartedHolding() {
holdingStartTime = SystemClock.elapsedRealtime();
}