From 23f21600d0927365e5e7bdc4e566ba52101301b4 Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Thu, 30 Sep 2010 12:03:14 +0800 Subject: [PATCH] Add CallManager/Phone.setEchoSuppressionEnabled(). Change-Id: I7bc6241e6fa815787799a53d6f3a076567edc361 --- .../internal/telephony/CallManager.java | 19 +++++++++++++++++++ .../com/android/internal/telephony/Phone.java | 5 +++++ .../android/internal/telephony/PhoneBase.java | 4 ++++ .../internal/telephony/PhoneProxy.java | 4 ++++ .../internal/telephony/sip/SipPhone.java | 14 ++++++++++++++ 5 files changed, 46 insertions(+) diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java index 7c3508ff21893..09b7d053db66e 100644 --- a/telephony/java/com/android/internal/telephony/CallManager.java +++ b/telephony/java/com/android/internal/telephony/CallManager.java @@ -860,6 +860,25 @@ public final class CallManager { return false; } + /** + * Enables or disables echo suppression. + */ + public void setEchoSuppressionEnabled(boolean enabled) { + if (VDBG) { + Log.d(LOG_TAG, " setEchoSuppression(" + enabled + ")"); + Log.d(LOG_TAG, this.toString()); + } + + if (hasActiveFgCall()) { + getActiveFgCall().getPhone().setEchoSuppressionEnabled(enabled); + } + + if (VDBG) { + Log.d(LOG_TAG, "End setEchoSuppression(" + enabled + ")"); + Log.d(LOG_TAG, this.toString()); + } + } + /** * Play a DTMF tone on the active call. * diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java index 9afade33b006c..d5791ebbcee53 100644 --- a/telephony/java/com/android/internal/telephony/Phone.java +++ b/telephony/java/com/android/internal/telephony/Phone.java @@ -1168,6 +1168,11 @@ public interface Phone { */ boolean getMute(); + /** + * Enables or disables echo suppression. + */ + void setEchoSuppressionEnabled(boolean enabled); + /** * Invokes RIL_REQUEST_OEM_HOOK_RAW on RIL implementation. * diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java index ff28773df5c2f..53503a53c2270 100644 --- a/telephony/java/com/android/internal/telephony/PhoneBase.java +++ b/telephony/java/com/android/internal/telephony/PhoneBase.java @@ -505,6 +505,10 @@ public abstract class PhoneBase extends Handler implements Phone { mCM.unregisterForResendIncallMute(h); } + public void setEchoSuppressionEnabled(boolean enabled) { + // no need for regular phone + } + /** * Subclasses of Phone probably want to replace this with a * version scoped to their packages diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java index e1511e6ed79f1..6f08868dda8df 100644 --- a/telephony/java/com/android/internal/telephony/PhoneProxy.java +++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java @@ -568,6 +568,10 @@ public class PhoneProxy extends Handler implements Phone { return mActivePhone.getMute(); } + public void setEchoSuppressionEnabled(boolean enabled) { + mActivePhone.setEchoSuppressionEnabled(enabled); + } + public void invokeOemRilRequestRaw(byte[] data, Message response) { mActivePhone.invokeOemRilRequestRaw(data, response); } diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java index af3e0886a304d..e3c3d6591585a 100755 --- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java +++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java @@ -327,6 +327,20 @@ public class SipPhone extends SipPhoneBase { Log.e(LOG_TAG, "call waiting not supported"); } + @Override + public void setEchoSuppressionEnabled(boolean enabled) { + synchronized (SipPhone.class) { + AudioGroup audioGroup = foregroundCall.getAudioGroup(); + if (audioGroup == null) return; + int mode = audioGroup.getMode(); + audioGroup.setMode(enabled + ? AudioGroup.MODE_ECHO_SUPPRESSION + : AudioGroup.MODE_NORMAL); + Log.d(LOG_TAG, String.format("audioGroup mode change: %d --> %d", + mode, audioGroup.getMode())); + } + } + public void setMute(boolean muted) { synchronized (SipPhone.class) { foregroundCall.setMute(muted);