diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index f81aa7e86..2a4bd7415 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -211,6 +211,7 @@ public class LinphoneManager implements LinphoneCoreListener { private void routeAudioToSpeakerHelper(boolean speakerOn) { isUsingBluetoothAudioRoute = false; if (mAudioManager != null) { + Compatibility.setAudioManagerInCallMode(mAudioManager); mAudioManager.stopBluetoothSco(); mAudioManager.setBluetoothScoOn(false); } @@ -1211,7 +1212,9 @@ public class LinphoneManager implements LinphoneCoreListener { } if (state == LinphoneCall.State.Connected) { - Log.d("Audio focus requested: " + mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN)); + if (mLc.getCallsNb() == 1) { + Log.d("Audio focus requested: " + (mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED ? "Granted" : "Denied")); + } } if (state == IncomingReceived || (state == State.CallIncomingEarlyMedia && mR.getBoolean(R.bool.allow_ringing_while_early_media))) { @@ -1227,7 +1230,10 @@ public class LinphoneManager implements LinphoneCoreListener { } if (state == CallEnd || state == Error) { - Log.d("Audio focus released: " + mAudioManager.abandonAudioFocus(null)); + if (mLc.getCallsNb() == 0) { + Log.d("Audio focus released: " + (mAudioManager.abandonAudioFocus(null) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED ? "Granted" : "Denied")); + mAudioManager.setMode(AudioManager.MODE_NORMAL); + } Context activity = getContext(); if (activity != null) { TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); @@ -1262,7 +1268,7 @@ public class LinphoneManager implements LinphoneCoreListener { } else { Log.i("New call active while incall (CPU only) wake lock already active"); } - mAudioManager.setMode(AudioManager.MODE_IN_CALL); + Compatibility.setAudioManagerInCallMode(mAudioManager); } mListenerDispatcher.onCallStateChanged(call, state, message); } diff --git a/src/org/linphone/compatibility/ApiElevenPlus.java b/src/org/linphone/compatibility/ApiElevenPlus.java index 23d7e8293..66e70f516 100644 --- a/src/org/linphone/compatibility/ApiElevenPlus.java +++ b/src/org/linphone/compatibility/ApiElevenPlus.java @@ -9,6 +9,7 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.graphics.Bitmap; +import android.media.AudioManager; /* ApiElevenPlus.java @@ -88,4 +89,8 @@ public class ApiElevenPlus { ClipData clip = android.content.ClipData.newPlainText("Message", msg); clipboard.setPrimaryClip(clip); } + + public static void setAudioManagerInCallMode(AudioManager manager) { + manager.setMode(AudioManager.MODE_IN_COMMUNICATION); + } } diff --git a/src/org/linphone/compatibility/ApiFivePlus.java b/src/org/linphone/compatibility/ApiFivePlus.java index 4cdf2c85b..7809702ca 100644 --- a/src/org/linphone/compatibility/ApiFivePlus.java +++ b/src/org/linphone/compatibility/ApiFivePlus.java @@ -25,6 +25,7 @@ import android.database.Cursor; import android.database.MatrixCursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.media.AudioManager; import android.net.Uri; import android.preference.CheckBoxPreference; import android.preference.Preference; @@ -432,4 +433,8 @@ public class ApiFivePlus { public static void removeGlobalLayoutListener(ViewTreeObserver viewTreeObserver, OnGlobalLayoutListener keyboardListener) { viewTreeObserver.removeGlobalOnLayoutListener(keyboardListener); } + + public static void setAudioManagerInCallMode(AudioManager manager) { + manager.setMode(AudioManager.MODE_IN_CALL); + } } diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java index 35f015b76..45cf16173 100644 --- a/src/org/linphone/compatibility/Compatibility.java +++ b/src/org/linphone/compatibility/Compatibility.java @@ -34,6 +34,7 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; +import android.media.AudioManager; import android.net.Uri; import android.preference.Preference; import android.view.Display; @@ -268,4 +269,12 @@ public class Compatibility { ApiFourteenPlus.showNavigationBar(activity); } } + + public static void setAudioManagerInCallMode(AudioManager manager) { + if (Version.sdkAboveOrEqual(Version.API11_HONEYCOMB_30)) { + ApiElevenPlus.setAudioManagerInCallMode(manager); + } else { + ApiFivePlus.setAudioManagerInCallMode(manager); + } + } }