Skip to content

Commit 273d2ea

Browse files
Hung-ying TyanAndroid (Google) Code Review
authored andcommitted
Merge "Fix setting audio group mode in SipPhone." into gingerbread
2 parents 3cf7137 + 1d12ef0 commit 273d2ea

File tree

1 file changed

+50
-21
lines changed

1 file changed

+50
-21
lines changed

telephony/java/com/android/internal/telephony/sip/SipPhone.java

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.android.internal.telephony.sip;
1818

1919
import android.content.Context;
20+
import android.media.AudioManager;
2021
import android.net.rtp.AudioGroup;
2122
import android.net.sip.SipAudioCall;
2223
import android.net.sip.SipErrorCode;
@@ -126,7 +127,7 @@ public void acceptCall() throws CallStateException {
126127
(ringingCall.getState() == Call.State.WAITING)) {
127128
if (DEBUG) Log.d(LOG_TAG, "acceptCall");
128129
// Always unmute when answering a new call
129-
setMute(false);
130+
ringingCall.setMute(false);
130131
ringingCall.acceptCall();
131132
} else {
132133
throw new CallStateException("phone not ringing");
@@ -170,7 +171,7 @@ private Connection dialInternal(String dialString)
170171
throw new CallStateException("cannot dial in current state");
171172
}
172173

173-
setMute(false);
174+
foregroundCall.setMute(false);
174175
try {
175176
Connection c = foregroundCall.dial(dialString);
176177
return c;
@@ -288,16 +289,13 @@ public void setCallWaiting(boolean enable, Message onComplete) {
288289

289290
@Override
290291
public void setEchoSuppressionEnabled(boolean enabled) {
292+
// TODO: Remove the enabled argument. We should check the speakerphone
293+
// state with AudioManager instead of keeping a state here so the
294+
// method with a state argument is redundant. Also rename the method
295+
// to something like onSpeaerphoneStateChanged(). Echo suppression may
296+
// not be available on every device.
291297
synchronized (SipPhone.class) {
292-
AudioGroup audioGroup = foregroundCall.getAudioGroup();
293-
if (audioGroup == null) return;
294-
int mode = audioGroup.getMode();
295-
audioGroup.setMode(enabled
296-
? AudioGroup.MODE_ECHO_SUPPRESSION
297-
: AudioGroup.MODE_NORMAL);
298-
if (DEBUG) Log.d(LOG_TAG, String.format(
299-
"audioGroup mode change: %d --> %d", mode,
300-
audioGroup.getMode()));
298+
foregroundCall.setAudioGroupMode();
301299
}
302300
}
303301

@@ -450,13 +448,33 @@ void acceptCall() throws CallStateException {
450448
((SipConnection) connections.get(0)).acceptCall();
451449
}
452450

453-
void hold() throws CallStateException {
454-
setState(State.HOLDING);
451+
private boolean isSpeakerOn() {
452+
return ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE))
453+
.isSpeakerphoneOn();
454+
}
455+
456+
void setAudioGroupMode() {
455457
AudioGroup audioGroup = getAudioGroup();
456-
if (audioGroup != null) {
458+
if (audioGroup == null) return;
459+
int mode = audioGroup.getMode();
460+
if (state == State.HOLDING) {
457461
audioGroup.setMode(AudioGroup.MODE_ON_HOLD);
462+
} else if (getMute()) {
463+
audioGroup.setMode(AudioGroup.MODE_MUTED);
464+
} else if (isSpeakerOn()) {
465+
audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);
466+
} else {
467+
audioGroup.setMode(AudioGroup.MODE_NORMAL);
458468
}
469+
if (DEBUG) Log.d(LOG_TAG, String.format(
470+
"audioGroup mode change: %d --> %d", mode,
471+
audioGroup.getMode()));
472+
}
473+
474+
void hold() throws CallStateException {
475+
setState(State.HOLDING);
459476
for (Connection c : connections) ((SipConnection) c).hold();
477+
setAudioGroupMode();
460478
}
461479

462480
void unhold() throws CallStateException {
@@ -465,19 +483,19 @@ void unhold() throws CallStateException {
465483
for (Connection c : connections) {
466484
((SipConnection) c).unhold(audioGroup);
467485
}
486+
setAudioGroupMode();
468487
}
469488

470489
void setMute(boolean muted) {
471-
AudioGroup audioGroup = getAudioGroup();
472-
if (audioGroup == null) return;
473-
audioGroup.setMode(
474-
muted ? AudioGroup.MODE_MUTED : AudioGroup.MODE_NORMAL);
490+
for (Connection c : connections) {
491+
((SipConnection) c).setMute(muted);
492+
}
475493
}
476494

477495
boolean getMute() {
478-
AudioGroup audioGroup = getAudioGroup();
479-
if (audioGroup == null) return false;
480-
return (audioGroup.getMode() == AudioGroup.MODE_MUTED);
496+
return connections.isEmpty()
497+
? false
498+
: ((SipConnection) connections.get(0)).getMute();
481499
}
482500

483501
void merge(SipCall that) throws CallStateException {
@@ -736,6 +754,17 @@ void unhold(AudioGroup audioGroup) throws CallStateException {
736754
}
737755
}
738756

757+
void setMute(boolean muted) {
758+
if ((mSipAudioCall != null) && (muted != mSipAudioCall.isMuted())) {
759+
mSipAudioCall.toggleMute();
760+
}
761+
}
762+
763+
boolean getMute() {
764+
return (mSipAudioCall == null) ? false
765+
: mSipAudioCall.isMuted();
766+
}
767+
739768
@Override
740769
protected void setState(Call.State state) {
741770
if (state == mState) return;

0 commit comments

Comments
 (0)