summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Yakavenka <ayakav@codeaurora.org>2012-12-08 10:20:47 -0800
committerWink Saville <wink@google.com>2012-12-10 15:45:04 -0800
commitf2a22db80d9921fae213c763f08f2800d30b5cd3 (patch)
tree3726e51ed344592dfeef87ada9e7eabbc1414756
parent3e02868153369ab32d3ecc7b01f6e48750d6356d (diff)
downloadframeworks_opt_telephony-f2a22db80d9921fae213c763f08f2800d30b5cd3.zip
frameworks_opt_telephony-f2a22db80d9921fae213c763f08f2800d30b5cd3.tar.gz
frameworks_opt_telephony-f2a22db80d9921fae213c763f08f2800d30b5cd3.tar.bz2
Set audio mode after accepting the call
Set the audio mode to incall immediately after accepting the call and not wait till call is reported as ACTIVE by RIL. This is done to speed up time taken for audio to set up the voice path Bug: 7612431 Change-Id: I8008edc64928016ab94aa6d770de248b5d85dc93
-rw-r--r--src/java/com/android/internal/telephony/CallManager.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/java/com/android/internal/telephony/CallManager.java b/src/java/com/android/internal/telephony/CallManager.java
index b87ea50..34ad810 100644
--- a/src/java/com/android/internal/telephony/CallManager.java
+++ b/src/java/com/android/internal/telephony/CallManager.java
@@ -100,6 +100,8 @@ public final class CallManager {
// default phone as the first phone registered, which is PhoneBase obj
private Phone mDefaultPhone;
+ private boolean mSpeedUpAudioForMtCall = false;
+
// state registrants
protected final RegistrantList mPreciseCallStateRegistrants
= new RegistrantList();
@@ -377,14 +379,21 @@ public final class CallManager {
// but only on audio mode transitions
switch (getState()) {
case RINGING:
- if (audioManager.getMode() != AudioManager.MODE_RINGTONE) {
+ int curAudioMode = audioManager.getMode();
+ if (curAudioMode != AudioManager.MODE_RINGTONE) {
// only request audio focus if the ringtone is going to be heard
if (audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0) {
if (VDBG) Log.d(LOG_TAG, "requestAudioFocus on STREAM_RING");
audioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
}
- audioManager.setMode(AudioManager.MODE_RINGTONE);
+ if(!mSpeedUpAudioForMtCall) {
+ audioManager.setMode(AudioManager.MODE_RINGTONE);
+ }
+ }
+
+ if (mSpeedUpAudioForMtCall && (curAudioMode != AudioManager.MODE_IN_CALL)) {
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
}
break;
case OFFHOOK:
@@ -400,13 +409,14 @@ public final class CallManager {
// enable IN_COMMUNICATION audio mode instead for sipPhone
newAudioMode = AudioManager.MODE_IN_COMMUNICATION;
}
- if (audioManager.getMode() != newAudioMode) {
+ if (audioManager.getMode() != newAudioMode || mSpeedUpAudioForMtCall) {
// request audio focus before setting the new mode
if (VDBG) Log.d(LOG_TAG, "requestAudioFocus on STREAM_VOICE_CALL");
audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
audioManager.setMode(newAudioMode);
}
+ mSpeedUpAudioForMtCall = false;
break;
case IDLE:
if (audioManager.getMode() != AudioManager.MODE_NORMAL) {
@@ -415,6 +425,7 @@ public final class CallManager {
// abandon audio focus after the mode has been set back to normal
audioManager.abandonAudioFocusForCall();
}
+ mSpeedUpAudioForMtCall = false;
break;
}
}
@@ -529,6 +540,23 @@ public final class CallManager {
}
}
+ Context context = getContext();
+ if (context == null) {
+ Log.d(LOG_TAG, "Speedup Audio Path enhancement: Context is null");
+ } else if (context.getResources().getBoolean(
+ com.android.internal.R.bool.config_speed_up_audio_on_mt_calls)) {
+ Log.d(LOG_TAG, "Speedup Audio Path enhancement");
+ AudioManager audioManager = (AudioManager)
+ context.getSystemService(Context.AUDIO_SERVICE);
+ int currMode = audioManager.getMode();
+ if ((currMode != AudioManager.MODE_IN_CALL) && !(ringingPhone instanceof SipPhone)) {
+ Log.d(LOG_TAG, "setAudioMode Setting audio mode from " +
+ currMode + " to " + AudioManager.MODE_IN_CALL);
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
+ mSpeedUpAudioForMtCall = true;
+ }
+ }
+
ringingPhone.acceptCall();
if (VDBG) {