From 82c08459789e139aa94e8484e3e105b4f54f22a4 Mon Sep 17 00:00:00 2001 From: Wink Saville Date: Tue, 9 Mar 2010 10:21:32 -0800 Subject: [PATCH] Make sure that pause dialing works even when screen is off. bug: 2200086 Change-Id: Ib8c73ce4bca293811ba681c558c37322125c511f --- .../telephony/cdma/CdmaConnection.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java index 08946d2493566..188145b33fcbb 100755 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java @@ -592,8 +592,11 @@ public class CdmaConnection extends Connection { if (!isIncoming) { // outgoing calls only processNextPostDialChar(); + } else { + // Only release wake lock for incoming calls, for outgoing calls the wake lock + // will be released after any pause-dial is completed + releaseWakeLock(); } - releaseWakeLock(); } private void @@ -688,6 +691,7 @@ public class CdmaConnection extends Connection { Registrant postDialHandler; if (postDialState == PostDialState.CANCELLED) { + releaseWakeLock(); //Log.v("CDMA", "##### processNextPostDialChar: postDialState == CANCELLED, bail"); return; } @@ -696,6 +700,9 @@ public class CdmaConnection extends Connection { postDialString.length() <= nextPostDialChar) { setPostDialState(PostDialState.COMPLETE); + // We were holding a wake lock until pause-dial was complete, so give it up now + releaseWakeLock(); + // notifyMessage.arg1 is 0 on complete c = 0; } else { @@ -770,19 +777,24 @@ public class CdmaConnection extends Connection { } /** - * Set post dial state and acquire wake lock while switching to "started" - * state, the wake lock will be released if state switches out of "started" + * Set post dial state and acquire wake lock while switching to "started" or "wait" + * state, the wake lock will be released if state switches out of "started" or "wait" * state or after WAKE_LOCK_TIMEOUT_MILLIS. * @param s new PostDialState */ private void setPostDialState(PostDialState s) { - if (postDialState != PostDialState.STARTED - && s == PostDialState.STARTED) { - acquireWakeLock(); - Message msg = h.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT); - h.sendMessageDelayed(msg, WAKE_LOCK_TIMEOUT_MILLIS); - } else if (postDialState == PostDialState.STARTED - && s != PostDialState.STARTED) { + if (s == PostDialState.STARTED || + s == PostDialState.PAUSE) { + synchronized (mPartialWakeLock) { + if (mPartialWakeLock.isHeld()) { + h.removeMessages(EVENT_WAKE_LOCK_TIMEOUT); + } else { + acquireWakeLock(); + } + Message msg = h.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT); + h.sendMessageDelayed(msg, WAKE_LOCK_TIMEOUT_MILLIS); + } + } else { h.removeMessages(EVENT_WAKE_LOCK_TIMEOUT); releaseWakeLock(); }