diff options
author | Alex Yakavenka <ayakav@codeaurora.org> | 2012-12-08 10:20:47 -0800 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2012-12-10 15:45:04 -0800 |
commit | f2a22db80d9921fae213c763f08f2800d30b5cd3 (patch) | |
tree | 3726e51ed344592dfeef87ada9e7eabbc1414756 | |
parent | 3e02868153369ab32d3ecc7b01f6e48750d6356d (diff) | |
download | frameworks_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.java | 34 |
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) { |