Play local DTMF tones for post-dial actions
Bug: 10695960
Change-Id: I9d039f8a1a27c7f9371eea1a76f175ca9df3249f
diff --git a/src/com/android/phone/BluetoothManager.java b/src/com/android/phone/BluetoothManager.java
index ffce465..443c950 100644
--- a/src/com/android/phone/BluetoothManager.java
+++ b/src/com/android/phone/BluetoothManager.java
@@ -32,6 +32,7 @@
import android.util.Log;
import com.android.internal.telephony.CallManager;
+import com.android.internal.telephony.Connection;
import com.android.services.telephony.common.Call;
import java.util.List;
@@ -416,7 +417,7 @@
}
@Override
- public void onPostDialWait(int callId, String chars) {
+ public void onPostDialAction(Connection.PostDialState state, int callId, String chars, char c) {
// no-op
}
diff --git a/src/com/android/phone/CallHandlerServiceProxy.java b/src/com/android/phone/CallHandlerServiceProxy.java
index 2f71457..e54b624 100644
--- a/src/com/android/phone/CallHandlerServiceProxy.java
+++ b/src/com/android/phone/CallHandlerServiceProxy.java
@@ -31,8 +31,11 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
+import android.text.TextUtils;
import android.util.Log;
+import com.android.internal.telephony.Connection;
+import com.android.internal.telephony.Connection.PostDialState;
import com.android.phone.AudioRouter.AudioModeListener;
import com.android.phone.NotificationMgr.StatusBarHelper;
import com.android.services.telephony.common.AudioMode;
@@ -207,7 +210,9 @@
@Override
- public void onPostDialWait(int callId, String remainingChars) {
+ public void onPostDialAction(Connection.PostDialState state, int callId, String remainingChars,
+ char currentChar) {
+ if (state != PostDialState.WAIT) return;
try {
synchronized (mServiceAndQueueLock) {
if (mCallHandlerServiceGuarded == null) {
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index 75da0be..11792af 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -265,20 +265,23 @@
final Connection.PostDialState state = (Connection.PostDialState) r.userObj;
switch (state) {
- // TODO(klp): add other post dial related functions
case WAIT:
final Call call = getCallFromMap(mCallMap, c, false);
if (call == null) {
Log.i(TAG, "Call no longer exists. Skipping onPostDialWait().");
} else {
for (Listener mListener : mListeners) {
- mListener.onPostDialWait(call.getCallId(),
- c.getRemainingPostDialString());
+ mListener.onPostDialAction(state, call.getCallId(),
+ c.getRemainingPostDialString(), ch);
}
}
break;
-
default:
+ // This is primarily to cause the DTMFTonePlayer to play local tones.
+ // Other listeners simply perform no-ops.
+ for (Listener mListener : mListeners) {
+ mListener.onPostDialAction(state, 0, "", ch);
+ }
break;
}
}
@@ -840,7 +843,8 @@
void onDisconnect(Call call);
void onIncoming(Call call);
void onUpdate(List<Call> calls);
- void onPostDialWait(int callId, String remainingChars);
+ void onPostDialAction(Connection.PostDialState state, int callId, String remainingChars,
+ char c);
}
/**
diff --git a/src/com/android/phone/DTMFTonePlayer.java b/src/com/android/phone/DTMFTonePlayer.java
index 0acd114..b8adaf1 100644
--- a/src/com/android/phone/DTMFTonePlayer.java
+++ b/src/com/android/phone/DTMFTonePlayer.java
@@ -27,6 +27,7 @@
import android.util.Log;
import com.android.internal.telephony.CallManager;
+import com.android.internal.telephony.Connection.PostDialState;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.services.telephony.common.Call;
@@ -124,8 +125,25 @@
}
@Override
- public void onPostDialWait(int callId, String chars) {
- // no-op
+ public void onPostDialAction(PostDialState state, int callId, String remainingChars,
+ char currentChar) {
+ switch (state) {
+ case STARTED:
+ stopLocalToneIfNeeded();
+ if (!mToneMap.containsKey(currentChar)) {
+ return;
+ }
+ startLocalToneIfNeeded(currentChar);
+ break;
+ case PAUSE:
+ case WAIT:
+ case WILD:
+ case COMPLETE:
+ stopLocalToneIfNeeded();
+ break;
+ default:
+ break;
+ }
}
/**
@@ -387,5 +405,4 @@
Log.d(LOG_TAG, msg);
}
}
-
}