Merge "Fix setting audio group mode in SipPhone." into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
273d2ea3f9
@@ -17,6 +17,7 @@
|
|||||||
package com.android.internal.telephony.sip;
|
package com.android.internal.telephony.sip;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.net.rtp.AudioGroup;
|
import android.net.rtp.AudioGroup;
|
||||||
import android.net.sip.SipAudioCall;
|
import android.net.sip.SipAudioCall;
|
||||||
import android.net.sip.SipErrorCode;
|
import android.net.sip.SipErrorCode;
|
||||||
@@ -126,7 +127,7 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
(ringingCall.getState() == Call.State.WAITING)) {
|
(ringingCall.getState() == Call.State.WAITING)) {
|
||||||
if (DEBUG) Log.d(LOG_TAG, "acceptCall");
|
if (DEBUG) Log.d(LOG_TAG, "acceptCall");
|
||||||
// Always unmute when answering a new call
|
// Always unmute when answering a new call
|
||||||
setMute(false);
|
ringingCall.setMute(false);
|
||||||
ringingCall.acceptCall();
|
ringingCall.acceptCall();
|
||||||
} else {
|
} else {
|
||||||
throw new CallStateException("phone not ringing");
|
throw new CallStateException("phone not ringing");
|
||||||
@@ -170,7 +171,7 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
throw new CallStateException("cannot dial in current state");
|
throw new CallStateException("cannot dial in current state");
|
||||||
}
|
}
|
||||||
|
|
||||||
setMute(false);
|
foregroundCall.setMute(false);
|
||||||
try {
|
try {
|
||||||
Connection c = foregroundCall.dial(dialString);
|
Connection c = foregroundCall.dial(dialString);
|
||||||
return c;
|
return c;
|
||||||
@@ -288,16 +289,13 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setEchoSuppressionEnabled(boolean enabled) {
|
public void setEchoSuppressionEnabled(boolean enabled) {
|
||||||
|
// TODO: Remove the enabled argument. We should check the speakerphone
|
||||||
|
// state with AudioManager instead of keeping a state here so the
|
||||||
|
// method with a state argument is redundant. Also rename the method
|
||||||
|
// to something like onSpeaerphoneStateChanged(). Echo suppression may
|
||||||
|
// not be available on every device.
|
||||||
synchronized (SipPhone.class) {
|
synchronized (SipPhone.class) {
|
||||||
AudioGroup audioGroup = foregroundCall.getAudioGroup();
|
foregroundCall.setAudioGroupMode();
|
||||||
if (audioGroup == null) return;
|
|
||||||
int mode = audioGroup.getMode();
|
|
||||||
audioGroup.setMode(enabled
|
|
||||||
? AudioGroup.MODE_ECHO_SUPPRESSION
|
|
||||||
: AudioGroup.MODE_NORMAL);
|
|
||||||
if (DEBUG) Log.d(LOG_TAG, String.format(
|
|
||||||
"audioGroup mode change: %d --> %d", mode,
|
|
||||||
audioGroup.getMode()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -450,13 +448,33 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
((SipConnection) connections.get(0)).acceptCall();
|
((SipConnection) connections.get(0)).acceptCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isSpeakerOn() {
|
||||||
|
return ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE))
|
||||||
|
.isSpeakerphoneOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAudioGroupMode() {
|
||||||
|
AudioGroup audioGroup = getAudioGroup();
|
||||||
|
if (audioGroup == null) return;
|
||||||
|
int mode = audioGroup.getMode();
|
||||||
|
if (state == State.HOLDING) {
|
||||||
|
audioGroup.setMode(AudioGroup.MODE_ON_HOLD);
|
||||||
|
} else if (getMute()) {
|
||||||
|
audioGroup.setMode(AudioGroup.MODE_MUTED);
|
||||||
|
} else if (isSpeakerOn()) {
|
||||||
|
audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);
|
||||||
|
} else {
|
||||||
|
audioGroup.setMode(AudioGroup.MODE_NORMAL);
|
||||||
|
}
|
||||||
|
if (DEBUG) Log.d(LOG_TAG, String.format(
|
||||||
|
"audioGroup mode change: %d --> %d", mode,
|
||||||
|
audioGroup.getMode()));
|
||||||
|
}
|
||||||
|
|
||||||
void hold() throws CallStateException {
|
void hold() throws CallStateException {
|
||||||
setState(State.HOLDING);
|
setState(State.HOLDING);
|
||||||
AudioGroup audioGroup = getAudioGroup();
|
|
||||||
if (audioGroup != null) {
|
|
||||||
audioGroup.setMode(AudioGroup.MODE_ON_HOLD);
|
|
||||||
}
|
|
||||||
for (Connection c : connections) ((SipConnection) c).hold();
|
for (Connection c : connections) ((SipConnection) c).hold();
|
||||||
|
setAudioGroupMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void unhold() throws CallStateException {
|
void unhold() throws CallStateException {
|
||||||
@@ -465,19 +483,19 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
for (Connection c : connections) {
|
for (Connection c : connections) {
|
||||||
((SipConnection) c).unhold(audioGroup);
|
((SipConnection) c).unhold(audioGroup);
|
||||||
}
|
}
|
||||||
|
setAudioGroupMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMute(boolean muted) {
|
void setMute(boolean muted) {
|
||||||
AudioGroup audioGroup = getAudioGroup();
|
for (Connection c : connections) {
|
||||||
if (audioGroup == null) return;
|
((SipConnection) c).setMute(muted);
|
||||||
audioGroup.setMode(
|
}
|
||||||
muted ? AudioGroup.MODE_MUTED : AudioGroup.MODE_NORMAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean getMute() {
|
boolean getMute() {
|
||||||
AudioGroup audioGroup = getAudioGroup();
|
return connections.isEmpty()
|
||||||
if (audioGroup == null) return false;
|
? false
|
||||||
return (audioGroup.getMode() == AudioGroup.MODE_MUTED);
|
: ((SipConnection) connections.get(0)).getMute();
|
||||||
}
|
}
|
||||||
|
|
||||||
void merge(SipCall that) throws CallStateException {
|
void merge(SipCall that) throws CallStateException {
|
||||||
@@ -736,6 +754,17 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMute(boolean muted) {
|
||||||
|
if ((mSipAudioCall != null) && (muted != mSipAudioCall.isMuted())) {
|
||||||
|
mSipAudioCall.toggleMute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean getMute() {
|
||||||
|
return (mSipAudioCall == null) ? false
|
||||||
|
: mSipAudioCall.isMuted();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setState(Call.State state) {
|
protected void setState(Call.State state) {
|
||||||
if (state == mState) return;
|
if (state == mState) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user